หนึ่งในกระบวนการทำงานสำคัญของ RAG (Retrieval Augmented Generation)
คือ การทำ chunking ข้อมูลที่มีขนาดใหญ่ เกินกว่า context windows ของ LLM model
ให้อยู่ในขนาดที่เล็ก ๆ และ เหมาะสม ซึ่งมีวิธีการทำ chunking มากมาย
ทั้ง fixed-size, paragraph, document เป็นต้น
จากนั้นก็ทำการ embedding เพื่อช่วยให้ค้นหา หรือ retrieve ได้รวดเร็วมากขึ้น
ด้วยการค้นหาแบบ vector search หรือ semantic search นั่นเอง

แต่ปัญหาที่ตามมาคือ ข้อมูลที่ค้นหามาได้นั้นกลับไปตรงตามความต้องการ
เนื่องจากการ chunking ไม่ดี ทำให้ context หรือ ความหมายต่าง ๆ ของข้อมูลผิดเพี้ยนไป
ดังนั้นจะต้องปรับปรุงการ chunking ขึ้นมา เช่น

  • การใช้ overlapping ระหว่าง chunk
  • การเพิ่ม metadata เข้ามาในแต่ละ chunk เอง
  • Contextual retrieval จาก Anthropic
  • AI chunking

แต่ผลที่ออกมาก็ยังไม่เป็นที่น่าพอใจนัก
ดังนั้นจึงมีหลายวิธีการออกมาเรื่อย ๆ
หนึ่งในนั้นคือ Contextualized Chunk Embeddings จาก voyageai
ซึ่งได้ปล่อย voyage-context-3 model ออกมา

โดยการทำงานของ model นี้นั้น จะสนใจทั้ง

  • ข้อมูลใน chunk นั้น ๆ (chunk detail context)
  • ข้อมูลของเอกสารนั้น ๆ ทั้งหมด ( global context) ซึ่งเป็นการสรุปของเอกสารนั้น ๆ ให้อัตโนมัติ

ส่งผลให้แต่ละ chunk ยังมีข้อมูลของเอกสารนั้น ๆ อยู่
แสดงการทำงานดังรูป

ผลที่ตามมาคือ การจัดการเรื่องของการทำ chunking และ embedding ง่ายและสะดวกขึ้น
รวมทั้งผลการค้นหาก็มีความถูกต้องสูงขึ้น (อย่างเชื่อ ต้องลองในข้อมูลของเราเองก่อน !!)
แสดงผลตามตารางนี้

ผลการ evaluate mode

โดย model นี้เหมาะสมกับ

  • ข้อมูลที่เป็น unstructure และมีขนาดที่ยาว
  • ในการค้นหาข้อมูลต้องการข้อมูลจาก chunk ต่าง ๆ ที่สัมพันธ์กัน
  • ในการค้นหาข้อมูลที่ต้องการความถูกต้องสูง ข้อผิดพลาดก่อให้เกิดความเสียหายสูง

ลองใช้งานกันดูครับ
แต่เป็น model ที่ต้องใช้งานผ่าน voyageai
ไม่เป็น opensource model นะครับ