หนึ่งในกระบวนการทำงานสำคัญของ 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 นะครับ