การเรียนรู้ของเครื่องรวมอยู่ในการออกแบบเครื่องมือค้นหาอย่างไร


15

ขณะนี้ฉันกำลังสร้างเครื่องมือค้นหาภายในองค์กรขนาดเล็กโดยใช้ Apache Lucene จุดประสงค์ของมันคือเรียบง่าย - จากคำหลักบางคำมันจะแนะนำบทความที่เขียนภายใน บริษัท ของเรา ฉันใช้การให้คะแนน TF-IDF ที่ค่อนข้างเป็นมาตรฐานในฐานะตัวชี้วัดพื้นฐานและสร้างกลไกการให้คะแนนของฉันเองอยู่ด้านบน สิ่งเหล่านี้ดูเหมือนจะทำงานได้อย่างยอดเยี่ยมยกเว้นในบางกรณีที่การจัดอันดับดูยุ่งเหยิง

ดังนั้นสิ่งที่ฉันวางแผนจะทำคือการเพิ่มลิงค์ที่เกี่ยวข้อง / ไม่เกี่ยวข้องขนาดเล็กลงในหน้าผลการค้นหาเพื่อให้ผู้ใช้สามารถคลิกที่ลิงค์ใดลิงก์หนึ่งขึ้นอยู่กับการรับรู้ของพวกเขาว่าควรรวมผลลัพธ์นั้นไว้ด้วยหรือไม่

ความคิดของฉัน

  1. ปฏิบัติต่อป้ายกำกับที่เกี่ยวข้อง / ไม่เกี่ยวข้องเหล่านี้และสร้างข้อมูลการฝึกอบรม
  2. ใช้ข้อมูลนี้เพื่อฝึกฝนลักษณนาม (เช่น SVM)
  3. รวมโมเดลนี้ลงในเครื่องมือค้นหาเช่นผลลัพธ์ใหม่ทุกรายการจะผ่านตัวแยกประเภทและจะได้รับการกำหนดป้ายกำกับว่าเกี่ยวข้องหรือไม่

วิธีนี้ดูเหมือนง่ายสำหรับฉัน แต่ฉันไม่แน่ใจว่าจะใช้งานได้จริงหรือไม่ ฉันมีคำถามสองข้อ:

  1. คุณสมบัติทั้งหมดที่ฉันควรแยกคืออะไร
  2. มีวิธีที่ดีกว่าในการรวมส่วนประกอบการเรียนรู้ของเครื่องเข้ากับเครื่องมือค้นหาหรือไม่ เป้าหมายสุดท้ายของฉันคือ "เรียนรู้" ฟังก์ชั่นการจัดอันดับตามตรรกะทางธุรกิจเช่นเดียวกับความคิดเห็นของผู้ใช้

4
ฉันทำสิ่งนี้ครั้งเดียวและผู้ใช้เกลียดมันดังนั้นฉันจึงปิด ปัญหาคือพฤติกรรมของผู้ใช้ ผู้ใช้ปรับให้เข้ากับจุดอ่อนในผลการค้นหาโดยการเปลี่ยนเงื่อนไขของพวกเขาแล้วพวกเขาจะกลับมาใช้คำเหล่านั้น ระบบตอบสนองการปรับการจัดอันดับของรายการและคำที่ชื่นชอบเริ่มที่จะให้ผลลัพธ์ที่แตกต่าง ผู้ใช้ปิดการใช้งานนี้ การเรียนรู้ไม่ได้หมายความว่ามันเป็นอย่างชาญฉลาด;)
Reactgular

นี่คือการใช้งานโดยใช้ elasticsearch และ angularjs - ยังมีคำอธิบายที่คุณต้องการ - machinelearningbloblo.com 2016/12/12/30
Vivek Kalyanarangan

คำตอบ:


15

(1) ฉันควรแยกคุณสมบัติอะไรทั้งหมด

ก่อนอื่นให้ตระหนักว่าคุณไม่ได้จัดประเภทเอกสาร คุณกำลังแยกประเภทคู่ (เอกสาร, แบบสอบถาม) ดังนั้นคุณควรแยกคุณสมบัติที่แสดงว่ามันเข้ากันได้ดีเพียงใด

วิธีการมาตรฐานในการเรียนรู้เพื่อจัดอันดับคือการเรียกใช้แบบสอบถามกับการตั้งค่าเครื่องมือค้นหาต่าง ๆ (เช่น tf-idf, BM-25 เป็นต้น) จากนั้นทำการฝึกอบรมแบบจำลองด้วยคะแนนความคล้ายคลึงกัน แต่สำหรับ SE ที่มีขนาดเล็ก คุณสามารถมีคุณสมบัติเช่น

  • สำหรับแต่ละคำบูลีนที่ระบุว่าคำนั้นเกิดขึ้นในทั้งแบบสอบถามและเอกสารหรือไม่ หรืออาจไม่ใช่บูลีน แต่น้ำหนักของ tf-idf ของคำค้นหาที่เกิดขึ้นจริงในเอกสาร
  • เมตริกที่ทับซ้อนกันหลายแบบเช่นJaccardหรือ Tanimoto

