วิธีการตั้งค่าการทดสอบ
ผู้เขียนได้สร้างระบบ retrieval-augmented generation (RAG) ขนาดเล็กขึ้นมาโดยใช้เอกสารกฎระเบียบการชำระเงินสองฉบับ และทำการตรวจสอบสองประการ:
- การทดสอบ Recall – หน้าที่ถูกต้องปรากฏอยู่ใน 5 อันดับแรกหรือไม่? ผลลัพธ์: 60%
- การทดสอบคำตอบ – คำตอบสุดท้ายที่สร้างโดย generator ถูกต้องหรือไม่? ผลลัพธ์: 90%
ช่องว่าง 40% ดูเหมือนจะเป็นไปไม่ได้ หากตัว retriever หาหน้าทีถูกต้องไม่เจอ 4 ใน 10 ครั้ง แล้วโมเดลจะยังสามารถตอบได้ถูกต้องถึง 9 ใน 10 ครั้งได้อย่างไร?
ความพยายามครั้งแรกในการ "แก้ไข" ตัว retriever
นักพัฒนาได้ลองใช้เทคนิคทั่วไปสองอย่าง:
- Hybrid search – การผสมผสานระหว่างสัญญาณแบบ lexical และ vector ค่า Recall ยังคงเท่าเดิม
- Reranker – การจัดลำดับหน้าทั้ง 5 ที่ดึงมาใหม่ ค่า Recall เพิ่มขึ้นเป็น 70% แต่ก็ยังตามหลังความแม่นยำของคำตอบที่ 90% อยู่มาก
เครื่องมือทั้งสองอย่างทำเพียงแค่จัดลำดับใหม่จากสิ่งที่ดึงมาได้แล้วเท่านั้น พวกมันไม่สามารถเสกหน้าเอกสารที่ไม่ได้อยู่ใน candidate set ขึ้นมาได้ ปัญหานี้จึงอยู่ที่จุดอื่น
ตัวชี้วัดต่างหากที่ผิดพลาด ไม่ใช่ตัวโมเดล
แทนที่จะตัดสินความสำเร็จด้วยป้ายกำกับหน้าเอกสาร ผู้เขียนได้ตรวจสอบข้อเท็จจริงที่อยู่ใน chunk ที่ดึงมาได้จริง ๆ พบว่าใน 4 ครั้งที่ "พลาด" นั้น มี 3 ครั้งที่ข้อเท็จจริงที่ถูกต้องปรากฏอยู่ เพียงแต่ข้อมูลนั้นอยู่ในหน้าอื่นที่สคริปต์ทดสอบไม่ได้คาดหวังไว้ การประเมินผลจึงไปลงโทษตัว retriever ทั้งที่มันหาคำตอบที่ถูกต้องเจอในหน้าที่ไม่ได้ระบุไว้
เมื่อเปลี่ยนตัวชี้วัดเป็น "มี chunk ใดที่ดึงมาได้มีข้อเท็จจริงที่ต้องการหรือไม่?" ค่า recall ก็พุ่งขึ้นเป็น 90% ซึ่งเท่ากับความแม่นยำของคำตอบ สรุปคือตัว retriever ทำงานได้ดี แต่กรอบการประเมินผลต่างหากที่ผิดพลาด
ทำไมค่า recall แบบดั้งเดิมถึงอาจทำให้เข้าใจผิดได้
- การติดป้ายกำกับระดับหน้าสร้างความล้มเหลวที่ไม่มีอยู่จริง (phantom failures) ข้อเท็จจริงหนึ่งอย่างอาจปรากฏอยู่ในหลายหน้า การระบุเพียงหน้าเดียวว่าเป็น ground truth จะทำให้การค้นพบที่ถูกต้องในหน้าอื่น ๆ ถูกนับเป็นความผิดพลาดทั้งหมด
- คลังข้อมูลขนาดเล็กจะขยายผลกระทบนี้ เมื่อมีเอกสารจำนวนน้อย หน้าที่ติดป้ายกำกับผิดเพียงหน้าเดียวสามารถทำให้ค่า recall เปลี่ยนแปลงอย่างรุนแรง ในขณะที่ความแม่นยำของคำตอบยังคงที่
- สัญญาณรบกวนจาก embedding บดบังข้อเท็จจริง Vector จะให้คะแนนทั้งหน้าเอกสาร ข้อความทางกฎหมายหรือทางเทคนิคที่อยู่ล้อมรอบอาจทำให้สัญญาณความเกี่ยวข้องของประโยคเป้าหมายเจือจางลง ส่งผลให้หน้าดังกล่าวถูกลดลำดับลงแม้ว่าจะมีข้อเท็จจริงนั้นอยู่ก็ตาม
ข้อสรุปเชิงปฏิบัติสำหรับผู้ใช้งาน RAG
- แยกความล้มเหลวของการจัดลำดับ (ranking) ออกจากการดึงข้อมูล (retrieval) Reranker ช่วยแก้ไขเฉพาะเรื่องการจัดลำดับเท่านั้น หาก chunk ที่ถูกต้องไม่ได้อยู่ใน candidate set ตั้งแต่แรก การจัดลำดับใหม่ก็ไม่มีประโยชน์
- ติดป้ายกำกับข้อมูลทดสอบในระดับข้อเท็จจริง เชื่อมโยงแต่ละคำถาม (query) เข้ากับข้อมูลเฉพาะเจาะจงที่ต้องการ ไม่ใช่แค่ระบุเพียงรหัสเอกสาร
- อย่าเชื่อถือเกณฑ์มาตรฐาน (benchmarks) ขนาดใหญ่สำหรับชุดข้อมูลขนาดเล็ก คลังข้อมูลเฉพาะทางขนาดเล็กมีพฤติกรรมที่แตกต่างออกไป และค่า recall ทั่วไปอาจทำให้เข้าใจผิดได้
- ระวังเรื่องความละเอียดของ embedding (granularity) chunk ขนาดเท่าหนึ่งหน้ากระดาษประกอบด้วยคำจำนวนมาก และข้อความทางกฎหมายที่อยู่รอบ ๆ อาจทำให้ลำดับความสำคัญของข้อเท็จจริงที่คุณต้องการลดลง
สรุปใจความสำคัญ: คะแนนความแม่นยำของคำตอบที่สูงสามารถเกิดขึ้นพร้อมกับค่า recall แบบดั้งเดิมที่ต่ำได้ หากการประเมินผลไม่สอดคล้องกับงานที่ทำ การแก้ไขที่ตัวชี้วัดแทนที่จะเป็นตัวโมเดล จะช่วยประหยัดเวลา ลดการแจ้งเตือนที่ผิดพลาด และทำให้การใช้งาน RAG มีความน่าเชื่อถือมากขึ้น
