ผมเพิ่ม Reranker เข้าไปใน RAG Pipeline ของผม — แล้วมันก็ทำทุกอย่างพัง
ผมเพิ่ม reranker เข้าไปใน RAG pipeline ของผม และมันก็ทำให้การทดสอบของผมพังทันที
ในเวอร์ชัน 2 ผมใช้ hybrid retrieval ร่วมกับ FAISS และ BM25 ซึ่งมันผ่านคำถามทดสอบทั้ง 19 ข้อของผม จากนั้นผมจึงเพิ่ม cross-encoder reranker เข้าไปเพื่อเพิ่มความแม่นยำ (precision)
ทฤษฎีนั้นง่ายมาก:
- Stage 1: ใช้การ retrieval ที่รวดเร็วเพื่อดึงกลุ่ม candidate ออกมาในวงกว้าง
- Stage 2: ใช้ reranker ที่ชาญฉลาดเพื่อเลือกตัวเลือกที่ดีที่สุด
ผมใช้เวลา implement เพียง 20 นาที แต่มันก็ทำให้การทดสอบ 2 จาก 19 ข้อล้มเหลวทันที
ความล้มเหลวนี้เกิดขึ้นเพราะรูปแบบของข้อมูล ข้อมูลของผมประกอบด้วย chunk ที่เป็นตารางและมีความหนาแน่นสูง เช่น: "Company: Zentara Robotics | CEO: Iris Kallas | Employees: 287"
โมเดล cross-encoder ถูกฝึกมาด้วยย่อหน้าภาษาธรรมชาติ (natural language paragraphs) เมื่อมันเห็นแถวที่เป็นตาราง มันจึงให้คะแนนต่ำมาก โดยมันคิดว่า chunk นั้นไม่เกี่ยวข้อง
Hybrid retrieval หาคำตอบเจอ แต่ reranker กลับโยนมันทิ้งไป
ผมพยายามแก้ไขด้วย 7 วิธีที่แตกต่างกัน:
- ใช้ candidate pool ที่ใหญ่ขึ้น
- ผสมคะแนน (blending scores) จาก reranker และ retriever
- ใช้ rank fusion
ไม่มีวิธีไหนได้ผลเลย คะแนนจาก reranker ติดลบมากจนมันกลบทุกอย่าง โมเดลไม่ได้แค่จัดลำดับให้ต่ำลงเท่านั้น แต่มันกำลังปฏิเสธรูปแบบตารางอย่างสิ้นเชิง
ผมเลิกพยายามแก้ที่ตัวเลขทางคณิตศาสตร์ แล้วเปลี่ยนมาแก้ที่โครงสร้างแทน
แทนที่จะปล่อยให้ reranker ตัดสินใจทุกอย่าง ผมเลือกที่จะ "ปกป้อง" ผลลัพธ์ที่ดีที่สุดของผม โดยใช้กลยุทธ์ "guaranteed slot" (ช่องที่การันตีผลลัพธ์):
- หากคุณต้องการผลลัพธ์ 3 อันดับแรก ให้เก็บ 2 อันดับแรกจาก stage แรกเอาไว้
- ใช้ reranker เพื่อเลือกเฉพาะอันดับที่ 3 เท่านั้น
วิธีนี้ช่วยให้มั่นใจได้ว่าผลลัพธ์จากการค้นหาแบบ hybrid จะยังคงอยู่ในรายการสุดท้าย โดย reranker จะทำหน้าที่ปรับปรุงเฉพาะอันดับที่เหลือเท่านั้น
ผลลัพธ์ที่ได้: ผ่านการทดสอบ 19/19 ข้อ
บทเรียนที่ได้รับ:
- Reranker ไม่ใช่การอัปเกรดที่เห็นผลทันทีเสมอไป มันอาจทำให้ประสิทธิภาพลดลงเมื่อใช้กับข้อมูลที่มีโครงสร้างหรือข้อมูลแบบตาราง
- ชุดข้อมูลสำหรับประเมินผล (evaluation set) คือตาข่ายนิรภัยของคุณ หากไม่มีการทดสอบทั้ง 19 ข้อนี้ ผมคงปล่อยระบบที่พังพินาศออกไปใช้งานแล้ว
- ปกป้องสิ่งที่ใช้งานได้ดีอยู่แล้ว หากการ retrieval ใน stage แรกของคุณดีอยู่แล้ว อย่าปล่อยให้ reranker มาล้างผลลัพธ์นั้น
สร้าง retriever ที่แข็งแกร่งให้ได้ก่อนที่จะคิดจะใช้ reranker
Optional learning community: https://t.me/GyaanSetuAi
