การค้นคืนหลายเวกเตอร์ (ColBERT)
สร้างดัชนีเวกเตอร์หลายตัวต่อเอกสาร เช่น หนึ่งตัวต่อโทเค็นหรือส่วนข้อมูล เพื่อการจับคู่ที่ละเอียด
การค้นคืนหลายเวกเตอร์ (ColBERT) เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เวกเตอร์เดียวไม่เพียงพอ
RAG มาตรฐานสร้างเอ็มเบดดิงของแต่ละส่วนข้อความเป็นเวกเตอร์เดียว เวกเตอร์นั้นจะเฉลี่ยข้อมูลทุกอย่างในส่วนข้อความ ทำให้สัญญาณที่ละเอียดสูญหาย
การเรียกคืนแบบหลายเวกเตอร์จัดเก็บเวกเตอร์ MULTIPLE รายการต่อเอกสาร และจับคู่ได้อย่างแม่นยำยิ่งขึ้น
แนวคิด ColBERT
ColBERT (Khattab และ Zaharia, 2020) สร้างเอ็มเบดดิงของ TOKEN แต่ละตัวในเอกสารและแต่ละโทเคนของคำค้น จากนั้นคำนวณความคล้ายคลึงสูงสุด:
score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)เหตุใด ColBERT จึงเหนือกว่าเวกเตอร์เดียว
- จับประเด็นหลายด้านของเอกสารได้ (เวกเตอร์เดียวทำไม่ได้)
- รองรับเอกสารยาวได้ดีกว่า
- มีรีคอลสูงกว่าสำหรับคำที่พบได้น้อย
ต้นทุนของ ColBERT
การจัดเก็บเวกเตอร์หนึ่งรายการต่อโทเคนแทนที่จะเป็นหนึ่งรายการต่อส่วนข้อความ:
- หากส่วนข้อความมี 500 โทเคน จะใช้พื้นที่จัดเก็บมากขึ้น 500 เท่า
- การค้นหาแต่ละครั้งต้องเปรียบเทียบคู่ข้อมูลมากขึ้นหลายเท่า
การทำควอนไทซ์และการตัดทอนช่วยลดต้นทุนลงได้ 10-50 เท่า แต่ก็ยังมีต้นทุนสูงอยู่
ColBERTv2
ColBERTv2 เพิ่มการบีบอัดส่วนตกค้าง โดยจัดกลุ่มโทเคนเข้าหาเซนทรอยด์ และจัดเก็บแต่ละโทเคนเป็น (รหัสเซนทรอยด์, ค่าส่วนตกค้างขนาดเล็ก) พื้นที่จัดเก็บลดลง 50 เท่า
การเรียกใช้ ColBERT
ไลบรารี RAGatouille ช่วยให้ทำได้ง่าย:
# pip install ragatouille
from ragatouille import RAGPretrainedModel
rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')
results = rag.search(query='What is the refund policy?', k=5)หลายเวกเตอร์ในทางปฏิบัติ
นอกเหนือจาก ColBERT ยังมีแนวทางแบบหลายเวกเตอร์อื่น ๆ:
- ส่วนหลัก-ส่วนย่อย — สร้างเอ็มเบดดิงของส่วนย่อยขนาดเล็ก แล้วเรียกคืนส่วนหลักขนาดใหญ่
- สรุป + ส่วนข้อความ — สร้างเอ็มเบดดิงทั้งสรุปเอกสารและส่วนข้อความแต่ละส่วน
- คำถามสมมติ — สร้างเอ็มเบดดิงของคู่คำถามและคำตอบที่สังเคราะห์จากเอกสารแต่ละฉบับ
Hypothetical Questions Pattern
def index_with_hypos(doc):
# Generate 5 plausible questions this doc could answer
questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
for q in questions:
vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.Parent-Child with LangChain
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
store = InMemoryStore()
retriever = ParentDocumentRetriever(
vectorstore=child_vectorstore,
docstore=store,
child_splitter=child_splitter, # small
parent_splitter=parent_splitter # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.เมื่อใดที่ควรใช้ ColBERT
- การค้นหาที่มีความสำคัญสูง (กฎหมาย การแพทย์)
- เอกสารยาว
- เมื่อคุณรองรับต้นทุนด้านพื้นที่จัดเก็บได้
เมื่อใดที่ควรข้าม
- คลังข้อมูลขนาดเล็ก
- เส้นทางที่ไวต่อเวลาแฝง
- โครงการที่มีข้อจำกัดด้านต้นทุน
การผสานกับ BM25
เพื่อให้ได้รีคอลสูงสุด ให้ผสานการเรียกคืนแบบหลายเวกเตอร์เข้ากับการค้นหาคำสำคัญแบบ BM25 ดั้งเดิม แล้วใช้การรวมอันดับแบบผกผันเพื่อรวมผลลัพธ์
การแลกเปลี่ยนของ ColBERT
การแลกเปลี่ยนหลักของการใช้การเรียกคืนแบบหลายเวกเตอร์สไตล์ ColBERT คืออะไร
สรุปทบทวน
เวกเตอร์หนึ่งรายการต่อส่วนข้อความทำให้ข้อมูลสูญหาย ColBERT จัดเก็บเวกเตอร์ต่อโทเคนเพื่อความแม่นยำที่สูงขึ้น RAGatouille ช่วยให้ใช้งานได้ง่าย ควรใช้เมื่อรีคอลมีความสำคัญและต้นทุนเอื้ออำนวย
คำถามที่พบบ่อย
บทเรียน “การค้นคืนหลายเวกเตอร์ (ColBERT)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การค้นคืนหลายเวกเตอร์ (ColBERT)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การค้นคืนหลายเวกเตอร์ (ColBERT)”
สร้างดัชนีเวกเตอร์หลายตัวต่อเอกสาร เช่น หนึ่งตัวต่อโทเค็นหรือส่วนข้อมูล เพื่อการจับคู่ที่ละเอียด คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การค้นคืนหลายเวกเตอร์ (ColBERT)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจัดอันดับใหม่ด้วยตัวเข้ารหัสไขว้
- HyDE: Embedding ของเอกสารสมมติ
- การค้นคืนหลายเวกเตอร์ (ColBERT)
- การประเมิน RAG (RAGAS, Recall@K)