10 คะแนน โดย GN⁺ 2026-03-01 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เฟรมเวิร์กรู้จำเสียงพูดแบบเรียลไทม์ที่ประมวลผลทั้งหมดบนอุปกรณ์
  • ด้วย สถาปัตยกรรมโมเดลแบบสตรีมมิง จึงสร้างข้อความได้แบบเรียลไทม์แม้ขณะที่ผู้ใช้กำลังพูด และทำ อัตราคำผิดพลาดต่ำกว่า Whisper Large v3 (WER 6.65%)
  • ทำงานด้วย API เดียวกันบนหลายแพลตฟอร์ม เช่น Python, iOS, Android, MacOS, Linux, Windows, Raspberry Pi และปรับแต่งประสิทธิภาพบนพื้นฐานของ C++ core และ OnnxRuntime
  • มีทั้ง โมเดลแยกตามภาษา (อังกฤษ, เกาหลี, ญี่ปุ่น, สเปน ฯลฯ) และฟีเจอร์ รู้จำคำสั่ง (Intent Recognition) ช่วยให้นักพัฒนาสร้างอินเทอร์เฟซเสียงได้ง่าย
  • ปรับปรุงข้อจำกัดของ Whisper เรื่องอินพุตคงที่ 30 วินาที การไม่มีแคช และข้อจำกัดด้านความแม่นยำรายภาษา ทำให้เป็นทางเลือกที่น่าสนใจสำหรับ การสร้างอินเทอร์เฟซเสียงหน่วงต่ำในสภาพแวดล้อมเอดจ์

ภาพรวม Moonshine Voice

  • Moonshine Voice คือ AI toolkit โอเพนซอร์สสำหรับพัฒนาแอปพลิเคชันเสียงแบบเรียลไทม์
    • การประมวลผลทั้งหมดทำบน อุปกรณ์ภายในเครื่อง ทำให้ตอบสนองเร็วและคุ้มครองความเป็นส่วนตัว
    • ด้วย การประมวลผลแบบสตรีมมิง จึงอัปเดตข้อความได้แม้ขณะผู้ใช้กำลังพูด
  • โมเดลพัฒนาจากงานวิจัยภายใน เป็น สถาปัตยกรรมที่ฝึกใหม่ตั้งแต่ต้น และให้ ความแม่นยำสูงกว่า Whisper Large v3
  • มีหลายขนาดตั้งแต่ โมเดลขนาดจิ๋ว 26MB ไปจนถึงโมเดลขนาดกลาง 245M พารามิเตอร์
  • รองรับหลายภาษา เช่น อังกฤษ, เกาหลี, ญี่ปุ่น, จีน, สเปน, เวียดนาม, อาหรับ, ยูเครน

จุดปรับปรุงสำคัญเมื่อเทียบกับ Whisper

  • ตัดข้อจำกัด หน้าต่างอินพุตคงที่ 30 วินาที ของ Whisper ออก เพื่อรองรับ อินพุตความยาวแปรผัน
  • เพิ่ม ฟังก์ชันแคช เพื่อลดการคำนวณซ้ำระหว่างสตรีมมิง และ ลด latency ลงอย่างมาก
  • ใช้ การฝึกโมเดลเดี่ยวแยกตามภาษา เพื่อให้ได้ความแม่นยำสูงกว่าสำหรับขนาดโมเดลเท่ากัน
  • ผ่าน ไลบรารี C++ core แบบข้ามแพลตฟอร์ม ทำให้ใช้ API เดียวกันได้จาก Python, Swift, Java เป็นต้น
  • ใช้ โมเดล 245M พารามิเตอร์ ที่เล็กกว่า Whisper Large v3 (1.5B พารามิเตอร์) แต่ทำอัตราคำผิดพลาดได้ต่ำกว่า

ฟีเจอร์หลักและโครงสร้าง API

  • รวมไปป์ไลน์รู้จำเสียงไว้ในไลบรารีเดียว เพื่อจัดการ อินพุตไมโครโฟน, การตรวจจับเสียงพูด (VAD), การแปลงเป็นข้อความ, การระบุผู้พูด, การรู้จำคำสั่ง ได้แบบครบชุด
  • คลาสหลัก:
    • Transcriber: แปลงอินพุตเสียงเป็นข้อความ
    • MicTranscriber: จัดการอินพุตจากไมโครโฟนโดยอัตโนมัติ
    • IntentRecognizer: รู้จำคำสั่งจากภาษาธรรมชาติ
  • โครงสร้างแบบ event-driven ที่ตรวจจับการเปลี่ยนสถานะแบบเรียลไทม์ได้ เช่น LineStarted / LineUpdated / LineCompleted

