ทำ RAG กับเอกสารภาษาไทย: ปัญหาที่เจอบ่อยและวิธีแก้
ภาษาไทยไม่มีการเว้นวรรคระหว่างคำ ทำให้ RAG พลาดในแบบที่ภาษาอังกฤษไม่เจอ รวมปัญหาที่พบบ่อยตั้งแต่ตัดคำ หั่นเอกสาร จนถึงคำทับศัพท์ พร้อมวิธีแก้
ทีมของคุณทำตาม tutorial RAG ภาษาอังกฤษได้ครบทุกขั้น ทดสอบกับเอกสารอังกฤษก็ตอบดี แต่พอใส่คู่มือภาษาไทยเข้าไป ผลกลับค้นไม่เจอบ้าง ตอบผิดหัวข้อบ้าง ปัญหานี้ไม่ได้เกิดจากทีมทำผิด แต่เกิดจากลักษณะของภาษาไทยเองที่เครื่องมือส่วนใหญ่ไม่ได้ออกแบบมาเพื่อมันตั้งแต่ต้น
ทำไมภาษาไทยถึงยากสำหรับ RAG
งานวิจัย PyThaiNLP: Thai Natural Language Processing in Python (2023) อธิบายว่าภาษาไทยในรูปแบบที่ใช้ทั่วไปเขียนต่อกันโดยไม่มีช่องว่างหรือเครื่องหมายคั่นระหว่างคำและระหว่างประโยค ขอบเขตของคำและประโยคจึงไม่ชัด และหลายครั้งไวยากรณ์อย่างเดียวก็แก้ความกำกวมไม่ได้ ระบบที่คิดมาจากภาษาที่เว้นวรรคระหว่างคำ จึงสะดุดตั้งแต่ขั้นแรก
ปัญหาที่ 1: การตัดคำ
Keyword search อย่าง BM25 ต้องรู้ว่า "คำ" คืออะไร ถ้าระบบตัดคำไม่เป็น ข้อความ "ลาคลอดได้กี่วัน" อาจถูกมองเป็นก้อนเดียว และค้นไม่เจอเอกสารที่เขียนว่า "การลาเพื่อคลอดบุตร"
วิธีแก้
- ใช้ตัวตัดคำภาษาไทย เช่น PyThaiNLP ซึ่งมีหลายอัลกอริทึม ค่าเริ่มต้นคือ NewMM ที่เน้นความเร็ว และใช้วิธีเดียวกันทั้งตอนสร้างดัชนีและตอนค้น
- เพิ่มคำศัพท์เฉพาะของบริษัทลงพจนานุกรม เช่น ชื่อผลิตภัณฑ์ ชื่อแผนก และตัวย่อภายใน
- ใช้ hybrid search เพื่อให้ semantic search ช่วยในกรณีที่ตัดคำพลาด
ปัญหาที่ 2: หั่นเอกสารกลางประโยค
ตัวหั่นข้อความหลายตัวใช้จุด (.) หรือขึ้นบรรทัดใหม่เป็นจุดตัด แต่ภาษาไทยไม่ใช้จุดจบประโยค และใช้ช่องว่างทั้งเพื่อจบประโยคและเว้นวลี chunk จึงถูกตัดกลางใจความได้ง่าย
วิธีแก้
- หั่นตามโครงสร้างเอกสาร เช่น หัวข้อ ข้อ และย่อหน้า แทนการนับตัวอักษรอย่างเดียว
- ใช้ overlap ระหว่าง chunk และใส่ชื่อหัวข้อนำหน้าทุก chunk
ปัญหาที่ 3: คำทับศัพท์และภาษาปนกัน
เอกสารองค์กรไทยมักมีคำแบบ "อีเมล" "อีเมล์" และ "email" ปนกัน หรือ "OT" กับ "ค่าล่วงเวลา" พนักงานถามแบบหนึ่ง แต่เอกสารเขียนอีกแบบ
วิธีแก้
- เลือก embedding model ที่รองรับหลายภาษา เช่น BGE-M3 ซึ่ง BAAI ระบุว่ารองรับมากกว่า 100 ภาษา
- ทำอภิธานศัพท์ (glossary) คำพ้องของบริษัท แล้วใช้ขยายคำค้นก่อนส่งไปค้นหา
ปัญหาที่ 4: ดึงข้อความจาก PDF แล้วเพี้ยน
PDF ภาษาไทยบางไฟล์ เมื่อดึงข้อความออกมา สระและวรรณยุกต์อาจผิดตำแหน่ง หรือได้ตัวอักษรแปลกๆ ขึ้นกับฟอนต์และวิธีสร้างไฟล์ ส่วนไฟล์สแกนต้องผ่าน OCR ที่อ่านภาษาไทยได้ก่อน
วิธีแก้
- สุ่มเปิดข้อความที่ดึงออกมาอ่านด้วยตาทุกครั้งก่อนนำเข้าคลัง
- ถ้าเพี้ยนมาก ลองใช้ไฟล์ต้นฉบับ (Word หรือ Google Docs) แทน หรือใช้ OCR ที่ฝึกกับภาษาไทย
- แปลงเลขไทยเป็นเลขอารบิก และกำหนดรูปแบบปี พ.ศ. หรือ ค.ศ. ให้เป็นแบบเดียวกัน
ตัวอย่างในองค์กรไทย
โรงพยาบาลเอกชนแห่งหนึ่งทำ RAG ให้พยาบาลค้นแนวปฏิบัติภายใน รอบแรกพยาบาลพิมพ์ว่า "คนไข้แพ้ยา ต้องรายงานยังไง" แต่ระบบหาไม่เจอ เพราะเอกสารใช้คำว่า "อาการไม่พึงประสงค์จากการใช้ยา" และ "ADR" ทีมจึงเพิ่มอภิธานศัพท์ที่จับคู่คำพูดในหอผู้ป่วยกับคำทางการ เพิ่มตัวตัดคำภาษาไทยให้ keyword search และหั่นเอกสารตามหัวข้อแทนการนับตัวอักษร ผลการค้นดีขึ้นโดยไม่ต้องเปลี่ยนโมเดลภาษาเลย
ข้อควรระวัง
- อย่าเชื่อคะแนน benchmark ภาษาอังกฤษ โมเดลที่เก่งภาษาอังกฤษอาจทำได้ไม่ดีกับภาษาไทย
- ตัวตัดคำทุกตัวมีข้อผิดพลาด โดยเฉพาะชื่อเฉพาะและคำใหม่ ต้องทดสอบกับเอกสารของคุณ
- ชุดคำถามทดสอบต้องเขียนแบบที่พนักงานไทยถามจริง รวมภาษาพูด คำย่อ และคำสะกดผิด
เครื่องมือส่วนใหญ่ไม่ได้ออกแบบมาเพื่อภาษาไทย เราจึงต้องออกแบบให้ภาษาไทยเอง
เริ่มต้นยังไง
- เก็บคำถามภาษาไทยจริงจากพนักงาน 30 ข้อขึ้นไป รวมภาษาพูดและคำทับศัพท์
- ตรวจคุณภาพข้อความที่ดึงจาก PDF ก่อนทำอย่างอื่น
- เลือก embedding model หลายภาษา และทดสอบเทียบกันด้วยคำถามชุดนั้น
- เพิ่มตัวตัดคำภาษาไทยและอภิธานศัพท์ของบริษัทให้ keyword search
- วัดผลซ้ำทุกครั้งที่ปรับ และเก็บคำถามที่พลาดมาเพิ่มในชุดทดสอบ
ถ้าเอกสารของคุณเป็นไฟล์สแกนจำนวนมาก อ่าน Document AI: ดึงข้อมูลจาก PDF และเอกสารสแกน ต่อได้ และถ้าอยากรู้ว่าโมเดล AI ตัวไหนใช้ภาษาไทยได้ดี ลองอ่าน Claude AI กับภาษาไทย บน Plants.work