หน่วย 4 / 11

กลยุทธ์การดึงข้อมูล: Top-k, Hybrid, Re-ranking

กำไร:

  • การใช้การค้นหาแบบไฮบริดที่รวมการเลือก top-k และการค้นหาความหมายและคำสำคัญ
  • เพิ่มความแม่นยำในการค้นหาครั้งแรกด้วยการจัดอันดับใหม่
  • ทำให้คำถามที่ยากสามารถค้นหาได้มากขึ้นด้วยเทคนิค เช่น การแปลงข้อความค้นหาและ HyDE

คุณฉีกเอกสารอย่างสวยงามและนำไปไว้ในฐานข้อมูลเวกเตอร์ ตอนนี้เป็นงานจริง: ดึงชิ้นส่วนที่ถูกต้องเมื่อผู้ใช้ถามคำถาม สิ่งนี้เรียกว่าการดึงข้อมูลกลับมาและเป็นหัวใจสำคัญของคุณภาพ RAG จำวลี "คุณภาพการดึงข้อมูล = คุณภาพ RAG"; หน่วยนี้ถือเป็นศิลปะแห่งการปรับปรุงคุณภาพอย่างแท้จริง เราจะครอบคลุมเทคนิคเชิงปฏิบัติตั้งแต่การเลือก top-k ไปจนถึงการค้นหาแบบไฮบริด ตั้งแต่การจัดอันดับใหม่ไปจนถึงการแปลงข้อความค้นหา

Top-k: เราจะนำมากี่ชิ้น?

การตั้งค่าพื้นฐานที่สุด: จำนวนชิ้น (k) ที่จะส่งคืนจากการค้นหา หากคุณนำมาน้อยกว่า (k=1) มีความเสี่ยงสูงที่จะพลาดชิ้นส่วนที่ถูกต้อง หากคุณเพิ่มมากเกินไป (k=20) มันจะเพิ่มสัญญาณรบกวนให้กับโมเดล และราคาโทเค็นจะเพิ่มขึ้น

แยกแยะระหว่างสองแนวคิด เรียกคืน: อัตราที่ชิ้นส่วนที่ถูกต้องอยู่ในหมู่ชิ้นส่วนที่ดึงมา ความแม่นยำ: อัตราที่เกี่ยวข้องกับสิ่งที่ดึงมา การเพิ่ม k จะเพิ่มการจดจำแต่ลดความแม่นยำลง เป้าหมายคือเพื่อความสมดุลของทั้งสอง

ท็อป-เค

ผลกระทบ

สถานการณ์ที่เหมาะสม

1-3

มีความแม่นยำสูง เสี่ยงต่อการพลาด

คำถามง่ายๆ มีคำตอบเดียว

4-8

ยอดคงเหลือ; สถานการณ์ส่วนใหญ่

องค์กรทั่วไป RAG

10-20

การเรียกคืนที่สูงขึ้น เสียงรบกวนจะเพิ่มขึ้น

โดยมีการจัดอันดับใหม่ (ด้านล่าง)

เคล็ดลับ: รูปแบบทั่วไปและมีประสิทธิภาพ: ดึงข้อมูลแบบกว้าง (k=20) จากนั้นแคบลงด้วยการจัดอันดับใหม่ (4 อันดับแรก) ด้วยวิธีนี้คุณจะไม่พลาดสิ่งใดและให้บริบทที่ชัดเจนแก่โมเดล

การค้นหาแบบไฮบริด: พลังของการค้นหาสองครั้ง

การค้นหาความหมาย (เวกเตอร์) จับความหมายแต่พลาดไป: รหัสผลิตภัณฑ์แบบเต็ม ("XR-4471") ตัวย่อที่หายาก ชื่อเฉพาะ หมายเลขเวอร์ชัน สำหรับงานจับคู่แบบตรงทั้งหมดเหล่านี้ การค้นหาคำหลักแบบเดิมๆ โดยเฉพาะอัลกอริธึมแบบคลาสสิกที่เรียกว่า BM25 นั้นดีมาก

การค้นหาแบบไฮบริดผสมผสานทั้งสองเข้าด้วยกัน: ทั้งการค้นหาความหมายและการค้นหาคำสำคัญทำงานโดยรวมผลลัพธ์เข้าด้วยกัน ดังนั้นในคำถามเช่น “ระยะเวลาการรับประกันของ

โดยปกติแล้วการรวมจะทำด้วย RRF (Reciprocal Rank Fusion): แทร็กที่สูงกว่าในทั้งสองรายการจะมาข้างหน้า

# การดึงข้อมูลแบบไฮบริด (แนวความคิด) sem = vector_search(question, k=20) # Meaningkey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # หลอมรวมทั้งสอง 8 อันดับแรก

การจัดอันดับใหม่: บัตรผ่านที่สองและชาญฉลาดกว่า

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

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