โมเดลและประสิทธิภาพ

  • Moonshine Medium Streaming (245M): WER 6.65%, ดีกว่า Whisper Large v3 (7.44%)
  • Moonshine Small Streaming (123M): WER 7.84%
  • Moonshine Tiny Streaming (34M): WER 12.00%
  • โมเดล Tiny ภาษาเกาหลี ประเมินได้ WER 6.46%
  • ทุกโมเดลเผยแพร่ในรูปแบบ .ort ที่อิง OnnxRuntime และทำให้มีขนาดเบาด้วย การควอนไทซ์ 8 บิต

การพัฒนาและการเผยแพร่ใช้งาน

  • ติดตั้งได้ในสภาพแวดล้อมหลัก เช่น Python (pip install moonshine-voice), Swift (SPM), Android (Maven), Windows (C++ header)
  • มี แพ็กเกจที่ปรับแต่งสำหรับ Raspberry Pi รองรับการรู้จำแบบเรียลไทม์ด้วย USB ไมโครโฟน
  • เผยแพร่ภายใต้ MIT License (โมเดลภาษาอังกฤษ) และ Moonshine Community License (โมเดลภาษาอื่น)
  • โรดแมปในอนาคต: ลดขนาดไบนารีสำหรับมือถือ, เพิ่มภาษา, ปรับปรุงการระบุผู้พูด, การคัสตอมตามโดเมน

เบนช์มาร์กและการใช้งาน

  • ประมวลผลเร็วกว่า Whisper มากกว่า 5 เท่า จึงเหมาะกับอินเทอร์เฟซเสียงแบบเรียลไทม์
  • ออกแบบโดยตั้งเป้า เวลาหน่วงตอบสนองต่ำกว่า 200ms จึงนำไปใช้กับแอปพลิเคชันเชิงสนทนาได้
  • ผ่าน ตัวอย่างการรู้จำคำสั่ง สามารถรู้จำคำสั่งภาษาธรรมชาติที่แปรรูปได้ เช่น “Turn on the lights”
  • ผ่านการตรวจสอบประสิทธิภาพแบบสาธารณะแล้วบน HuggingFace OpenASR Leaderboard

