• เพื่อให้โมเดล 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 ทดลองใช้แนวทางนี้ด้วยคุกบุ๊กที่จัดเตรียมไว้ เพื่อไปให้ถึงระดับประสิทธิภาพใหม่

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น