- เมื่อป้อนไฟล์ wav ที่เงียบสนิทแบบสมบูรณ์ให้กับโมเดล Whisper จะเกิดอาการ hallucination โดยแสดงข้อความเดิมเสมอเป็นภาษาอาหรับคือ "ترجمة نانسي قنقر" (Translation by Nancy Qunqar)
- หากสร้างเสียงเงียบด้วย
ffmpeg แล้วรัน Whisper โดยระบุภาษาอาหรับและโมเดล large-v3 ก็จะได้ผลลัพธ์เดิมทุกครั้ง
- ปัญหานี้ดูเหมือนว่าโมเดล Whisper ถูกฝึกมาให้ตีความเสียงเงียบเป็นข้อความบางอย่างโดยเฉพาะ
- ในโมเดลรุ่นก่อนหน้า (
small เป็นต้น) ยังพอระงับได้ระดับหนึ่งด้วยการปรับพารามิเตอร์อย่าง suppress_tokens, initial prompt, logprob_threshold แต่ใน v3 (โดยเฉพาะ large-v3) แทบไม่ได้ผล
- มีการเสนอวิธีเลี่ยงอย่าง "ใช้ VAD(Voice Activity Detection)" หรือกรองช่วงที่เป็นความเงียบของเสียงออกล่วงหน้า
อาการของปัญหา
- มีรายงานปัญหาว่าใน Whisper
large-v3 เมื่อเจอเสียงเงียบ จะ hallucination เป็นประโยคภาษาอาหรับ "ترجمة نانسي قنقر" ออกมาเสมอ
- สร้างไฟล์ wav เงียบ 30 วินาทีด้วย
ffmpeg ตามด้านล่าง
ffmpeg -f lavfi -i anullsrc=r=44100\:cl=stereo -t 30 silence.wav
- ตัวอย่างการรันคำสั่ง Whisper
whisper ./silence.wav --language Arabic --model large-v3
- ผลลัพธ์:
\[00:00.000 --> 00:29.980] ترجمة نانسي قنقر
สาเหตุและการวิเคราะห์
- โมเดล Whisper รุ่นใหม่อย่าง
large-v3 มีแนวโน้มสร้างผลลัพธ์ hallucination แบบสุ่มสำหรับเสียงเงียบ แทนแนวทางเก่าอย่างการอธิบายเสียง
- โมเดลก่อนหน้า (
small เป็นต้น) ก็สร้างผลลัพธ์จิปาถะจากเสียงเงียบเช่นกัน แต่ยังควบคุมได้บางส่วนด้วยตัวเลือกอย่าง suppress_tokens, initial prompt, logprob_threshold
- ใน v3 วิธีข้างต้นแทบใช้ไม่ได้ และเกิดเป็น ผลลัพธ์ hallucination แบบตายตัว
ข้อเสนอสำหรับการเลี่ยงและการแก้ปัญหา
- ใช้ VAD(Voice Activity Detection): ส่งเข้า Whisper เฉพาะช่วงที่มีเสียงพูดจริง และไม่นำช่วงเงียบเข้าไปเลย
- ปรับพารามิเตอร์อย่าง
suppress_tokens, initial prompt, logprob_threshold: มีผลกับบางโมเดล แต่แทบไม่มีนัยสำคัญกับ large-v3
- สำหรับเสียงที่เงียบสนิทหรือมีสัญญาณอ่อนมาก อาจต้องใช้การประมวลผลภายหลังด้วยวิธีอื่นแทน Whisper
ประเด็นอภิปรายอื่น ๆ
- มีการพูดถึงเพิ่มเติมว่ามีโมเดลที่ดีกว่า
large-v3 สำหรับภาษาอาหรับหรือไม่ แต่ยังไม่มีการเสนอโมเดลทางเลือกที่ชัดเจน
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ตอนถอดเสียงภาษาจีนด้วย whisper-large-v3 เคยเจอหลายครั้งว่าช่วงที่เงียบกลับถูกถอดเป็นประโยคแปลกๆ อย่าง “กดไลก์ แชร์ และเพิ่มรายการโปรดด้วยนะ” เลยสงสัยว่าตอนฝึกโมเดลน่าจะสุ่มเก็บข้อมูลจากวิดีโอ YouTube โดยไม่ได้คัดเฉพาะข้อมูลที่มีประโยชน์
LLM ก็คล้ายกัน นี่เป็นตัวอย่างคลาสสิกของอาการ "overfitting" กับข้อมูลที่เอนเอียงและไม่ชัดเจน คล้ายกับการเอาข้อความตอบกลับอัตโนมัติ out of office มาใส่เป็นผลลัพธ์การแปลตรงๆ ดูบทความที่เกี่ยวข้อง https://www.theguardian.com/theguardian/2008/nov/01/5
เพื่อประหยัดเวลาค้นหา ขออธิบายว่าอาหรับ "رجمة نانسي قنقر" หมายถึง "แปลโดย Nancy Qanqar" หรือ "คำแปลของ Nancy Qanqar" โดย "رجمة" แปลว่า การแปล และ "نانسي قنقر" เป็นชื่อคน
Whisper มีอาการหลอน (hallucination) บ่อยเกินไปจนอยู่ในระดับใช้งานไม่ได้ เรื่องนี้ถูกบันทึกไว้หลายครั้งแล้ว ถ้าตัดช่วงเงียบออกจากเสียงจะช่วยลดได้บ้าง แต่ยังมีปัญหาอย่างการแก้ไวยากรณ์อัตโนมัติด้วย เช่น ในงานแปลเสียงพูดสองภาษา เป็นต้น แม้โมเดลเสียงรุ่นใหม่จะดีขึ้น แต่ก็ยังไม่หายสนิท https://news.ycombinator.com/item?id=43427376
แม้แต่ใน Whisper เวอร์ชันภาษาอังกฤษ เวลาปล่อยช่วงเงียบ ก็ยังมักมี “[ sub by sk cn2 ]”, “ยังไงก็ขอบคุณที่รับชมนะครับ! ฝากกดติดตามและกดไลก์ด้วย! บ๊ายบาย!” หรือ “วิดีโอนี้จบแล้ว ขอบคุณที่รับชม หากมีประโยชน์ ฝากกดติดตามช่องด้วย” โผล่มาบ่อยๆ
ในภาษารัสเซียก็มักมีอาการหลอนเป็น “Субтитры сделал DimaTorzok” (ซับไตเติลจัดทำโดย DimaTorzok) โผล่มาท้ายข้อความบ่อยๆ เลยสงสัยเหมือนกันว่ามีซับจริงที่ใช้ข้อความนี้มากแค่ไหน จึงลองค้นใน YouTube แต่ดูเหมือนจะไม่ได้มีมากนัก
ถ้า 30 วินาทีแรกของสายบันทึกเสียงเป็นเสียงเรียกเข้าหรือ DTMF (ซึ่งแทบจะเกิดเสมอเวลาโทรเข้าบริษัท) Whisper มักเลือกภาษาผิดเป็น Nynorsk หรือภาษาเวลส์ บ่อยๆ ไม่ได้เช็กว่ามันถอดออกมาเป็นข้อความอะไร แต่ก็น่าจะเพี้ยนไปในทำนองเดียวกัน สำหรับผมไม่ใช่ปัญหาในทางปฏิบัติ แต่กับคอลเซ็นเตอร์สองภาษาอาจลำบากพอสมควร
สำหรับคำถามว่า “Nicolai Winther คือใคร?” ดูได้ที่ https://medium.com/@lehandreassen/who-is-nicolai-winther-985409568201
มีคนบอกว่าควรเปลี่ยนชื่อเรื่องเป็น "OpenAI, หลักฐานเผยว่าฝึกจากหนังเถื่อน"
ยังมีมุกว่า “หรือว่า Nancy Qunqar เป็นคนมานั่งถอดทีละบรรทัดแบบแมนนวล” พร้อมคำให้กำลังใจแนว “สู้ๆ นะ Nancy! ทำต่อไป!”