ข้ามไปยังเนื้อหาหลัก

โอเพนเวท

OpenThai 2.0 ASR Streaming

โมเดลแบบเปิดที่ถอดเสียงพูดภาษาไทยเป็นข้อความ ขณะที่คนยังพูดอยู่

  • พารามิเตอร์640ล้าน
  • สัญญาอนุญาตOpenMDW-1.1
  • ข้อความช้ากว่าเสียง80–1120ms
  • FLEURS อักษรผิด8.47%

ดาวน์โหลดโมเดลอ่านบทความเปิดตัว

เปิดน้ำหนักโมเดลบน Hugging Face เมื่อ 12 พฤศจิกายน 2569 โดย iApp Technology

ทำอะไรได้บ้าง​

  • ถอดความขณะที่คนพูดข้อความมาช้ากว่าเสียง 80, 320, 560 หรือ 1120 มิลลิวินาที เลือกได้ตอนถอดเสียง น้ำหนักชุดเดียวใช้ได้ทุกระดับ และยิ่งรอนานขึ้นก็แม่นขึ้นเล็กน้อย
  • เสียงยาวแค่ไหนก็ได้เซิร์ฟเวอร์ที่แนบมาตัดไฟล์ยาวเป็นท่อนตามช่วงหยุด แล้วถอดแต่ละท่อนแยกกัน แบบเดียวกับบริการของ iApp ไฟล์ยาวหนึ่งชั่วโมงหรือมากกว่าจึงถอดได้ด้วยหน่วยความจำคงที่ เราทดสอบกับไฟล์ยาวสูงสุด 87 นาที
  • อักษรไทยล้วน หรือคำอังกฤษเป็นภาษาอังกฤษพรอมต์ th-TH เขียนทุกอย่างเป็นอักษรไทย ส่วนพรอมต์ th-mix เขียนคำภาษาอังกฤษที่ผู้พูดใช้เป็นอักษรละติน
  • ใครพูดอะไรเซิร์ฟเวอร์ที่แถมมาระบุผู้พูดในการประชุมได้ ด้วยโมเดลแยกผู้พูดแบบเปิดของ NVIDIA
  • GPU หรือ CPUNVIDIA H100 หนึ่งใบถอดไฟล์ได้เร็วกว่าเวลาจริงราว 257 เท่า และรองรับการสตรีมสดได้ราว 20 สาย ส่วน CPU ระดับโน้ตบุ๊ก 8 เธรดก็ตามทันการสตรีมสดหนึ่งสาย
  • โมเดลเบื้องหลัง OpenThai ASR Realtimeบริการถอดเสียงสดบนคลาวด์ของ iApp ใช้โมเดลนี้ ดูที่ OpenThai ASR Realtime

ผลการทดสอบ​

อัตราผิดพลาดระดับตัวอักษร (%) ยิ่งต่ำยิ่งดี ที่ความหน่วง 560 ms เราถอดเสียงทุกโมเดลเองด้วยสคริปต์สตรีมมิงของ NeMo ชุดเดียวกันและค่าตั้งเดียวกัน ทั้ง Typhoon ASR Streaming 0.6B ตามที่เผยแพร่ และแบบที่ใช้โมเดลภาษา 4-gram ที่ผู้พัฒนาเผยแพร่คู่กัน