# การดึงข้อมูลแบบสองขั้นตอน (แนวความคิด) ผู้สมัคร = hybrid_search(คำถาม, k=20) # กว้าง, คะแนนด่วน = reranker.score(คำถาม, ผู้สมัคร) # คะแนนความเกี่ยวข้องสำหรับบริบทของผู้สมัครแต่ละคน = rated.rank()[:4] # 4 อันดับแรก

การแปลงแบบสอบถาม

บางครั้งปัญหาไม่ได้อยู่ที่การค้นหา แต่อยู่ที่คำถามนั่นเอง หากผู้ใช้ถามว่า “แล้วคนทำงานระยะไกลล่ะ” ' สิ่งนี้ไม่สามารถค้นหาได้เพียงลำพัง (ยังไม่ชัดเจนว่าอะไรคือสิ่งที่สำหรับคนทำงานระยะไกล) ต่อไปนี้เป็นเทคนิคการแปลงคิวรี:

  • เขียนใหม่: ใช้ประวัติการสนทนาเพื่อทำให้คำถามเป็นแบบสแตนด์อโลน: "คนทำงานระยะไกลมีสิทธิ์ลาประจำปีอะไรบ้าง"
  • การสืบค้นหลายรายการ: สร้าง 3 สำนวนที่แตกต่างกันของคำถามเดียวกัน ค้นหาด้วยคำถามทั้งหมด และรวมผลลัพธ์ คำที่แตกต่างกันค้นหาชิ้นส่วนที่แตกต่างกัน
  • HyDE (การฝังเอกสารสมมุติ): ขั้นแรกให้พิมพ์ "คำตอบที่เป็นไปได้" ให้กับโมเดล จากนั้นจึงฝังและค้นหาคำตอบในจินตนาการนั้น บางครั้งคำตอบในจินตนาการก็พบว่าดีกว่าเพราะเป็นคำที่ใกล้เคียงกับเอกสารจริงมากกว่า

# Multi-query (conceptual)variants = model.uret("แสดงคำถามนี้ด้วย 3 วิธีที่แตกต่างกัน: " + question)tum_sonuc = []for v ในตัวแปร: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]

การดึงกลับที่อ่อนแอ / การดึงกลับที่แข็งแกร่ง

อ่อนแอ (ขั้นตอนเดียว ความหมายเท่านั้น ค่าคงที่ k=3):

result = vector_search(question, k=3)# ปัญหา: ไม่พบรหัสผลิตภัณฑ์ ไม่สามารถป้อนส่วนที่ 3 ที่ถูกต้องในคำถามที่ยากได้

ทรงพลัง (ไฮบริด + widek + การจัดอันดับใหม่ + การค้นหาหลายรายการหากจำเป็น):

ผู้สมัคร = hybrid_search(เขียนใหม่(คำถาม, อดีต), k=20)บริบท = reranker.score(คำถาม, ผู้สมัคร).first(4)# ทั้งการจับคู่แบบตรงทั้งหมดและความหมายจะถูกบันทึก; ไปสู่รุ่นที่ดีที่สุด 4 รุ่น

มินิเคสสามอัน

กรณีที่ 1 — รหัสผลิตภัณฑ์หลบหนี การค้นหาความหมายล้วนๆ ในทีมสนับสนุนไม่พบคำต่อคำ "RTX-9080" ในคำถาม "ข้อผิดพลาดของไดรเวอร์ RTX-9080" เขากำลังนำผลิตภัณฑ์อื่นที่มีชื่อคล้ายกัน เมื่อเพิ่มการค้นหาแบบไฮบริด การจับคู่โค้ดที่ตรงทั้งหมดจะเกิดขึ้นและอัตราการส่งคืนบทความที่ถูกต้องเพิ่มขึ้นจาก 58% เป็น 92%

กรณีที่ 2 — การจัดอันดับความแตกต่างใหม่ นักกฎหมายชุมชนทำงานกับ k=5 แต่รายการที่ถูกต้องคือ 7-10 โดยส่วนใหญ่ เขาอยู่ในอันดับ เมื่อ k=20 + การจัดอันดับใหม่ อัตราของบทความที่ถูกต้องที่อยู่ใน 3 อันดับแรกเพิ่มขึ้นจาก 61% เป็น 94%; เวลาแฝงเพิ่มขึ้นเพียง 300ms ซึ่งเป็นการประนีประนอมที่ยอมรับได้

กรณีที่ 3 — คำถามติดตามผลโดยไม่มีบริบท ในผู้ช่วยฝ่ายทรัพยากรบุคคล ผู้ใช้จะถามว่า “แล้วพนักงานพาร์ทไทม์ล่ะ?” พอผมถาม ระบบก็เอาส่วนที่ไม่เกี่ยวข้องมา ด้วยการเขียนคำถามใหม่ (ดึงบริบท "การลาประจำปี" จากอดีตและเพิ่ม "พนักงานพาร์ทไทม์มีสิทธิ์ลาประจำปี") อัตราคำตอบที่ถูกต้องเพิ่มขึ้นจาก 40% เป็น 86%

