- Khung nhận dạng giọng nói thời gian thực thực hiện toàn bộ xử lý ngay trên thiết bị
- Thông qua kiến trúc mô hình dựa trên streaming, hệ thống tạo văn bản theo thời gian thực ngay cả khi người dùng đang nói, đồng thời đạt tỷ lệ lỗi thấp hơn Whisper Large v3 (WER 6.65%)
- Hoạt động với cùng một API trên nhiều nền tảng như Python, iOS, Android, MacOS, Linux, Windows, Raspberry Pi, được tối ưu dựa trên lõi C++ và OnnxRuntime
- Bao gồm các mô hình theo từng ngôn ngữ (tiếng Anh, tiếng Hàn, tiếng Nhật, tiếng Tây Ban Nha, v.v.) và tính năng nhận diện lệnh (Intent Recognition), giúp nhà phát triển dễ dàng xây dựng giao diện giọng nói
- Khắc phục đầu vào cố định 30 giây, thiếu bộ nhớ đệm và giới hạn độ chính xác theo ngôn ngữ của Whisper, nên đang được chú ý như một lựa chọn thay thế phù hợp để triển khai giao diện giọng nói độ trễ thấp trong môi trường biên
Tổng quan về Moonshine Voice
- Moonshine Voice là bộ công cụ AI mã nguồn mở để phát triển ứng dụng giọng nói thời gian thực
- Mọi phép tính đều được thực hiện trên thiết bị cục bộ, đảm bảo phản hồi nhanh và bảo vệ quyền riêng tư
- Nhờ xử lý streaming, văn bản có thể được cập nhật ngay cả khi người dùng đang nói
- Mô hình được xây dựng từ kiến trúc huấn luyện từ đầu dựa trên nghiên cứu nội bộ, mang lại độ chính xác cao hơn Whisper Large v3
- Cung cấp nhiều kích thước, từ mô hình siêu nhỏ 26MB đến mô hình tầm trung 245M tham số
- Hỗ trợ đa ngôn ngữ như tiếng Anh, tiếng Hàn, tiếng Nhật, tiếng Trung, tiếng Tây Ban Nha, tiếng Việt, tiếng Ả Rập, tiếng Ukraina
Những cải tiến chính so với Whisper
- Loại bỏ cửa sổ đầu vào cố định 30 giây của Whisper để hỗ trợ đầu vào có độ dài linh hoạt
- Bổ sung chức năng caching để giảm tính toán lặp lại trong lúc streaming và rút ngắn đáng kể độ trễ (latency)
- Huấn luyện mô hình đơn theo từng ngôn ngữ để đạt độ chính xác cao hơn ở cùng kích thước
- Thông qua thư viện lõi C++ đa nền tảng, có thể dùng cùng một API trong Python, Swift, Java, v.v.
- Với mô hình 245M tham số nhỏ hơn Whisper Large v3 (1.5B tham số), vẫn đạt tỷ lệ lỗi thấp hơn
Tính năng chính và cấu trúc API
- Tích hợp toàn bộ pipeline nhận dạng giọng nói vào một thư viện duy nhất để xử lý đồng bộ đầu vào microphone, phát hiện giọng nói (VAD), chuyển đổi thành văn bản, nhận diện người nói, nhận diện lệnh
- Các lớp cốt lõi:
- Transcriber: chuyển đầu vào âm thanh thành văn bản
- MicTranscriber: tự động xử lý đầu vào từ microphone
- IntentRecognizer: nhận diện lệnh dựa trên ngôn ngữ tự nhiên
- Kiến trúc hướng sự kiện cho phép phát hiện theo thời gian thực các thay đổi trạng thái như LineStarted / LineUpdated / LineCompleted
Mô hình và hiệu năng
- Moonshine Medium Streaming (245M): WER 6.65%, tốt hơn Whisper Large v3 (7.44%)
- Moonshine Small Streaming (123M): WER 7.84%
- Moonshine Tiny Streaming (34M): WER 12.00%
- Mô hình Tiny tiếng Hàn được đánh giá với WER 6.46%
- Tất cả mô hình đều được cung cấp ở định dạng .ort dựa trên OnnxRuntime và được tinh gọn bằng lượng tử hóa 8-bit
Phát triển và triển khai
- Có thể cài đặt trên các môi trường chính như Python (pip install moonshine-voice), Swift (SPM), Android (Maven), Windows (header C++)
- Cung cấp gói tối ưu cho Raspberry Pi, hỗ trợ nhận dạng thời gian thực bằng micro USB
- Phát hành theo giấy phép MIT (mô hình tiếng Anh) và Moonshine Community License (các mô hình ngôn ngữ khác)
- Lộ trình sắp tới: giảm nhẹ binary cho di động, bổ sung ngôn ngữ, cải thiện nhận diện người nói, tùy biến theo miền
Benchmark và ứng dụng
- Tốc độ xử lý nhanh hơn hơn 5 lần so với Whisper, phù hợp cho giao diện giọng nói thời gian thực
- Được thiết kế với mục tiêu độ trễ phản hồi dưới 200ms, nên có thể ứng dụng vào các ứng dụng hội thoại
- Thông qua ví dụ nhận diện lệnh, hệ thống có thể hiểu cả các biến thể lệnh ngôn ngữ tự nhiên như “Turn on the lights”
- Đã hoàn tất kiểm chứng hiệu năng công khai trên HuggingFace OpenASR Leaderboard
1 bình luận
Ý kiến trên Hacker News
Theo OpenASR Leaderboard, Parakeet V2/V3 và Canary-Qwen (phiên bản fine-tune của Qwen) cho hiệu năng tốt hơn Moonshine
Cả ba mô hình đều là mã nguồn mở, nhưng Parakeet là mô hình nhỏ nhất
Tôi đang dùng Parakeet V3 cục bộ cùng Handy, và nó hoạt động rất tốt
Vì vậy tôi nghĩ rất khó để so sánh trực tiếp
Việc leaderboard không có thông tin về kích thước mô hình khá bất ngờ
Ngay cả bài này tôi cũng đang vừa nói vừa viết bằng Handy
Tính năng tự động xử lý dấu câu cũng hoàn hảo, và vì nó chuyển giọng nói thành văn bản ngay trên máy nên tiện hơn Google Docs rất nhiều
Trước đây tôi còn cài cả trình duyệt Orion để dùng nhập liệu giọng nói dựa trên Chrome, nhưng giờ chỉ cần Handy là đủ
Tốc độ gõ của tôi từng là 100~120 WPM, nhưng cái này còn nhanh hơn
Thật sự là một công cụ nâng cao chất lượng cuộc sống
Khi dùng codex-cli và Handy cùng lúc trên macOS, phím tắt mặc định (Option+Space) có vấn đề là chèn khoảng trắng giữa lúc đang nói
Thay vào đó, tổ hợp Left Ctrl + Fn hoạt động gọn gàng
Tôi tò mò người khác đang dùng phím tắt nào
Dùng thử trực tiếp thấy thật sự xuất sắc
Từ giờ tôi định dùng nó làm ứng dụng mặc định cho mọi công việc với khách hàng
Chúc mừng kết quả này
Cá nhân tôi thấy tính năng streaming là điều thú vị nhất
Tôi đã làm một ứng dụng dictation cho macOS là LocalVoxtral dựa trên Voxtral Realtime, và khác biệt UX giữa streaming và STT offline là cực lớn
Khi từ ngữ hiện ra ngay trong lúc đang nói, vòng phản hồi thay đổi hoàn toàn
Có thể bắt lỗi theo thời gian thực và chỉnh câu ngay lúc đó nên tự nhiên hơn rất nhiều
Tôi muốn biết độ trễ streaming (latency) của Moonshine trên thực tế là bao nhiêu
Ngoài ra cũng muốn biết liệu có WebSocket endpoint tương thích với OpenAI Realtime hay không
Lý do tôi chọn Moonshine làm mặc định là vì nó cân bằng độ chính xác và độ trễ tốt nhất
Trong tương lai tôi dự định bổ sung benchmark khách quan để so sánh nhiều mô hình trên cùng một dữ liệu âm thanh
Tôi cũng có một WebSocket server tùy biến (rift-local) được làm dựa trên tham khảo Sherpa-onnx API
Nó được tối ưu cho một kết nối đơn nên không phù hợp với nhiều kết nối
Tôi đã giúp nhiều streamer trên Twitch thêm tính năng chép lời và dịch vào stream thông qua obs-localvocal
Chủ yếu là để chuyển giọng nói tiếng Đức thành phụ đề tiếng Anh
Cần một lựa chọn thay thế nhanh và chính xác hơn Whisper, nhưng các streamer lại thích dạng plugin OBS cài đặt sẵn
Moonshine không có tính năng dịch, và cũng không hỗ trợ tự động phát hiện đa ngôn ngữ, nên có hạn chế với các streamer thường xuyên code-switching
Sẽ lý tưởng nếu có tính năng tự động phát hiện ngôn ngữ rồi chuyển mô hình tương ứng
Việc tuyên bố độ chính xác cao hơn Whisper Large v3 là một bước đi táo bạo
Tôi muốn biết khi đánh giá có tính đến vấn đề vòng lặp ảo giác (hallucination loop) của Whisper hay chưa
Ngoài ra cũng muốn biết mức dùng VRAM khi triển khai trên edge device có phù hợp với máy Mac 8GB hay không
Nếu chạy được mà không cần lượng tử hóa thì khá có ý nghĩa
Trong môi trường streaming, độ ổn định của kết quả từng phần (partial stability) quan trọng hơn WER đơn thuần
Với trợ lý giọng nói, nếu bản chép từng phần thay đổi mỗi vài trăm ms thì UX sẽ bị phá hỏng
Nếu có các chỉ số như độ trễ token đầu tiên, tỷ lệ thời gian thực, tỷ lệ token bị sửa sau 1 giây/3 giây thì việc so sánh sẽ thực tế hơn nhiều
Nếu các con số này tốt thì nó rất hứa hẹn cho pipeline trợ lý local
Bản thân tôi cũng có trải nghiệm vừa nói vừa diễn giải lại trong đầu, và có vẻ điều này xảy ra khá thường xuyên một cách vô thức
Nếu vậy thì có thể tỷ lệ này cũng không nhất thiết phải quá thấp
Các ngôn ngữ hiện được hỗ trợ là tiếng Anh, tiếng Ả Rập, tiếng Nhật, tiếng Hàn, tiếng Trung, tiếng Tây Ban Nha, tiếng Ukraina và tiếng Việt, phần lớn ở kích thước Base (58M tham số)
Tôi không hiểu vì sao trong hướng dẫn cài đặt cho Raspberry Pi lại khuyến nghị
'sudo pip install --break-system-packages moonshine-voice'Tuy vậy, tài liệu cũng đưa ra phương án thay thế dùng uv
Nếu dùng uv run thì không cần phải chạy riêng lệnh source
Không rõ “cải thiện độ chính xác” là theo tiêu chí tiếng Anh hay đa ngôn ngữ
Ít nhất cần có bảng WER theo từng ngôn ngữ thì mới có thể so sánh
Tôi tò mò liệu có kế hoạch hỗ trợ JavaScript trên trình duyệt hay không
Trước đây từng có demo nhưng giờ đã biến mất
Nó từng chạy được ở local, nhưng đến một lúc nào đó lại hỏng mà không rõ lý do
Ngoài ra còn có tài liệu so sánh tổng hợp các giải pháp chép lời offline trong trình duyệt
Cũng tồn tại một demo Moonshine riêng dựa trên transformers.js (dùng WebGPU, có fallback sang WASM)
Nếu muốn thử Moonshine bằng GUI trên trình duyệt, có thể chạy lệnh dưới đây
Cách này sẽ mở RIFT, một frontend web cho chép lời cục bộ, và còn có nút sao chép
Cũng có thể so sánh với Web Speech API và các mô hình khác (bao gồm cả cloud API)
Liên kết liên quan: rift-local, demo RIFT