Hybrid Search และ Reranking: ค้นให้เจอก่อนให้ AI ตอบ
ทำไมการค้นแบบเข้าใจความหมายอย่างเดียวยังพลาด เข้าใจ Hybrid Search, BM25, RRF และ Reranking แบบภาษาคน พร้อมวิธีเริ่มใช้
ช่างซ่อมบำรุงในโรงงานพิมพ์ถาม Chatbot ว่า "เครื่องขึ้น error E-104 ต้องทำยังไง" ระบบกลับตอบเรื่อง error ตัวอื่นที่อธิบายคล้ายกัน เพราะในสายตาของ semantic search รหัส E-104 กับ E-140 "ความหมายใกล้กัน" นี่คือตัวอย่างคลาสสิกที่ทำให้ทีม AI หลายทีมหันมาใช้ Hybrid Search และ Reranking
Hybrid Search คืออะไร
Hybrid Search คือการค้นสองแบบพร้อมกัน แล้วรวมผลเข้าด้วยกัน
- Keyword search เช่น BM25 ซึ่งเป็นวิธีจัดอันดับเอกสารตามคำที่ตรงกับคำค้น ถนัดกับรหัสสินค้า ชื่อเฉพาะ เลขมาตรา และศัพท์เทคนิค
- Semantic search หรือ vector search ถนัดกับคำถามที่ใช้คำต่างจากเอกสารแต่ความหมายเดียวกัน เช่น "ลาออกต้องแจ้งล่วงหน้ากี่วัน" กับหัวข้อ "การสิ้นสุดสภาพการเป็นพนักงาน"
ทั้งสองแบบพลาดคนละแบบ การใช้ร่วมกันจึงช่วยปิดจุดอ่อนของกันและกัน
รวมผลสองรายการยังไง
ปัญหาคือคะแนนของสองระบบใช้คนละสเกล คะแนน BM25 ไม่มีช่วงตายตัว ส่วน cosine similarity อยู่ในช่วงคงที่ บทความของ Redis อธิบายว่าการเอาคะแนนดิบมาบวกกันตรงๆ มักทำให้ฝั่ง BM25 ชนะโดยปริยาย
วิธีที่นิยมคือ Reciprocal Rank Fusion (RRF) ซึ่งเสนอไว้ตั้งแต่ปี 2009 แทนที่จะดูคะแนน RRF ดูแค่ "อันดับ" ของเอกสารในแต่ละรายการ เอกสารที่ติดอันดับดีในทั้งสองรายการจะได้คะแนนรวมสูง แม้ไม่ได้อันดับหนึ่งในรายการใดเลย ข้อดีคือไม่ต้องมีข้อมูลฝึก และใช้ได้กับระบบค้นหาทุกแบบ
ตัวอย่างง่ายๆ ที่บทความของ Redis ยกไว้ เอกสาร A ได้อันดับ 2 จาก keyword search และอันดับ 5 จาก semantic search ส่วนเอกสาร B ได้อันดับ 1 จาก keyword search แต่ไม่ติดผลของ semantic search เลย เมื่อรวมด้วย RRF เอกสาร A จะชนะ เพราะทั้งสองระบบเห็นตรงกันว่ามันเกี่ยวข้อง
Reranking คืออะไร
หลังได้ผู้สมัคร (candidates) จาก hybrid search มาประมาณหลายสิบชิ้น ขั้นต่อไปคือ Reranking หรือการจัดอันดับใหม่ด้วยโมเดลที่ละเอียดกว่า
ทำไมต้องจัดอันดับสองรอบ
การค้นรอบแรกต้องเร็ว เพราะต้องกวาดเอกสารทั้งคลัง จึงเทียบคำถามกับเอกสารแบบหยาบๆ ส่วน reranker จะอ่านคำถามกับเอกสารแต่ละชิ้นคู่กันอย่างละเอียด แม่นกว่าแต่ช้ากว่ามาก จึงใช้เฉพาะกับผู้สมัครไม่กี่สิบชิ้น เปรียบเหมือนการคัด Resume รอบแรกด้วยการกรองเร็ว แล้วให้ผู้จัดการอ่านละเอียดเฉพาะรายชื่อที่ผ่านเข้ารอบ
ผลที่มีรายงานไว้
จากผลทดสอบแนวทาง Contextual Retrieval ของ Anthropic (กันยายน 2024) ที่ Maginative รายงาน การใช้ contextual embeddings ร่วมกับ BM25 ลดการค้นไม่เจอได้ 49% และเมื่อเพิ่ม reranking เข้าไปอีกชั้น ลดได้ 67% ตัวเลขนี้มาจากชุดข้อมูลทดสอบของ Anthropic ผลในองค์กรของคุณอาจต่างออกไป แต่ทิศทางชัดเจนว่าการค้นหลายชั้นช่วยได้จริง
ตัวอย่างในองค์กรไทย
สำนักงานกฎหมายแห่งหนึ่งทำระบบค้นสัญญาและความเห็นทางกฎหมายภายใน ทนายมักค้นด้วยเลขมาตราหรือชื่อคู่สัญญา ซึ่ง keyword search ทำได้ดี แต่ก็ถามแบบ "สัญญาไหนมีข้อห้ามทำงานให้คู่แข่ง" ซึ่งต้องใช้ semantic search เพราะแต่ละสัญญาเขียนต่างกัน ทีมจึงใช้ hybrid search รวมผลด้วย RRF แล้วให้ reranker คัดเหลือไม่กี่ชิ้นก่อนส่งให้ AI สรุป พร้อมแนบลิงก์สัญญาต้นฉบับให้ทนายตรวจ
ข้อควรระวัง
- ทุกชั้นที่เพิ่มเข้ามา เพิ่มทั้งเวลาตอบและต้นทุน ต้องชั่งกับความแม่นที่ได้
- RRF ไม่ได้ชนะเสมอ ถ้ามีชุดคำถามพร้อมเฉลย การถ่วงน้ำหนักแบบปรับจูนอาจดีกว่า
- Keyword search ภาษาไทยต้องตัดคำให้ถูกก่อน ไม่เช่นนั้นจะค้นคำไม่เจอ
- Reranker บางตัวรองรับภาษาไทยไม่ดี ต้องทดสอบกับคำถามภาษาไทยจริงก่อนเลือกใช้
AI ตอบถูกไม่ได้ ถ้าเราหยิบเอกสารผิดให้มันอ่าน
เริ่มต้นยังไง
- เก็บคำถามที่ระบบค้นพลาด แล้วแยกว่าพลาดเพราะคำเฉพาะหรือเพราะความหมาย
- ถ้าพลาดเรื่องรหัสหรือชื่อเฉพาะบ่อย เพิ่ม keyword search เข้ามาคู่กับ vector search
- รวมผลด้วย RRF เป็นค่าเริ่มต้น เพราะไม่ต้องปรับจูน
- เพิ่ม reranker กับผู้สมัครไม่กี่สิบอันดับแรก แล้ววัดผลเทียบก่อนและหลัง
- ติดตามเวลาตอบควบคู่กับความแม่น ไม่ให้ระบบช้าจนคนเลิกใช้
อยากเข้าใจพื้นฐานของ vector search ก่อน อ่าน Vector Database คืออะไร และถ้าอยากวัดผลระบบค้นหาอย่างเป็นระบบ ต่อด้วย วัดผล RAG และลด Hallucination