ชุดทดสอบคลิปOpenThai 2.0 ASR StreamingTyphoon ASR Streaming 0.6BTyphoon ASR Streaming 0.6B + โมเดลภาษา 4-gramผลต่าง ของเรา − Typhoon
FLEURS เสียงอ่าน1,0218.4711.2811.73−2.82 [−3.15, −2.48], ของเราต่ำกว่า
GigaSpeech2 ชุดทดสอบ จาก YouTube8,82315.3516.3316.62−0.98 [−1.31, −0.58], ของเราต่ำกว่า
TVSpeech รายการทีวีและ YouTube57012.4110.8411.05+1.57 [+0.90, +2.52], Typhoon ต่ำกว่า
LOTUSDIS การประชุม ไมโครโฟนกลางโต๊ะ5,51620.7728.9129.02−8.15 [−8.88, −7.46], ของเราต่ำกว่า
ภาษาถิ่นอีสาน50034.9034.1535.79+0.75 [−0.21, +1.69], เสมอ
  • ก่อนให้คะแนน ข้อความทั้งสองฝั่งถูกเขียนให้อยู่ในรูปเดียวกัน คือทำตัวเลขให้ตรงกัน และตัดช่องว่างกับเครื่องหมายวรรคตอนออก ผลต่างคือของเราลบ Typhoon ASR Streaming 0.6B พร้อมช่วงความเชื่อมั่น 95% จาก paired bootstrap ที่สุ่มทั้งวิดีโอ ทั้งไฟล์บันทึก ทั้งผู้พูด หรือทั้งการประชุม ช่วงที่คร่อมศูนย์ถือว่าเสมอกัน ตัวหนาคือค่าผิดพลาดที่ต่ำกว่าอีกโมเดลด้วยความเชื่อมั่น 95%
  • TVSpeech เป็นชุดทดสอบของ Typhoon ASR Streaming 0.6B เอง LOTUSDIS: เราเทรนด้วยการประชุมอื่นจากห้องและไมโครโฟนชุดเดียวกัน และผู้พูดบางคนอยู่ทั้งสองฝั่ง แถวนี้จึงได้เปรียบฝั่งเรา FLEURS: เราเทรนด้วยชุด train และ dev แต่ไม่ได้ใช้ชุด test ทั้งสองโมเดลเทรนด้วยชุด train ของ GigaSpeech2 เราไม่ได้เทรนด้วยภาษาอีสาน และข้อมูลเทรนที่ Typhoon ASR Streaming 0.6B เผยแพร่ก็ไม่มีภาษาอีสาน
  • ไฟล์ที่เราเผยแพร่ตั้งค่า blank offset ไว้ที่ −1.0 ซึ่งเลือกจากข้อมูลชุดพัฒนา หากทำแบบเดียวกันกับ Typhoon ASR Streaming 0.6B ค่าที่ดีที่สุดบนข้อมูลชุดพัฒนาเดียวกันคือ -2.0 และค่าผิดพลาดจะเป็น FLEURS เสียงอ่าน 11.63, GigaSpeech2 ชุดทดสอบ จาก YouTube 15.26, TVSpeech รายการทีวีและ YouTube 10.68, LOTUSDIS การประชุม ไมโครโฟนกลางโต๊ะ 26.71, ภาษาถิ่นอีสาน 33.87

สรุปคือ ที่ความหน่วง 560 ms โมเดลนี้ผิดพลาดน้อยกว่า Typhoon ASR Streaming 0.6B กับเสียงอ่าน (FLEURS 8.47% เทียบกับ 11.28%) คลิปจาก YouTube (GigaSpeech2 15.35% เทียบกับ 16.33%) และการประชุม (LOTUSDIS ซึ่งเป็นชุดที่ได้เปรียบฝั่งเรา) แต่ผิดพลาดมากกว่ากับรายการทอล์กทางทีวี (TVSpeech 12.41% เทียบกับ 10.84%) และเสมอกันกับภาษาถิ่นอีสาน ไฟล์เสียงยาวควรตัดเป็นท่อนตามช่วงหยุดก่อนถอด แบบที่เซิร์ฟเวอร์ที่แนบมาทำ แท็บ "เสียงยาวทั้งไฟล์" แสดงเหตุผล

วิธีรัน​

ติดตั้ง NVIDIA NeMo (Speech) ตามที่การ์ดโมเดลอธิบาย แล้วถอดรายการไฟล์ 16 kHz โมโนด้วยสคริปต์สตรีมมิงของ NeMo ตัวเลขทุกตัวในหน้านี้วัดด้วยวิธีนี้

hf download iapp/OpenThai2.0-ASR-Streaming --local-dir OpenThai2.0-ASR-Streaming
echo '{"audio_filepath": "a.wav", "duration": 8.8, "text": ""}' > in.jsonl
python <NeMo Speech>/examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py \
model_path=OpenThai2.0-ASR-Streaming/openthai2.0-asr-streaming_bias-1.0.nemo \
dataset_manifest=in.jsonl output_path=out att_context_size="[56,6]" \
target_lang=th-TH strip_lang_tags=true rnnt_decoding.greedy.max_symbols_per_step=2

att_context_size กำหนดความหน่วง: [56,0] 80 ms, [56,3] 320 ms, [56,6] 560 ms, [56,13] 1120 ms และ target_lang=th-mix เขียนคำภาษาอังกฤษเป็นอักษรละติน

ทดสอบกับ NeMo Speech cf724ac, PyTorch 2.13 และ Python 3.12

หากต้องการบริการที่โฮสต์ให้ OpenThai ASR Realtime ให้บริการโมเดลนี้ผ่าน WebSocket API และ Chinda ASR Pro v2 คือบริการของ iApp ที่แม่นกว่าสำหรับไฟล์บันทึกเสียง

