- เพื่อให้โมเดล AI มีประโยชน์ในบริบทเฉพาะ จำเป็นต้องเข้าถึงความรู้พื้นหลังได้
- โดยทั่วไปนักพัฒนาจะใช้ Retrieval-Augmented Generation (RAG) เพื่อเพิ่มพูนความรู้ของโมเดล AI
- โซลูชัน RAG แบบดั้งเดิมมักลบบริบทออกระหว่างการเข้ารหัสข้อมูล จึงมักค้นคืนข้อมูลที่เกี่ยวข้องไม่พบ
- Contextual Retrieval เป็นวิธีที่ปรับปรุงขั้นตอนการค้นคืนของ RAG อย่างมาก โดยใช้เทคโนโลยีย่อยสองอย่างคือ Contextual Embeddings และ Contextual BM25
- วิธีนี้สามารถลดอัตราความล้มเหลวในการค้นคืนได้ 49% และเมื่อรวมกับการจัดอันดับซ้ำก็ลดได้ถึง 67%
- นักพัฒนาสามารถปรับใช้โซลูชัน Contextual Retrieval ของตนเองร่วมกับ Claude ได้อย่างง่ายดาย
หมายเหตุเกี่ยวกับการใช้พรอมป์ต์ยาว
- หากฐานความรู้มีขนาดต่ำกว่า 200,000 โทเค็น สามารถใส่ฐานความรู้ทั้งหมดลงในพรอมป์ต์ที่ส่งให้โมเดลได้
- Anthropic เพิ่งเปิดตัว prompt caching สำหรับ Claude ทำให้แนวทางนี้เร็วขึ้นมากและคุ้มค่าต้นทุนมากขึ้น
- เมื่อ Knowledge Base มีขนาดใหญ่ขึ้น ก็จำเป็นต้องมีโซลูชันที่ขยายขนาดได้ดีกว่า และนั่นคือช่วงที่ Contextual Retrieval มีความจำเป็น
พื้นฐานของ RAG: ขยายไปสู่ฐานความรู้ขนาดใหญ่
- สำหรับฐานความรู้ที่ใหญ่เกินจะพอดีกับ context window โซลูชันทั่วไปคือ RAG
- RAG จะแยกฐานความรู้ออกเป็นชิ้นข้อความขนาดเล็ก แล้วแปลงเป็นเวกเตอร์เอ็มเบดดิง ก่อนจัดเก็บไว้ในฐานข้อมูลเวกเตอร์ที่ค้นคืนได้ผ่านความคล้ายคลึงเชิงความหมาย
- โมเดลเอ็มเบดดิงเก่งในการจับความสัมพันธ์เชิงความหมาย แต่ก็อาจพลาดการตรงกันแบบเป๊ะที่สำคัญ
- BM25 เป็นฟังก์ชันการจัดอันดับที่ใช้การจับคู่เชิงคำศัพท์เพื่อค้นหาคำหรือวลีที่ตรงกันแบบเป๊ะ โดยมีประสิทธิภาพเป็นพิเศษกับคิวรีที่มีตัวระบุเฉพาะหรือคำศัพท์ทางเทคนิค
- โซลูชัน RAG สามารถค้นคืนชิ้นข้อความที่เหมาะสมที่สุดได้แม่นยำขึ้นด้วยการผสานเทคนิคเอ็มเบดดิงและ BM25 ตามขั้นตอนต่อไปนี้:
- แยกฐานความรู้ ("corpus" ของเอกสาร) ออกเป็นชิ้นข้อความขนาดเล็ก โดยทั่วไปมีขนาดไม่กี่ร้อยโทเค็นหรือน้อยกว่า
- สร้างการเข้ารหัส TF-IDF และเอ็มเบดดิงเชิงความหมายสำหรับชิ้นข้อความเหล่านี้
- ใช้ BM25 เพื่อค้นหาชิ้นข้อความอันดับต้น ๆ ตามการตรงกันแบบเป๊ะ
- ใช้เอ็มเบดดิงเพื่อค้นหาชิ้นข้อความอันดับต้น ๆ ตามความคล้ายคลึงเชิงความหมาย
- ใช้เทคนิค rank fusion เพื่อรวมผลลัพธ์จาก (3) และ (4) และลบรายการซ้ำ
- เพิ่มชิ้นข้อความ Top K ลงในพรอมป์ต์เพื่อสร้างคำตอบ
การนำ Contextual Retrieval มาใช้
- ใน RAG แบบดั้งเดิม การแบ่งเอกสารออกเป็นชิ้นเล็ก ๆ อาจทำให้แต่ละชิ้นขาดบริบทที่เพียงพอ
- Contextual Retrieval แก้ปัญหานี้ด้วยการเพิ่มบริบทคำอธิบายเฉพาะของแต่ละชิ้นไว้ด้านหน้า
- Claude รองรับการทำ Contextual Retrieval โดยใช้พรอมป์ต์ที่สั่งให้สร้างบริบทแบบกระชับสำหรับแต่ละชิ้น โดยอาศัยบริบทจากเอกสารทั้งฉบับเพื่ออธิบายชิ้นนั้น
- Contextual Retrieval สามารถใช้งานร่วมกับ Claude ได้ในต้นทุนต่ำด้วย prompt caching
การปรับปรุงประสิทธิภาพ
- Contextual Embeddings ลดอัตราความล้มเหลวในการค้นคืนชิ้นข้อความ 20 อันดับแรกได้ 35% (5.7% → 3.7%)
- เมื่อรวม Contextual Embeddings กับ Contextual BM25 อัตราความล้มเหลวจะลดลง 49% (5.7% → 2.9%)
ข้อพิจารณาในการนำไปใช้
- ควรพิจารณาวิธีแบ่งเอกสารออกเป็นชิ้นข้อความ
- Contextual Retrieval ช่วยเพิ่มประสิทธิภาพให้กับทุกโมเดลเอ็มเบดดิง แต่บางโมเดลอาจได้ประโยชน์มากกว่า
- แม้พรอมป์ต์ทั่วไปจะทำงานได้ดี แต่พรอมป์ต์ที่ปรับให้เหมาะกับโดเมนหรือกรณีใช้งานเฉพาะอาจให้ผลลัพธ์ดีกว่า
- การเพิ่มจำนวนชิ้นข้อความใน context window ทำให้มีโอกาสรวมข้อมูลที่เกี่ยวข้องได้มากขึ้น
- ควรรันการประเมินผลเสมอ เพราะการส่งมอบชิ้นข้อความที่ผ่านการใส่บริบทแล้ว และแยกความแตกต่างระหว่างบริบทกับชิ้นข้อความให้ชัดเจน อาจช่วยปรับปรุงการสร้างคำตอบได้
ปรับปรุงประสิทธิภาพเพิ่มเติมด้วยการจัดอันดับซ้ำ (Reranking)
- การจัดอันดับซ้ำเป็นเทคนิคการกรองที่ใช้กันทั่วไป เพื่อให้มีการส่งต่อเฉพาะชิ้นข้อความที่เกี่ยวข้องที่สุดไปยังโมเดล
- ทำการค้นคืนเบื้องต้นเพื่อดึงชิ้นข้อความอันดับต้น ๆ ที่อาจเกี่ยวข้อง
- ส่งชิ้นข้อความ Top N และคิวรีของผู้ใช้ไปยังโมเดลจัดอันดับซ้ำ
- ใช้โมเดลจัดอันดับซ้ำให้คะแนนแต่ละชิ้นข้อความตามความเกี่ยวข้องและความสำคัญต่อพรอมป์ต์ จากนั้นเลือกชิ้นข้อความ Top K
- ส่งชิ้นข้อความ Top K ให้โมเดลเป็นบริบทเพื่อสร้างผลลัพธ์สุดท้าย
- Contextual Embedding และ Contextual BM25 ที่ผ่านการจัดอันดับซ้ำ ลดอัตราความล้มเหลวในการค้นคืนชิ้นข้อความ 20 อันดับแรกได้ 67% (5.7% → 1.9%)
- ข้อพิจารณาด้านต้นทุนและเวลาแฝง
- การจัดอันดับซ้ำอาจส่งผลต่อเวลาแฝงและต้นทุน โดยเฉพาะเมื่อจัดอันดับชิ้นข้อความจำนวนมาก
- มีการแลกเปลี่ยนระหว่างการจัดอันดับชิ้นข้อความจำนวนมากขึ้นเพื่อประสิทธิภาพที่ดีกว่า กับการจัดอันดับจำนวนน้อยลงเพื่อให้เวลาแฝงและต้นทุนต่ำกว่า
บทสรุป
- มีการทดสอบจำนวนมากในชุดข้อมูลหลายประเภทเพื่อเปรียบเทียบการผสมผสานเทคนิคต่าง ๆ ตามที่อธิบายไว้ข้างต้น (โมเดลเอ็มเบดดิง, การใช้ BM25, การใช้การค้นคืนตามบริบท, การใช้การจัดอันดับซ้ำ, และจำนวนรวมของผลลัพธ์ Top K ที่ค้นคืนมา)
- ผลลัพธ์มีดังนี้:
- เอ็มเบดดิง+BM25 ดีกว่าใช้เอ็มเบดดิงอย่างเดียว
- ในบรรดาเอ็มเบดดิงที่ทดสอบ Voyage และ Gemini ให้ผลดีที่สุด
- การส่งชิ้นข้อความ Top 20 ให้โมเดลดีกว่าการส่งเพียง Top 10 หรือ 5
- การเพิ่มบริบทให้ชิ้นข้อความช่วยเพิ่มความแม่นยำในการค้นคืนอย่างมาก
- การจัดอันดับซ้ำดีกว่าไม่จัดอันดับซ้ำ
- ข้อดีทั้งหมดนี้สะสมกันได้: เพื่อเพิ่มประสิทธิภาพสูงสุด สามารถผสาน contextual BM25 เข้ากับ contextual embeddings (จาก Voyage หรือ Gemini) ที่ผ่านขั้นตอน reranking และเพิ่มชิ้นข้อความ 20 ชิ้นลงในพรอมป์ต์
- แนะนำให้นักพัฒนาทุกคนที่ทำงานกับ Knowledge Base ทดลองใช้แนวทางนี้ด้วยคุกบุ๊กที่จัดเตรียมไว้ เพื่อไปให้ถึงระดับประสิทธิภาพใหม่
ยังไม่มีความคิดเห็น