few-shot สำหรับเคสกำกวม การ generalize และลด hallucination
แนวคิด
few-shot ไม่ได้มีไว้แค่คุมรูปแบบ output อย่างในบทก่อน แต่ยังเป็นเครื่องมือที่ทรงพลังในการสอนโมเดลจัดการ "เคสกำกวม" เอกสารและแนวปฏิบัติชี้ว่า ตัวอย่างที่แสดงเหตุผลว่าทำไมจึงเลือกทางหนึ่งเหนือทางอื่นที่ก็ดูสมเหตุสมผล ช่วยให้โมเดลตัดสินใจในกรณีที่คำสั่งเพียว ๆ บอกไม่ได้
เช่น การเลือก tool ให้ตรงกับคำขอที่คลุมเครือ หรือการตัดสินว่าช่องว่างของ test coverage ในระดับ branch นับเป็นปัญหาหรือไม่ กรณีแบบนี้ไม่มีกฎตายตัว การให้ตัวอย่าง 2 ถึง 4 อันที่แสดงการให้เหตุผลในเคสกำกวม จึงสอนวิจารณญาณได้ตรงกว่าการเพิ่มกฎ
ทำไมสำคัญ
พลังจริงของ few-shot อยู่ที่การทำให้โมเดล generalize ไปยัง pattern ใหม่ที่ไม่เคยระบุไว้ ไม่ใช่แค่จับคู่เฉพาะเคสที่ยกตัวอย่างมา ถ้าตัวอย่างสอน "หลักคิด" ผ่านการให้เหตุผล โมเดลจะเอาหลักนั้นไปใช้กับสถานการณ์ที่หน้าตาต่างออกไปได้ นี่ต่างจากการเขียนกฎแบบ if-else ที่ครอบคลุมได้แค่เคสที่คิดออกล่วงหน้า ตัวอย่างที่ดีจึงขยายความสามารถเกินขอบเขตตัวอย่างเอง
อีกด้านที่ few-shot ช่วยได้มากคือลด hallucination ในงาน extraction เวลาดึงข้อมูลจากเอกสารที่มีโครงสร้างหลากหลาย เช่น หน่วยวัดแบบไม่เป็นทางการ ตารางที่จัดวางต่างกัน หรือ citation ที่อยู่ inline บ้างอยู่ในบรรณานุกรมบ้าง โมเดลมักเดาค่าที่ไม่มีจริงเพื่อเติมช่อง การให้ตัวอย่างที่แสดงการดึงข้อมูลจากเอกสารรูปแบบต่าง ๆ อย่างถูกต้อง รวมถึงตัวอย่างที่แสดงว่าเมื่อไม่มีข้อมูลควรปล่อยว่างหรือใส่ null ช่วยลดการกุค่าขึ้นมาได้จริง
จุดนี้เชื่อมกับบท structured output ที่จะตามมา schema บังคับให้ field มีอยู่ แต่ few-shot สอนว่าเมื่อไรควรเติมและเมื่อไรควรเว้น สองอย่างรวมกันจึงได้ทั้งโครงที่ครบและเนื้อหาที่ไม่มั่ว โดยเฉพาะเมื่อเอกสารต้นทางมีรูปแบบไม่แน่นอน การใส่ few-shot ที่ครอบคลุมรูปแบบหลากหลายคือวิธีจัดการช่องที่ถูกดึงออกมาว่างหรือ null ทั้งที่ควรมีค่า
ตัวอย่าง
<examples>
<example>
// เคสกำกวม: หน่วยวัดไม่เป็นทางการ
input: "สินค้าหนักราวครึ่งโล"
reasoning: ระบุ "ราว" = ไม่แน่นอน, ครึ่งโล = 0.5 kg โดยประมาณ
output: weight_kg: 0.5, weight_is_approximate: true
</example>
<example>
// เคสไม่มีข้อมูล: อย่าเดา
input: "ใบแจ้งหนี้ไม่ได้ระบุวันครบกำหนด"
reasoning: เอกสารไม่มีวันครบกำหนด ห้ามกุ ให้ปล่อย null
output: due_date: null
</example>
</examples>
ตัวอย่างแรกสอนให้ generalize การจัดการค่าประมาณ ตัวอย่างที่สองสอนให้ยับยั้งการ hallucinate เมื่อไม่มีข้อมูล
เช็คความเข้าใจ
ทำไม few-shot จึงเหนือกว่าการเขียนกฎ if-else สำหรับเคสกำกวม
few-shot ลด hallucination ในงาน extraction ได้อย่างไร