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