ข้อผิดพลาดทั่วไป

  • อาศัยการค้นหาเชิงความหมายเพียงอย่างเดียว: พลาดรหัสผลิตภัณฑ์, ตัวย่อ, ชื่อที่ถูกต้อง; เพิ่มไฮบริด
  • ทำให้ k เล็กเกินไป: ชิ้นส่วนที่ถูกต้องไม่สามารถเข้าสู่รายการได้ ทำให้กว้างและแคบลงด้วยการจัดอันดับใหม่
  • ไม่เคยคิดที่จะจัดอันดับใหม่: การค้นหาครั้งแรกนั้นหยาบคาย สมาร์ทพาสอันที่สองช่วยปรับปรุงคุณภาพอย่างมาก
  • การค้นหาคำถามติดตามผลตามที่เป็น: คำถามที่ไม่มีการค้นหาบริบทว่าไร้ความหมาย เขียนใหม่
  • k เพิ่มขึ้นอย่างสุ่มสี่สุ่มห้า (โดยไม่มีการจัดอันดับใหม่): โมเดลเต็มไปด้วยสัญญาณรบกวน การตอบสนองจะบิดเบี้ยว และต้นทุนเพิ่มขึ้น
ระวัง: แต่ละเทคนิคจะเพิ่มต้นทุนและความล่าช้า การสืบค้นหลายรายการหมายถึงการค้นหา 3 เท่า การจัดอันดับใหม่หมายถึงการเรียกโมเดลเพิ่มเติม เริ่มต้นด้วยไฮบริดธรรมดา + k สมเหตุสมผลก่อน วัดและเพิ่มเทคนิคหนักๆ ที่จำเป็นจริงๆ เพิ่มโดยไม่ต้องวัด

โดยสรุป

  • Top-k คือความสมดุลระหว่างการเรียกคืนและความแม่นยำ โดยทั่วไปแล้ว 4-8 ถือเป็นการเริ่มต้นที่ดี
  • การค้นหาแบบไฮบริดผสมผสานการค้นหาความหมายเข้ากับการค้นหาด้วยคำสำคัญ (BM25) กู้คืนการจับคู่แบบตรงทั้งหมด
  • การจัดอันดับใหม่จะให้คะแนนผู้สมัครใหม่จากการค้นหาเบื้องต้นแบบกว้างๆ ด้วยโมเดลที่แข็งแกร่ง และเลือกสิ่งที่ดีที่สุด
  • การแปลงข้อความค้นหา (การเขียนใหม่, หลายข้อความค้นหา, HyDE) ทำให้สามารถค้นหาคำถามที่ยากและไม่มีบริบทได้
  • รูปแบบที่แข็งแกร่ง: การดึงข้อมูลแบบกว้าง → ผสานกับไฮบริด → แคบลงด้วยการจัดอันดับใหม่ แต่เพิ่มแต่ละเทคนิคด้วยการวัด

งานสมัคร

เตรียมคำถามยากๆ 6 ข้อพร้อมข้อมูลจากหน่วยก่อนหน้า: อย่างน้อย 2 ข้อที่ต้องตรงกันทุกประการ (รหัสผลิตภัณฑ์ ตัวย่อ วันที่) ความหมาย 2 ข้อ (หัวข้อเดียวกันแต่คำต่างกัน) คำถามติดตามผล 2 ข้อโดยไม่มีบริบท (1) อันดับแรก ให้คิดว่าแต่ละคำถามเป็นการค้นหาเชิงความหมายล้วนๆ และทำเครื่องหมายด้วยตนเองว่าส่วนใดจะเกิดขึ้น (2) ประเมินคำถามเดิมอีกครั้งโดยเพิ่มแบบผสมและการจัดอันดับใหม่ (3) เขียนคำถามติดตามผลใหม่โดยไม่มีบริบท หมายเหตุในรูปแบบตารางว่าเทคนิคใดที่สร้างความแตกต่างให้กับคำถามประเภทใด

รายการตรวจสอบ

  • [ ] ฉันรู้ว่า top-k คือความสมดุลที่มีความแม่นยำในการเรียกคืนและเป็นช่วงเริ่มต้นที่สมเหตุสมผล
  • [ ] ฉันสามารถอธิบายได้ว่าทำไมการค้นหาแบบไฮบริดจึงกู้คืนการจับคู่ที่ตรงกันทุกประการ
  • [ ] ฉันสามารถใช้ตรรกะสองขั้นตอนในการจัดอันดับใหม่ได้ (กว้าง → แคบอย่างชาญฉลาด)
  • [ ] ฉันตระหนักดีถึงความจำเป็นในการเขียนคำถามติดตามผลใหม่โดยไม่มีบริบท
  • [ ] ฉันยืนยันว่าฉันได้เพิ่มเทคนิคหนักๆ ด้วยการวัด ไม่ใช่โดยการวัด