1 ความคิดเห็น

 
GN⁺ 2026-03-01
ความคิดเห็นจาก Hacker News
  • ตาม OpenASR Leaderboard แล้ว Parakeet V2/V3 และ Canary-Qwen (เวอร์ชันที่ fine-tune จาก Qwen) ทำผลงานได้ดีกว่า Moonshine
    ทั้งสามโมเดลเป็นโอเพนซอร์สทั้งหมด แต่ Parakeet เป็น โมเดลที่เล็กที่สุด
    ฉันใช้งาน Parakeet V3 แบบโลคัลร่วมกับ Handy อยู่ และมันทำงานได้ดีมาก

    • Parakeet V3 มี จำนวนพารามิเตอร์มากกว่า 2 เท่า (600M) เมื่อเทียบกับ Moonshine Medium (245M)
      เลยคิดว่าเทียบกันตรง ๆ คงยาก
      น่าแปลกที่ลีดเดอร์บอร์ดไม่มีข้อมูลขนาดโมเดล
    • เพิ่งลองใช้ Handy ไปเมื่อกี้ บอกเลยว่าน่าทึ่งมาก
      แม้แต่โพสต์นี้ก็กำลังพูดเขียนผ่าน Handy อยู่
      การใส่เครื่องหมายวรรคตอนอัตโนมัติ ก็สมบูรณ์มาก และการแปลงเสียงเป็นข้อความแบบโลคัลทำได้สะดวกกว่า Google Docs มาก
      เมื่อก่อนถึงขั้นลง Orion browser เพื่อใช้พิมพ์ด้วยเสียงที่อิง Chrome แต่ตอนนี้มีแค่ Handy ก็พอแล้ว
      ปกติพิมพ์ได้ 100~120 WPM แต่นี่เร็วกว่านั้นอีก
      เป็น เครื่องมือที่ยกระดับคุณภาพชีวิต จริง ๆ
    • ฉันกำลังพัฒนาแอปถอดเสียงบน iOS ที่เน้น local-first และกำลังจะเปลี่ยนจาก Whisper Medium ไปใช้ Parakeet V3
      ตอนใช้ codex-cli กับ Handy พร้อมกันบน macOS คีย์ลัดเริ่มต้น (Option+Space) จะมีปัญหาแทรกช่องว่างกลางคำพูด
      แต่ถ้าใช้ชุด Left Ctrl + Fn จะทำงานได้เรียบร้อย
      เลยอยากรู้ว่าคนอื่นใช้คีย์ลัดอะไรกัน
    • ฉันใช้โมเดล WhisperX มาตลอด และเพิ่งรู้จัก Handy เป็นครั้งแรก
      พอลองเองแล้วมันยอดเยี่ยมจริง ๆ
      ต่อจากนี้คงใช้เป็น แอปหลัก สำหรับงานฝั่งลูกค้าทั้งหมด
    • Handy เป็น แอปคุณภาพสูง จริง ๆ
  • ขอแสดงความยินดีกับผลลัพธ์นี้
    ส่วนตัวคิดว่า ฟีเจอร์สตรีมมิง น่าสนใจที่สุด
    ฉันทำแอปรับคำบอกบน macOS ชื่อ LocalVoxtral ที่อิงกับ Voxtral Realtime และ UX ระหว่างแบบสตรีมมิงกับ STT ออฟไลน์ต่างกันมาก
    ถ้าคำขึ้นมาทันทีตอนกำลังพูด วงจร feedback จะเปลี่ยนไปเลย
    สามารถจับข้อผิดพลาดและแก้ประโยคได้แบบเรียลไทม์ จึงเป็นธรรมชาติกว่ามาก
    เลยอยากรู้ว่า latency ของการสตรีม ใน Moonshine อยู่ที่ประมาณเท่าไรในทางปฏิบัติ
    แล้วก็อยากรู้ว่ามี WebSocket endpoint ที่เข้ากันได้กับ OpenAI Realtime หรือไม่

    • แอปของฉันใช้ Python package moonshine-voice
      เหตุผลที่ตั้ง Moonshine เป็นค่าเริ่มต้นก็เพราะมันให้ สมดุลระหว่างความแม่นยำกับ latency ได้ดีที่สุด
      ต่อไปมีแผนจะเพิ่ม benchmark แบบเป็นกลาง ที่เปรียบเทียบหลายโมเดลด้วยข้อมูลเสียงชุดเดียวกัน
      และยังมี custom WebSocket server (rift-local) ที่ทำโดยอ้างอิง Sherpa-onnx API ด้วย
      มันถูกปรับให้เหมาะกับการเชื่อมต่อเดี่ยว จึงไม่ค่อยเหมาะกับหลายการเชื่อมต่อพร้อมกัน
  • ฉันเคยช่วยให้ Twitch streamer หลายคนเพิ่ม ฟีเจอร์ถอดเสียงและแปลภาษา ลงในสตรีมผ่าน obs-localvocal
    ส่วนใหญ่ใช้เพื่อแปลงเสียงพูดภาษาเยอรมันเป็นซับไตเติลภาษาอังกฤษ
    ต้องการทางเลือกที่เร็วและแม่นยำกว่า Whisper แต่เหล่าสตรีมเมอร์ชอบรูปแบบปลั๊กอิน OBS ที่ติดตั้งได้มากกว่า
    Moonshine ไม่มีฟีเจอร์แปลภาษา และยังไม่รองรับ การตรวจจับหลายภาษาอัตโนมัติ จึงมีข้อจำกัดสำหรับสตรีมเมอร์ที่สลับภาษาอยู่บ่อย ๆ
    ถ้ามีฟังก์ชันตรวจจับภาษาอัตโนมัติแล้วสลับโมเดลให้ได้ก็น่าจะเหมาะมาก

  • การอ้างว่าแม่นยำกว่า Whisper Large v3 ถือเป็น การเคลมที่กล้าพอสมควร
    เลยสงสัยว่าตอนประเมินผลได้คำนึงถึงปัญหา hallucination loop ของ Whisper หรือไม่
    และสำหรับการ deploy บนอุปกรณ์ edge ก็อยากรู้ว่าการใช้ VRAM อยู่ในระดับที่เหมาะกับ Mac 8GB หรือเปล่า
    ถ้ารันได้โดยไม่ต้อง quantization ก็มีความหมายมากทีเดียว

  • ในสภาพแวดล้อมแบบสตรีมมิง partial stability สำคัญกว่า WER ล้วน ๆ
    สำหรับผู้ช่วยเสียง ถ้าข้อความถอดเสียงบางส่วนเปลี่ยนทุก ๆ ไม่กี่ร้อย ms UX จะพังทันที
    ถ้ามีตัวชี้วัดอย่าง เวลาได้โทเคนแรก, real-time factor, อัตราส่วนโทเคนที่ถูกแก้หลังผ่านไป 1 วินาที/3 วินาที ก็จะทำให้การเปรียบเทียบใช้งานจริงมากขึ้นมาก
    ถ้าตัวเลขเหล่านี้ดี มันก็ดูมีอนาคตมากสำหรับ local assistant pipeline

    • ก็สงสัยเหมือนกันว่ามนุษย์เองมีสิ่งที่เรียกว่า ‘อัตราการแก้ไขบางส่วน’ หรือไม่
      เวลาพูดฉันเองก็มีประสบการณ์ ย้อนกลับไปตีความใหม่ เหมือนกัน และน่าจะเกิดขึ้นบ่อยแบบไม่รู้ตัว
      ถ้าอย่างนั้นอัตรานี้อาจไม่จำเป็นต้องต่ำมากก็ได้
  • ภาษาที่รองรับตอนนี้คือ อังกฤษ อาหรับ ญี่ปุ่น เกาหลี จีน สเปน ยูเครน และเวียดนาม โดยส่วนใหญ่เป็นขนาด Base (58M พารามิเตอร์)

  • ไม่เข้าใจว่าทำไมในคู่มือติดตั้ง Raspberry Pi ถึงแนะนำ 'sudo pip install --break-system-packages moonshine-voice'
    แต่ในเอกสารก็มีทางเลือกโดยใช้ uv เหมือนกัน
    ถ้าใช้ uv run ก็ไม่จำเป็นต้องรันคำสั่ง source แยก

  • ยังไม่ชัดเจนว่า “ความแม่นยำที่ดีขึ้น” หมายถึงสำหรับภาษาอังกฤษหรือหลายภาษา
    อย่างน้อยควรมี ตาราง WER แยกตามภาษาเพื่อให้เทียบกันได้

  • อยากรู้ว่ามีแผนรองรับ JavaScript บนเบราว์เซอร์ หรือไม่
    เมื่อก่อนเคยมีเดโม แต่ตอนนี้หายไปแล้ว
    มันเคยทำงานแบบโลคัลได้ แต่ช่วงหนึ่งก็พังไปแบบไม่มีเหตุผลชัดเจน

    • มี พอร์ตแบบ WASM ชื่อ moonshine-js
      และยังมี เอกสารเปรียบเทียบ ที่รวบรวมโซลูชันถอดเสียงออฟไลน์ในเบราว์เซอร์ไว้ด้วย
      นอกจากนี้ยังมีเดโม Moonshine อีกตัวที่สร้างบน transformers.js (ใช้ WebGPU และมี WASM fallback)
  • ถ้าอยากลองใช้ Moonshine ผ่าน GUI บนเบราว์เซอร์ ให้รันคำสั่งด้านล่างได้เลย

    uv tool install rift-local && rift-local serve --open
    

    แล้วมันจะเปิดเว็บฟรอนต์เอนด์สำหรับการถอดเสียงแบบโลคัลชื่อ RIFT ขึ้นมา พร้อมปุ่มคัดลอก
    และยังสามารถเปรียบเทียบกับ Web Speech API และโมเดลอื่น ๆ (รวมถึง cloud API) ได้ด้วย
    ลิงก์ที่เกี่ยวข้อง: rift-local, เดโม RIFT