AI ไม่ได้ Hallucinate หรอก มันแค่ทำตามที่เราสอน
คำว่า hallucinate ทำให้เราเข้าใจผิดมาตลอด AI ไม่ได้เพ้อฝัน มันแค่ทำงานตามวิธีที่เราฝึกมัน
สารบัญ

เรื่องเล่าจากห้องประชุมวันนั้น
เมื่อปลายปี 2023 ทีมนักพัฒนาบริษัทแห่งหนึ่งในไทยนั่งประชุมกันอย่างเคร่งเครียด ลูกค้ารายใหญ่โทรมาด่าว่า chatbot ที่ทีมสร้างขึ้นบอกว่าบริษัทมีสาขาที่ไม่มีอยู่จริง พร้อมแนบเบอร์โทรศัพท์ที่สมบูรณ์แบบทุกอย่าง มีรหัสพื้นที่ถูกต้อง มีจำนวนหลักเป๊ะ แต่โทรไปไม่มีใครรับ เพราะมันไม่มีอยู่จริง
ทีมเลยนั่งถกกันว่า "AI มัน hallucinate อีกแล้ว"
แต่วันนั้น มีคนหนึ่งในห้องยกมือถามคำถามที่เปลี่ยนวิธีคิดของทีมทั้งทีม
"มันจะ hallucinate ได้ยังไง มันไม่มีสติสัมปชัญญะให้เพ้อฝันตั้งแต่แรกแล้ว มันแค่ทำตามที่เราฝึกมัน"
คำถามนั้นทำให้ทีมหยุดและหันมาตั้งคำถามใหม่ และนั่นคือจุดเริ่มต้นของบทความนี้
คำว่า Hallucination ทำให้เราเข้าใจผิด
คำว่า "hallucination" ถูกใช้ครั้งแรกในวงการ AI ราวปี 2022 และกลายเป็นคำยอดฮิตทันที สื่อใช้ นักวิจัยใช้ นักพัฒนาก็ใช้ แต่ปัญหาคือคำนี้สื่อความหมายผิดตั้งแต่ต้น
คำว่า hallucination ในภาษามนุษย์หมายถึงการเห็นหรือได้ยินสิ่งที่ไม่มีอยู่จริง ทั้งที่สมองของเราทำงานปกติ มันคืออาการทางจิตเวชที่เกิดจากความผิดปกติของการรับรู้
แต่ AI ไม่มีการรับรู้ตั้งแต่แรก
มันไม่มี "ความเป็นจริง" ให้เพ้อฝันหลุดไปจาก มันไม่มีสติที่จะสับสนระหว่างความจริงและความฝัน มันคือโปรแกรมคอมพิวเตอร์ที่คำนวณความน่าจะเป็นของคำถัดไปจากข้อมูลที่เคยเห็น
เรียกง่ายๆ คือ มันไม่ได้โกหก มันไม่ได้เพ้อ มันแค่ทำงานตามที่เราออกแบบให้มันทำ
สิ่งที่เกิดขึ้นจริง: Next Token Prediction
ลองนึกภาพว่าคุณกำลังเล่นเกมเติมคำในช่องว่าง ประโยคนี้
"พระอาทิตย์ขึ้นทางทิศ___"
คุณคงตอบ "ตะวันออก" ทันทีโดยไม่ต้องคิด เพราะคุณเห็นประโยคนี้มานับครั้งไม่ถ้วนในชีวิต
AI ก็ทำแบบนั้นเป๊ะเปย์ แต่ในสเกลที่ใหญ่กว่ามาก แทนที่จะเป็นประโยคเดียว มันเห็นข้อมูลหลายล้านล้าน token แล้วเรียนรู้ว่าคำไหนมักจะตามด้วยคำไหน
ปัญหาอยู่ตรงนี้
เมื่อใครถามว่า "สาขาของบริษัท ABC อยู่ที่ไหนบ้าง" และข้อมูลฝึกมีรูปแบบที่คล้ายกัน เช่น รายชื่อสาขาของบริษัทอื่นๆ ที่มีหลายสาขาพร้อมเบอร์โทร โมเดลก็จะ "เติมคำ" ตามรูปแบบที่มันเห็นบ่อยๆ
มันสร้างสาขาขึ้นมาเพราะรูปแบบของคำตอบที่ "ดูเหมือนจริง" มีความน่าจะเป็นสูง ไม่ใช่เพราะมันเพ้อฝัน
คำถาม: สาขาของบริษัท ABC อยู่ที่ไหน?
ข้อมูลฝึกที่โมเดลเคยเห็น:
- บริษัท X มีสาขาที่สีลม โทร 02-XXX-XXXX
- บริษัท Y มีสาขาที่อารียา โทร 02-YYY-YYYY
- บริษัท Z มีสาขาที่บางนา โทร 02-ZZZ-ZZZZ
ผลลัพธ์: บริษัท ABC มีสาขาที่ลาดพร้าว โทร 02-123-4567
(เบอร์มีรูปแบบถูกต้อง แต่ไม่มีอยู่จริง)
โมเดลไม่ได้ "คิด" ว่านี่คือความจริง มันแค่เลือกคำที่มีความน่าจะเป็นสูงสุดจากการกระจายตัวที่มันเรียนรู้มา
สาเหตุจริงๆ ที่ทำให้คำตอบ "ดูเหมือนจริงแต่ไม่จริง"
1. ข้อมูลฝึกไม่ได้แยกความจริงกับนิยาย
ข้อมูลที่ใช้ฝึก LLM มาจากอินเทอร์เน็ต ซึ่งมีทั้งข้อเท็จจริง บทความวิจารณ์ นิยาย บทกวี สื่อโฆษณา และข่าวปลอม โมเดลเรียนรู้จากทั้งหมดโดยไม่ได้แยกแยะว่าอะไรคือข้อเท็จจริง
เมื่อโมเดลเจอคำถามที่ต้องการข้อเท็จจริง แต่ข้อมูลฝึกไม่มีคำตอบที่แม่นยำ มันก็จะ "สร้าง" คำตอบที่ดูเหมือนข้อเท็จจริงตามรูปแบบที่เคยเห็น
2. RLHF สอนให้โมเดล "พูดเก่ง" มากกว่า "พูดจริง"
กระบวนการ Reinforcement Learning from Human Feedback หรือ RLHF ที่ใช้ปรับแต่งโมเดลให้ตรงใจมนุษย์ มี side effect ที่น่าสนใจ
นักฝึกที่ให้คะแนนคำตอบมักจะให้คะแนนสูงกับคำตอบที่ "ดูเป็นมืออาชีพ" "มีโครงสร้างดี" และ "พูดจาสุภาพ" มากกว่าคำตอบที่ "ยอมรับว่าไม่รู้"
ผลคือ โมเดลเรียนรู้ว่าการตอบอย่างมั่นใจแม้ไม่รู้คำตอบ จะได้คะแนนสูงกว่าการบอกว่า "ฉันไม่แน่ใจ"
นี่ไม่ใช่ hallucination นี่คือสิ่งที่เราสอนมันโดยไม่รู้ตัว
3. Temperature และ Sampling Strategy
พารามิเตอร์ temperature ควบคุมความ "สร้างสรรค์" ของโมเดล ค่าสูง = สุ่มมากขึ้น ค่าต่ำ = เลือกคำที่น่าจะเป็นสูงสุดเสมอ
# ตัวอย่างการตั้งค่าที่ทำให้เกิดผลลัพธ์ที่ไม่แม่นยำ
response = openai.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "บอกฉันเกี่ยวกับสาขาของบริษัท ABC"}],
temperature=0.8, # ค่าสูง = โมเดลเลือกคำที่หลากหลายขึ้น
top_p=0.95
)
เมื่อ temperature สูง โมเดลมีโอกาสเลือกคำที่ไม่ใช่ตัวเลือกอันดับหนึ่ง ซึ่งบางครั้งก็สร้างประโยคที่ไพเราะแต่ไม่ถูกต้อง
4. โมเดลไม่มี Ground Truth Check
โมเดลภาษาแบบ LLM ไม่มีกลไกตรวจสอบความจริงในตัวเอง มันไม่ได้เชื่อมต่อกับฐานข้อมูลความจริง มันไม่ได้ verify คำตอบกับแหล่งข้อมูลภายนอกก่อนตอบ
มันคือนักเล่าเรื่องที่ดี ไม่ใช่นักวิจัย
กรณีศึกษา: เมื่อคำตอบที่ดูเหมือนจริงทำให้เกิดปัญหาจริง
เคส 1: ทนายความที่อ้างคดีที่ไม่มีอยู่จริง
เมื่อปี 2023 ทนายความในนิวยอร์กใช้ ChatGPT ค้นคว้าคดีแล้วยื่นคำพิพากษาต่อศาล ปรากฏว่าคดีที่อ้างอิงทั้งหมดไม่มีอยู่จริง ChatGPT สร้างชื่อคดี เลขที่คดี และสรุปคำพิพากษาขึ้นมาเองทั้งหมด
ทนายความบอกศาลว่าเขา "ไม่รู้" ว่า ChatGPT สามารถสร้างข้อมูลขึ้นมาได้ เพราะมันตอบมาอย่างมั่นใจ พร้อมเลขที่คดีที่ดูจริงทุกอย่าง
ศาลลงโทษทนายความคนนั้น แต่ปัญหาจริงไม่ได้อยู่ที่ทนาย อยู่ที่ว่าเราเข้าใจผิดว่า AI คือเครื่องมือค้นข้อมูล ในความเป็นจริงมันคือเครื่องมือสร้างข้อความ
เคส 2: Chatbot สายการบินที่สัญญาเงินชดเชย
ปี 2024 สายการบิน Air Canada โดนฟ้องเพราะ chatbot ของบริษัทบอกลูกค้าว่าสามารถขอเงินคืนได้ในกรณีที่ต้องซื้อตั๋วเดินทางเพราะญาติเสียชีวิต ทั้งที่นโยบายจริงของบริษัทไม่มีเงื่อนไขนี้
ศาลตัดสินว่าบริษัทต้องรับผิดชอบคำพูดของ chatbot ของตัวเอง เพราะ chatbot คือตัวแทนของบริษัท
สาเหตุ: chatbot ถูกฝึกด้วยข้อมูลนโยบายที่ไม่ครบถ้วน และมีการตั้งค่าให้ตอบอย่าง "เป็นประโยชน์" โดยไม่มี guardrail ที่จำกัดให้ตอบเฉพาะข้อมูลที่มีในฐานข้อมูล
เคส 3: นักพัฒนาไทยที่แก้ปัญหาได้ด้วยการเปลี่ยนวิธีถาม
กลับมาที่ทีมนักพัฒนาไทยในตอนต้น หลังจากเปลี่ยนมุมมองจาก "AI hallucinate" เป็น "AI ทำตามที่เราฝึก" ทีมเริ่มแก้ปัญหาจากรากเหง้า
แทนที่จะใช้ prompt แบบเดิม
# แบบเดิม (เปิดโอกาสให้โมเดลสร้างคำตอบ)
ถาม: สาขาของบริษัท ABC อยู่ที่ไหนบ้าง?
ทีมเปลี่ยนเป็น
# แบบใหม่ (จำกัดขอบเขต + อ้างอิงข้อมูล)
ถาม: จากข้อมูลใน context ด้านล่างเท่านั้น
บอกฉันว่าสาขาของบริษัท ABC อยู่ที่ไหน
หากไม่มีข้อมูล ให้ตอบว่า "ไม่มีข้อมูล"
Context: [ข้อมูลสาขาจริงจากฐานข้อมูล]
และตั้งค่า temperature เป็น 0 หรือใกล้เคียง ผลคืออัตราคำตอบที่ผิดพลาดลดลงจาก 30% เหลือต่ำกว่า 2%
วิธีลดปัญหา "คำตอบที่ไม่จริง" อย่างเป็นระบบ
ใช้ RAG (Retrieval-Augmented Generation)
แทนที่จะให้โมเดลตอบจากความจำ (ที่ไม่มีอยู่จริง) ให้ดึงข้อมูลจริงจากฐานข้อมูลก่อนแล้วให้โมเดลสรุป
# โครงสร้างพื้นฐานของ RAG
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
# 1. สร้าง vector store จากข้อมูลจริง
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(real_documents, embeddings)
# 2. ดึงข้อมูลที่เกี่ยวข้อง
relevant_docs = vectorstore.similarity_search(user_question, k=3)
# 3. ให้โมเดลตอบจากข้อมูลที่ดึงมาเท่านั้น
prompt = f"""
ตอบคำถามจากข้อมูลต่อไปนี้เท่านั้น
หากไม่มีข้อมูลเพียงพอ ให้บอกว่าไม่ทราบ
ข้อมูล: {relevant_docs}
คำถาม: {user_question}
"""
ตั้งค่า Temperature ให้เหมาะกับงาน
- งานที่ต้องการความแม่นยำ (FAQ, ข้อมูลสาขา, คำปรึกษากฎหมาย): temperature 0–0.2
- งานที่ต้องการความคิดสร้างสรรค์ (เขียนโฆษณา, แต่งนิยาย): temperature 0.7–1.0
- งานที่อยู่กึ่งกลาง (สรุปบทความ, แปลภาษา): temperature 0.3–0.5
เพิ่ม System Prompt ที่จำกัดขอบเขต
คุณคือผู้ช่วยตอบคำถามของบริษัท ABC
ตอบเฉพาะจากข้อมูลที่ให้ใน context เท่านั้น
หากไม่มีข้อมูล ตอบว่า "ขออภัย ฉันไม่มีข้อมูลเรื่องนี้"
ห้ามเดา ห้ามสร้างข้อมูลขึ้นมา ห้ามอ้างอิงข้อมูลจากภายนอก
ใช้ Function Calling แทนการให้โมเดลตอบตรงๆ
แทนที่จะให้โมเดลตอบคำถามเกี่ยวกับสาขาโดยตรง ให้สอนโมเดลเรียก function ที่ดึงข้อมูลจากฐานข้อมูลจริง
tools = [{
"type": "function",
"function": {
"name": "get_branch_info",
"description": "ดึงข้อมูลสาขาจริงจากฐานข้อมูล",
"parameters": {
"type": "object",
"properties": {
"company_name": {"type": "string"}
}
}
}
}]
# โมเดลจะเรียก function แทนการตอบเอง
# ผลลัพธ์มาจากฐานข้อมูลจริง ไม่ใช่จากการสร้างข้อความ
เปลี่ยนวิธีคิด เปลี่ยนวิธีแก้
เมื่อเราเลิกใช้คำว่า "hallucination" แล้วมองว่ามันคือ "ผลลัพธ์ที่เกิดจากวิธีฝึก" เราจะเริ่มตั้งคำถามที่ถูกต้อง
แทนที่จะถามว่า "ทำไม AI ถึงโกหก?" ให้ถามว่า
- ข้อมูลฝึกมีอะไรที่ทำให้โมเดลตอบแบบนี้?
- การตั้งค่าพารามิเตอร์เหมาะกับงานนี้ไหม?
- มี guardrail ที่จำกัดขอบเขตคำตอบหรือไม่?
- โมเดลมีทางเลือกที่จะบอกว่า "ไม่รู้" จริงหรือไม่?
คำถามเหล่านี้นำไปสู่การแก้ปัญหาที่จับต้องได้ ไม่ใช่แค่การโทษว่า AI "เพ้อฝัน"
สิ่งที่นักพัฒนาควรทำต่อ
- ตรวจสอบ prompt และ system message ของทุกระบบที่ใช้ LLM ว่ามีการจำกัดขอบเขตคำตอบชัดเจนหรือไม่
- ทดสอบด้วยคำถามที่ไม่มีคำตอบในข้อมูล ดูว่าโมเดลตอบว่าอะไร ถ้าตอบแบบสร้างขึ้นมา แปลว่า guardrail ยังไม่พอ
- ลองลด temperature ลงเหลือ 0 แล้วเปรียบเทียบความแม่นยำของคำตอบ
- เพิ่ม RAG หรือ function calling ในจุดที่ต้องการข้อมูลที่แม่นยำ
- วัดผล ด้วยชุดทดสอบที่มีทั้งคำถามที่มีคำตอบและไม่มีคำตอบ
คำถามชวนคิดทิ้งท้าย
ถ้า AI ไม่ได้ hallucinate แต่แค่ทำตามที่เราฝึก แล้วปัญหาจริงๆ อยู่ที่ฝึกผิดหรือฝึกไม่พอ คำว่า "hallucination" ที่เราใช้กันมาตลอด มันเป็นการโยนความผิดให้เครื่องจักร เพื่อหนีจากความรับผิดชอบของคนที่สร้างมันหรือเปล่า?
ลองทบทวนดู แล้วมาแชร์กันได้ว่าทีมของคุณเคยเจอเคสที่ AI ตอบผิดเพราะ "ฝึกผิด" แบบไหน แล้วแก้ยังไง
เนื้อหาที่จัดทำโดยมี AI ช่วยจะมีป้ายกำกับ "เรียบเรียงโดยมี AI ช่วย" เพื่อให้คุณทราบอย่างชัดเจน เราถือว่าความโปร่งใสเรื่องการใช้ AI เป็นสิ่งสำคัญต่อความไว้วางใจของผู้อ่าน
ความคิดเห็น (0)
ยังไม่มีความคิดเห็น — มาเป็นคนแรกกันเถอะ!