เมื่อโมเดลภาษาขนาดใหญ่(LLMs:Large Language Models) เข้ามามีบทบาทในการประมวลผลภาษาไทย ผู้ใช้งานหลายคนคงเคยประสบปัญหาเดิมๆ คือการสั่งงานด้วยภาษาไทยแล้วได้ผลลัพธ์ที่ไม่ตรงตามความต้องการ
หรือไม่สามารถเข้าใจบริบทเฉพาะของภาษาไทยได้อย่างแม่นยำ แต่เมื่อใช้เทคนิค few-shot prompting ที่ออกแบบมาอย่างดี ปัญหาเหล่านี้สามารถแก้ไขได้( หรือไม่ได้ ก็ขึ้นอยู่กับว่าท่านผู้อ่านใช้เทคนิคนี้กับงานประเภทไหนด้วยนะครับ )
เทคนิคนี้ไม่ได้มีแค่การให้ตัวอย่างเท่านั้น แต่ยังเป็นการสอนโมเดลให้เข้าใจ pattern และบริบทเฉพาะของภาษาไทย ทำให้ผลลัพธ์ที่ได้มีความแม่นยำและใช้งานได้จริงมากขึ้น การใช้ few-shot prompting ที่เหมาะสมยังช่วยลดปัญหาการตีความผิดพลาด และเพิ่มความสม่ำเสมอในการตอบสนองของโมเดลอีกด้วยนะครับ
ทำความเข้าใจ Few-shot Prompting
Few-shot prompting คือเทคนิคการให้โมเดลเรียนรู้จากตัวอย่างจำนวนน้อย ย้ำนะครับว่าจำนวนน้อย โดยทั่วไปจะใช้ประมาณ 2-8 ตัวอย่างใน prompt เดียว เพื่อสอนให้โมเดลเข้าใจรูปแบบของงานที่ต้องการ
ซึ่งแตกต่างจาก zero-shot ที่ไม่ให้ตัวอย่างเลย และ one-shot ที่ให้เพียงตัวอย่างเดียว
หลักการทำงานของ few-shot prompting อาศัยความสามารถของ LLMs ในการเรียนรู้ในบริบท หรือที่เรียกว่า in-context learning ซึ่งโมเดลสามารถจับรูปแบบจากตัวอย่างที่ให้มาแล้วนำไปประยุกต์ใช้กับข้อมูลใหม่ได้ทันที โดยไม่จำเป็นต้องปรับแต่งพารามิเตอร์ของโมเดลเลย(หรืออาจจะปรับน้อยมากๆ)
การถ่ายทอดรูปแบบในภาษาไทยต้องคำนึงถึงลักษณะพิเศษหลายประการ เช่น การไม่มีการเว้นวรรคระหว่างคำ , ความหลากหลายของระดับภาษา , การใช้คำทับศัพท์ และโครงสร้างประโยคที่มีความยืดหยุ่นสูง การตั้งกรอบงานให้แคบลงด้วยตัวอย่างที่ดีจะช่วยให้โมเดลเข้าใจบริบทเฉพาะของภาษาไทยได้ดีขึ้น
ออกแบบตัวอย่างที่ดี
การเลือกตัวอย่างที่ดีสำหรับ few-shot prompting ภาษาไทยต้องคำนึงถึงหลายปัจจัย ตัวอย่างต้องเป็นตัวแทนของเคสจริงที่มักเจอในการใช้งาน ครอบคลุมความหลากหลายของภาษาไทย แต่ยังคงความสม่ำเสมอของสไตล์และรูปแบบ
ตัวอย่างที่ดีควรประกอบด้วยสามส่วนหลัก คือ 1.อินพุตที่ชัดเจน การให้เหตุผลแบบย่อ และเอาต์พุตที่ต้องการ โดยเฉพาะอย่างยิ่ง ‘การให้เหตุผลหรือการคิดทีละขั้นตอนต้องมาก่อนผลลัพธ์เสมอ’ เพื่อสอนให้โมเดลเรียนรู้กระบวนการคิดที่ถูกต้อง
Think step by step เป็นหลักการสำคัญที่ช่วยให้โมเดลเกิดการ reasoning ที่มีคุณภาพ แทนที่จะให้คำตอบทันที โมเดลจะได้เรียนรู้การวิเคราะห์ข้อมูล พิจารณาตัวเลือก แล้วจึงสรุปเป็นคำตอบสุดท้าย วิธีการนี้ช่วยเพิ่มความแม่นยำและลดข้อผิดพลาดในการตอบ
การจัดลำดับและรูปแบบ
การจัดลำดับตัวอย่างนั้นมีผลต่อประสิทธิภาพของโมเดลอย่างแน่นอนครับและค่อนข้างมากเลยทีเดียว การเรียงลำดับจากเคสง่ายไปยากช่วยให้โมเดลเรียนรู้ pattern ได้ดีขึ้นแบบขั้นบันได แทนที่จะสับสนกับความซับซ้อนตั้งแต่ต้น
การใช้ตัวคั่นบริบทที่ชัดเจนเป็นสิ่งสำคัญมาก แนะนำให้ใช้เครื่องหมายก้ามปูหรือวงเล็บเหลี่ยม เช่น [ตัวอย่างที่ 1] [คำอธิบายย่อ] [คำตอบที่คาดหวัง] เพื่อป้องกันการปนกันของข้อมูลระหว่างตัวอย่างต่างๆ
จำไว้นะครับว่า รูปแบบที่สม่ำเสมอช่วยให้โมเดลเข้าใจโครงสร้างได้ดีขึ้น การใช้คำสั่งหรือ template ที่เหมือนกันในทุกตัวอย่างจะทำให้โมเดลเรียนรู้รูปแบบได้ชัดเจนขึ้น และสามารถนำไปใช้กับข้อมูลใหม่ได้อย่างมีประสิทธิภาพ
เทคนิคเฉพาะภาษาไทย
ด้วยความที่ภาษาไทยเราเป็นภาษาที่คนมักจะขนานนามมันว่าเป็นภาษาที่ ‘ดิ้นได้’ ซึ่งส่วนใหญ่เกิดจากการเว้นวรรคที่ผิด แต่สำหรับการสื่อสารกับ AI
การเว้นวรรคเพื่อช่วยการตัดคำอาจไม่เหมือนเดิมตามไวยกรณ์ที่เราเรียนมา ซึ่งโดยปกติแล้วไทยจะไม่เว้นวรรคระหว่างคำ แต่ในบางกรณีการเว้นวรรคเล็กน้อยอาจช่วยให้โมเดลเข้าใจขอบเขตของคำได้ดีขึ้น โดยเฉพาะในกรณีที่มี ‘คำทับศัพท์’ หรือ ‘คำเฉพาะปนกัน’
การกำหนดสไตล์ภาษาให้ชัดเจนตั้งแต่ต้นจะช่วยให้ผลลัพธ์มีความสม่ำเสมอ ว่าจะใช้ภาษาที่เป็นกันเองหรือภาษาทางการ , การผันคำ การใช้คำสรรพนาม และระดับความสุภาพ ทั้งหมดนี้ต้องสอดคล้องกันตลอด( อาจจะฟังดูยุ่งยากแต่ทำบ่อย ๆ เดี๋ยวก็ชินไปเองครับ )
การระบุมาตรวัดเวลา , ตัวเลข และรูปแบบวันที่ ให้สอดคล้องกับการใช้งานในภาษาไทยเป็นสิ่งจำเป็น เช่น การใช้ปีพุทธศักราช การเขียนตัวเลขแบบไทย หรือการใช้หน่วยวัดที่คนไทยคุ้นเคย การใช้ ‘คำทับศัพท์’ และ ‘คำอังกฤษ’ ควรใช้เท่าที่จำเป็นเท่านั้นและต้องมีความสอดคล้องในการใช้งาน
ตัวอย่าง Few-shot แบบไทยพร้อมช่องเว้นค่าแบบเห็นชัด
การจัดหมวดหมู่โทนความคิดเห็น
“[ตัวอย่างที่ 1] วิเคราะห์โทนของความคิดเห็นต่อไปนี้: ‘[ข้อความอินพุต]’
ขั้นตอนการคิด: พิจารณาคำศัพท์ที่ใช้ ลักษณะการแสดงออก และบริบทของข้อความ หากมีคำบอกอารมณ์เชิงบวก เช่น ‘ดี’ ‘ชอบ’ ‘ยอดเยี่ยม’ แสดงว่าเป็นโทนบวก หากมีคำเชิงลบ เช่น ‘แย่’ ‘เกลียด’ ‘น่ารำคาญ’ แสดงว่าเป็นโทนลบ หากไม่ชัดเจนหรือมีทั้งสองด้าน แสดงว่าเป็นโทนกลางๆ
ผลลัพธ์: [รูปแบบเอาต์พุต]”
การสกัดข้อมูลจากบัตรประชาสัมพันธ์ผลิตภัณฑ์
“[ตัวอย่างที่ 2] สกัดข้อมูลสำคัญจากบัตรผลิตภัณฑ์: ‘[ข้อความอินพุต]’
ขั้นตอนการคิด: ค้นหาข้อมูลพื้นฐาน เช่น ชื่อสินค้า ราคา คุณสมบัติหลัก วันหมดอายุ หรือข้อมูลการติดต่อ จัดกลุ่มข้อมูลตาม [เกณฑ์การจัดหมวด] ที่กำหนดไว้ ตรวจสอบความสมบูรณ์ของข้อมูล
ผลลัพธ์: [รูปแบบเอาต์พุต]”
การเขียนสรุปข่าว
“[ตัวอย่างที่ 3] สรุปข่าวต่อไปนี้ให้กระชับใน 2-3 ประโยค: ‘[ข้อความอินพุต]’
ขั้นตอนการคิด: ระบุประเด็นหลักของข่าว ใครเป็นผู้เกี่ยวข้อง เกิดอะไรขึ้น เมื่อไหร่ ที่ไหน และผลกระทบ เลือกข้อมูลสำคัญที่สุดมาเรียบเรียงเป็นข้อความที่อ่านง่าย
ผลลัพธ์: [รูปแบบเอาต์พุต]”
การแก้ความกำกวมของคำไทย
“[ตัวอย่างที่ 4] แก้ความกำกวมของคำในประโยค: ‘[ข้อความอินพุต]’
ขั้นตอนการคิด: วิเคราะห์บริบทรอบข้าง พิจารณาความหมายที่เป็นไปได้ของคำที่กำกวม เลือกความหมายที่เหมาะสมที่สุดตามบริบท อธิบายเหตุผลในการเลือก
ผลลัพธ์: [รูปแบบเอาต์พุต]”
การแปลงสไตล์ภาษา
“[ตัวอย่างที่ 5] เปลี่ยนข้อความต่อไปนี้จาก [สไตล์ต้นทาง] เป็น [สไตล์ปลายทาง]: ‘[ข้อความอินพุต]’
ขั้นตอนการคิด: วิเคราะห์สไตล์ภาษาเดิม ระบุคำศัพท์ โครงสร้างประโยค และระดับความสุภาพ ปรับเปลี่ยนคำศัพท์ รูปแบบการผันคำ และสำนวนให้เหมาะกับสไตล์ใหม่ ตรวจสอบความเป็นธรรมชาติของข้อความ
ผลลัพธ์: [รูปแบบเอาต์พุต]”
ถ้าดูตัวอย่างด้านบนแล้ว งง มาทางนี้ก่อน
จากตัวอย่าง Prompt ทั้งหมดที่ผ่านมา จะเห็นว่าสิ่งที่เหมือนกันและเป็นแก่นของ Few-shot prompting
คือการเริ่มจากการกำหนด Pattern ของข้อมูลให้ชัดเจนและเหมาะสมก่อน เช่น ทุกตัวอย่างต้องมี 3 ส่วนหลัก ได้แก่ สิ่งที่เราอยากให้ AI ทำ, [ข้อความอินพุต] ที่เป็นข้อมูลสำหรับสั่งการ,
และคำอธิบายว่าต้องการให้ AI คิดแบบไหนเพื่อลดความสับสนหรือโอกาสที่ AI จะคิดนอกกรอบ จากนั้นปิดท้ายด้วยการกำหนดผลลัพธ์ที่เราต้องการให้ได้อย่างชัดเจน
ถ้าเปรียบเทียบให้เข้าใจง่าย [ข้อความอินพุต] ก็เหมือนโจทย์คณิตศาสตร์ที่อยู่ในหนังสือเรียน เราอาจบอก AI ว่าให้แก้โจทย์โดยใช้เครื่องหมาย (+) เท่านั้น
และผลลัพธ์ที่เราต้องการก็คือคำตอบของโจทย์ข้อนั้น ๆ สิ่งที่ทำให้ Few-shot แตกต่างจาก Zero-shot และ One-shot คือการทำซ้ำ pattern นี้กับตัวอย่างหลายครั้ง ไม่ใช่แค่ครั้งเดียว เช่น
- รอบแรกเราให้โจทย์ข้อที่ 1 → กำหนดวิธีคิด → แล้วได้คำตอบข้อที่ 1
- รอบต่อมาเปลี่ยนเป็นโจทย์ข้อที่ 2 → ได้คำตอบข้อที่ 2
- ทำต่อไปกับโจทย์ข้อที่ 3, 4, 5 หรือมากกว่านั้นก็ได้
การทำซ้ำหลายครั้งนี่เองคือหัวใจที่ทำให้โมเดลเห็นแบบแผนและสามารถประยุกต์ใช้กับโจทย์ใหม่ได้
การทดสอบและปรับแต่ง
การทดสอบ A/B เป็นวิธีที่มีประสิทธิภาพในการเปรียบเทียบตัวอย่างต่างๆ ลองใช้ตัวอย่างชุดเดียวกันกับโจทย์ที่หลากหลาย แล้วเปรียบเทียบผลลัพธ์ว่าชุดไหนให้ความแม่นยำสูงกว่า การเพิ่มหรือลดจำนวน shot ก็เป็นการทดสอบที่สำคัญ บางครั้งการใช้ตัวอย่างน้อยกว่าอาจให้ผลดีกว่า หากตัวอย่างมีคุณภาพสูงมากพอ
การปรับลำดับตัวอย่างสามารถส่งผลต่อประสิทธิภาพได้อย่างมาก ลองเปลี่ยนลำดับจากง่ายไปยาก ยากไปง่าย หรือสุ่มลำดับ แล้วสังเกตว่าลำดับไหนให้ผลลัพธ์ที่ดีที่สุด การคุมความยาวคำตอบด้วยคำสั่งกำกับช่วยป้องกันไม่ให้โมเดลตอบยาวเกินไปหรือสั้นเกินไป
การตรวจสอบความสอดคล้องกับเกณฑ์ที่กำหนดเป็นขั้นตอนสุดท้ายที่สำคัญ ต้องดูว่าผลลัพธ์ตรงกับความต้องการหรือไม่ มีข้อผิดพลาดประเภทไหนบ้าง และควรปรับปรุงตรงไหน
ข้อผิดพลาดที่พบบ่อย
ข้อผิดพลาดที่พบบ่อยที่สุด คือ การใช้ตัวอย่างที่ไม่สอดคล้องกัน ทำให้โมเดลสับสนว่าควรทำตามแบบไหน เช่น ตัวอย่างแรกใช้ภาษาทางการ แต่ตัวอย่างที่สองใช้ภาษากันเอง หรือตัวอย่างแรกให้คำตอบยาว แต่ตัวอย่างที่สองให้คำตอบสั้น ความไม่สอดคล้องเช่นนี้จะทำให้โมเดลไม่สามารถเรียนรู้ pattern ที่ชัดเจนได้
การใช้คำกำกวมไทยโดยไม่กำกับคำจำกัดความเป็นปัญหาใหญ่ เพราะภาษาไทยมีคำที่มีความหมายหลายแบบมาก เช่น คำว่า “ดี” อาจหมายถึง ดีในแง่คุณภาพ ดีในแง่ความประพฤติ หรือดีในแง่รสชาติ หากไม่ระบุบริบทให้ชัดเจน โมเดลอาจตีความผิดได้
การเริ่มตัวอย่างด้วยคำตอบก่อนเหตุผลเป็นข้อผิดพลาดร้ายแรง เพราะจะสอนให้โมเดลเรียนรู้การตอบแบบไม่มีเหตุผล หรือการสร้างเหตุผลหลังจากรู้คำตอบแล้ว ซึ่งจะทำให้ reasoning ของโมเดล ‘ไม่น่าเชื่อถือ’
ประเมินคุณภาพพรอมป์
การประเมินคุณภาพ prompt แบบ few-shot มีเกณฑ์หลายประการ ความอ่านง่ายเป็นเกณฑ์แรก prompt ต้องเข้าใจง่าย มีโครงสร้างชัดเจน และไม่ซับซ้อนจนเกินไป ความกะทัดรัดก็สำคัญ ต้องให้ข้อมูลครบถ้วนแต่ไม่ยาวจนเกินจำเป็น
ความไม่กำกวมเป็นเกณฑ์สำคัญ คำสั่งและตัวอย่างต้องชัดเจน ไม่ให้โมเดลตีความได้หลายแบบ ตัวอย่างต้องครอบคลุมหลากหลายเพื่อให้โมเดลเห็น pattern ที่สมบูรณ์
การกำกับรูปแบบเอาต์พุตให้ชัดเจนช่วยให้ได้ผลลัพธ์ที่ต้องการ ต้องระบุว่าต้องการคำตอบในรูปแบบไหน ยาวแค่ไหน และมีองค์ประกอบอะไรบ้าง ความสามารถทำซ้ำได้เป็นเกณฑ์สุดท้าย prompt ที่ดีต้องให้ผลลัพธ์ที่สม่ำเสมอเมื่อใช้กับข้อมูลที่คล้ายกัน
สรุปและเทมเพลตนำไปใช้
การสร้าง prompt แบบ few-shot สำหรับภาษาไทยต้องอาศัยการผสมผสานระหว่างความเข้าใจในหลักการทำงานของ LLMs กับความรู้เฉพาะของภาษาไทย การเลือกตัวอย่างที่ดี การจัดลำดับที่เหมาะสม และการทดสอบปรับแต่งอย่างต่อเนื่องจะช่วยให้ได้ผลลัพธ์ที่แม่นยำและใช้งานได้จริง
เทมเพลต few-shot สำหรับภาษาไทย:
“[คำสั่งงานหลัก]: [อธิบายงานที่ต้องการ]
[ตัวอย่างที่ 1]
อินพุต: [ข้อมูลตัวอย่างที่ 1]
การคิดทีละขั้น: [อธิบายการให้เหตุผล]
เอาต์พุต: [ผลลัพธ์ที่ต้องการ]
[ตัวอย่างที่ 2]
อินพุต: [ข้อมูลตัวอย่างที่ 2]
การคิดทีละขั้น: [อธิบายการให้เหตุผล]
เอาต์พุต: [ผลลัพธ์ที่ต้องการ]
[ตัวอย่างที่ 3]
อินพุต: [ข้อมูลตัวอย่างที่ 3]
การคิดทีละขั้น: [อธิบายการให้เหตุผล]
เอาต์พุต: [ผลลัพธ์ที่ต้องการ]
ตอนนี้ลองทำกับข้อมูลใหม่:
อินพุต: [ข้อมูลจริงที่ต้องการประมวลผล]
การคิดทีละขั้น:”
การใช้เทมเพลตนี้จะช่วยให้สร้าง prompt ที่มีประสิทธิภาพและเหมาะสมกับการใช้งานภาษาไทยในหลากหลายสถานการณ์ โดยเน้นให้โมเดลเกิดการ reasoning ก่อนให้คำตอบเสมอ
Source : IEEE Xplore, Semantic Scholar, ACL Anthology, arXiv