(2) มีวิธีที่ดีกว่าในการรวมส่วนประกอบการเรียนรู้ของเครื่องเข้ากับเครื่องมือค้นหาหรือไม่ เป้าหมายสุดท้ายของฉันคือ "เรียนรู้" ฟังก์ชั่นการจัดอันดับตามตรรกะทางธุรกิจเช่นเดียวกับความคิดเห็นของผู้ใช้

นี่เป็นคำถามที่กว้างมากและคำตอบนั้นขึ้นอยู่กับว่าคุณต้องการใส่ความพยายามมากแค่ไหนการปรับปรุงแรกที่นึกถึงคือคุณไม่ควรใช้การตัดสินความเกี่ยวข้องแบบไบนารีจากตัวจําแนก แต่เป็นฟังก์ชันการตัดสินใจที่มีมูลค่าจริง เพื่อให้คุณสามารถจัดอันดับได้จริงแทนที่จะเป็นเพียงการกรอง สำหรับ SVM ฟังก์ชันการตัดสินใจคือระยะทางที่เซ็นชื่อกับไฮเปอร์เพลน ชุดการเรียนรู้ของเครื่องที่ดีมีส่วนต่อประสานเพื่อรับคุณค่า

นอกเหนือจากนั้นให้ดูการเรียนรู้แบบจับคู่และตามลำดับเพื่อจัดอันดับ สิ่งที่คุณแนะนำคือวิธีการที่เรียกว่าพอยต์ IIRC การจับคู่แบบแนวนอนทำงานได้ดีขึ้นมากในทางปฏิบัติ เหตุผลก็คือด้วยการจัดอันดับแบบคู่คุณต้องมีการคลิกน้อยลงแทนที่จะให้ผู้ใช้ติดป้ายกำกับเอกสารที่เกี่ยวข้อง / ไม่เกี่ยวข้องคุณเพียงแค่ให้ปุ่ม "ที่เกี่ยวข้อง" เท่านั้น จากนั้นคุณเรียนรู้ลักษณนามของไบนารีบน triples (document1, document2, query) ที่บอกว่า document1 นั้นเกี่ยวข้องกับเคียวรีมากกว่า document2 หรือในทางกลับกัน เมื่อผู้ใช้ติดป้ายกำกับพูดเอกสาร 4 ในการจัดอันดับว่ามีความเกี่ยวข้องซึ่งจะทำให้คุณมีหกตัวอย่างที่จะเรียนรู้จาก:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

ดังนั้นคุณจะได้รับเชิงลบได้ฟรี

(นี่เป็นเพียงข้อเสนอแนะฉันไม่ได้ลองทำสิ่งนี้เลยฉันเพิ่งได้ทำงานในกลุ่มวิจัยที่ผู้คนกำลังเรียนรู้การจัดอันดับฉันทำการนำเสนอบทความจากคนอื่นสำหรับกลุ่มการอ่านหนึ่งครั้งบางทีสไลด์สามารถช่วยได้)


+1 ขอบคุณ นี่เป็นครั้งที่สองที่คุณช่วยฉัน! ขอผมใช้เวลาสองสามชั่วโมงย่อยนี้ :)
ตำนาน

4
นั่นเป็นคำตอบที่ยอดเยี่ยมฉันแค่อยากจะแนะนำการปรับแต่งเล็กน้อย จากมุมมอง ux คุณมีแนวโน้มมากที่จะให้ผู้ใช้ทำคะแนนผลลัพธ์โดยใช้ปุ่ม "ไม่เกี่ยวข้อง" มากกว่าปุ่ม "ที่เกี่ยวข้อง" ใครบ้างที่จะให้คะแนนเมื่อพวกเขาพบสิ่งที่พวกเขากำลังมองหา? พวกเขามีแนวโน้มที่จะกดปุ่มที่ดูเหมือนว่า "โอกาสที่จะบ่น" มากขึ้นเมื่อพวกเขาไม่พบสิ่งที่พวกเขาต้องการเพราะการปรับปรุงระบบ ณ จุดนั้นสอดคล้องกับเป้าหมายปัจจุบันของพวกเขา
Racheet

4
tl; dr หากคุณจะใช้เพียงอินพุตเดียวทำให้เป็น "ไม่เกี่ยวข้อง" ผู้คนมีแนวโน้มที่จะคลิกเมื่อพวกเขาผิดหวัง
Racheet

อะไรคือแนวทาง "แบบตามรายการ"? นอกจากนี้คุณหมายถึง 3 หรือ 6 ตัวอย่างฟรีหรือไม่ (3 รายการสุดท้ายดูเหมือนจะเป็นเพียงการกล่าวซ้ำของ 3 รายการแรก)
สูงสุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.