CCA · Foundations

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 ได้อย่างไร

อ่านต่อ