ข้อจำกัด​

  • เสียงยาว หากถอดทั้งไฟล์ต่อเนื่องในรอบเดียว โมเดลจะตกหล่นคำหลังช่วงที่เงียบ วิดีโอของ TVSpeech ที่ต่อคลิปใหม่โดยคั่นด้วยความเงียบหนึ่งวินาที ได้ค่าผิดพลาด 23.54% เมื่อถอดต่อเนื่อง และ 12.66% เมื่อตัดตามช่วงหยุด เซิร์ฟเวอร์ที่แนบมาตัดตามช่วงหยุดให้อัตโนมัติ
  • รายการทอล์กทางทีวีและ YouTube Typhoon ASR Streaming 0.6B แม่นยำกว่าบน TVSpeech ส่วนหนึ่งของช่องว่างมาจากเสียงลังเลอย่าง เอ่อ ซึ่งคำถอดความของ TVSpeech เก็บไว้แต่โมเดลนี้ตัดออก ที่เหลือส่วนใหญ่เป็นคำภาษาอังกฤษ
  • คำภาษาอังกฤษ เมื่อใช้ th-TH คำเหล่านี้จะออกมาเป็นอักษรไทย เมื่อใช้ th-mix คำภาษาอังกฤษใน TVSpeech ออกมาเป็นอักษรละติน 13.7% เทียบกับ 16.1% ของ Typhoon ASR Streaming 0.6B
  • ภาษาถิ่น รองรับเฉพาะภาษาไทยกลาง กับภาษาอีสานผิดพลาด 34.9% ของตัวอักษร ใกล้เคียงกับ Typhoon ASR Streaming 0.6B
  • ระยะห่างจากไมโครโฟน ในการประชุมของ LOTUSDIS ที่ 1120 ms ไมโครโฟนกลางโต๊ะผิดพลาด 20.3% ส่วนช่องไกล bt3m และ bt10m ผิดพลาด 56.5% และ 53.5%
  • ยังไม่ได้วัด: เสียงโทรศัพท์ (8 kHz) ยังไม่มี: การเพิ่มคำศัพท์เฉพาะสำหรับชื่อ

การเทรน​

เสียงพูดภาษาไทย 12,373 ชั่วโมง และภาษาอังกฤษ 961 ชั่วโมง ในส่วนภาษาไทย 10,400 ชั่วโมงเป็นเสียงจาก YouTube ในชุด train ของ GigaSpeech2 พร้อมคำถอดความอัตโนมัติของชุดนั้น ที่เหลือถอดความโดยคน ได้แก่ Thai Dialect Corpus (เฉพาะภาษากลาง) เสียงที่ iApp บันทึกเอง Common Voice, WanJuan-SiLu, THAI SER, LOTUSDIS, ชุดข้อมูล Som TTS, LOTUS และ TSync ของ NECTEC, Thai Elderly Speech, Gowajee และชุด train ของ FLEURS เราขยาย tokenizer ของ NVIDIA ด้วยหน่วยคำภาษาไทย เทรน decoder ใหม่บนคำศัพท์ชุดนั้น โดยเริ่มจาก encoder ของ NVIDIA เทรนทั้งหมด 115,000 ขั้น เห็นเสียงรวมราว 30,700 ชั่วโมง ค่าตั้งทุกค่า รวมถึง blank offset ที่เก็บไว้ในไฟล์ที่เผยแพร่ เลือกจากข้อมูลชุดพัฒนา และไม่มีคลิปใดจากชุดทดสอบข้างต้นถูกใช้เทรน แหล่งข้อมูล จำนวนชั่วโมง และสูตรการเทรนอยู่ในการ์ดโมเดล

สัญญาอนุญาต​

OpenMDW License Agreement เวอร์ชัน 1.1 ตามโมเดลฐาน OpenThai 2.0 ASR Streaming คือโมเดลที่ปรับจูนภาษาไทยจาก NVIDIA Nemotron 3.5 ASR Streaming 0.6B สัญญาอนุญาตและการ์ดโมเดลต้นฉบับของ NVIDIA อยู่ในรีโพโดยไม่แก้ไข

Built on NVIDIA Nemotron.

พัฒนาโดย iApp Technology เทรนและทดสอบบน GPU NVIDIA H100 ที่สนับสนุนโดย Siam AI Corporation

Siam AI Corporation