- transcribe.cpp là thư viện dựa trên ggml được tạo ra để dễ dàng nhúng nhiều mô hình nhận dạng giọng nói hiện đại vào ứng dụng Mac·Windows·Linux và tăng tốc bằng GPU
- Chạy 16 họ ASR·hơn 60 mô hình trên Vulkan·Metal·CUDA·TinyBLAS và hỗ trợ cả chép lời theo luồng lẫn chép lời theo lô
- Tất cả mô hình đều được so sánh số liệu với bản triển khai tham chiếu và kiểm thử WER bằng hàng nghìn phát ngôn, đồng thời công bố kết quả xác minh trên kho mã và Hugging Face
- Có thể chạy các tệp
.binhiện có cho whisper.cpp và thay thế với hiệu năng tương đương trong hầu hết trường hợp, đồng thời cung cấp binding chính thức cho Python·JavaScript/TypeScript·Rust·ObjC/Swift - Ngay cả trên RK3566 công suất thấp cũng có thể chép lời nhanh hơn thời gian thực, giúp triển khai ASR cục bộ trên nhiều thiết bị mà không cần gửi giọng nói lên đám mây
Các ràng buộc khi triển khai ASR đa nền tảng
- Các lựa chọn suy luận ASR đa nền tảng hiện có về thực chất gần như chỉ giới hạn ở whisper.cpp và ONNX
- Có thể thêm MLX cho thiết bị Apple, nhưng khi đó phải hỗ trợ hai engine và port mô hình cho từng engine
- ONNX hữu ích để thêm nhanh mô hình vào Handy, nhưng chạy chỉ trên CPU thì khó tận dụng đủ hiệu năng
- Một số thư viện hỗ trợ nhiều mô hình lại không rõ mức độ đầu tư của tác giả, mức độ kiểm thử và kế hoạch bảo trì
- Khó xác nhận liệu có binding để dùng trong ứng dụng desktop·mobile thực tế hay chỉ dừng ở mã demo, có benchmark hay không, và có nhanh hơn ONNX hay không
- Dựa trên kinh nghiệm triển khai nhập liệu giọng nói đa nền tảng của Handy, cần một engine đáp ứng các điều kiện sau
- Phải có thể tải tệp xuống và suy luận ngay
- Phải có thể xác minh chất lượng suy luận tương đương bản triển khai tham chiếu
- Phải chạy được trên GPU để đạt hiệu năng cao nhất
- Phải dễ nhúng vào Handy mà không cần thư viện PyTorch cồng kềnh
- Phải hoạt động trên Mac·Windows·Linux
- ggml được chọn làm nền tảng để hiện thực các yêu cầu này nhờ cộng đồng mạnh và cách triển khai thuận tiện
Mô hình được hỗ trợ và phương thức tăng tốc
- transcribe.cpp hướng tới suy luận nhanh, chính xác và hỗ trợ mô hình rộng
- Hỗ trợ 16 họ ASR và hơn 60 mô hình và dự kiến sẽ bổ sung thêm nhiều mô hình nữa
- Hỗ trợ phần lớn các mô hình chép lời mới nhất đã công khai, dù vẫn còn một số mô hình chưa có
- Cung cấp cả chép lời theo luồng và chép lời theo lô
- Tất cả mô hình được hỗ trợ đều có thể chạy trên các backend tăng tốc sau
- Vulkan
- Metal
- CUDA
- TinyBLAS
- Benchmark theo từng mô hình được thực hiện trên môi trường Fedora với CPU Ryzen 4750U·Vulkan và trên M4 Max
- Hỗ trợ Vulkan được xem là điều kiện tối thiểu để triển khai ứng dụng suy luận cục bộ
Bản triển khai tham chiếu và xác minh độ chính xác
- Từ trải nghiệm khó tin tưởng độ chính xác suy luận của các mô hình
.onnxlấy từ Hugging Face, tác giả đã xác minh số liệu với bản triển khai tham chiếu cho mọi mô hình - Cùng với so sánh số liệu, tác giả chạy kiểm tra WER toàn diện để xác nhận đầu ra có giống bản triển khai tham chiếu hay không
- Mỗi mô hình xử lý hàng nghìn phát ngôn
- Kết quả rất gần hoặc giống hệt bản triển khai tham chiếu
- Dữ liệu xác minh được công bố trên kho mã transcribe.cpp và trên trang từng mô hình trong tổ chức handy-computer trên Hugging Face
Tính tương thích với whisper.cpp
- Để có thể thay thế whisper.cpp đang dùng trong Handy, dự án đã hiện thực mức tương thích gần như thay thế trực tiếp
- Các tệp mô hình
.bindành cho whisper.cpp được phân phối cùng Handy cũng có thể chạy trên transcribe.cpp - Một số cờ và tính năng của whisper.cpp hiện vẫn chưa được hỗ trợ
- Với hầu hết mục đích sử dụng, phần triển khai whisper đã đủ ổn định và có thể thay thế whisper.cpp với hiệu năng gần tương đương
Binding ngôn ngữ và bảo trì
- Được viết bằng C/C++ và cung cấp binding được bảo trì chính thức để triển khai chép lời cục bộ trong nhiều môi trường
- Python
- JavaScript/TypeScript
- Rust
- ObjC/Swift
- Dự án cũng hoan nghênh đóng góp binding cho ngôn ngữ khác, nhưng người đóng góp phải đảm nhận việc bảo trì binding đó
- Các nhu cầu thực tế của Handy đã được phản ánh vào thiết kế thư viện, và dự án có kế hoạch tiếp tục duy trì transcribe.cpp dựa trên kinh nghiệm bảo trì Handy
- Dự án phản ánh kinh nghiệm thu được khi hỗ trợ nhiều mô hình ASR và ca sử dụng thực tế, nhưng vẫn còn những trường hợp chưa xử lý được nên đang nhận đóng góp từ bên ngoài
- Phiên bản hiện tại là v0.1.0, vẫn còn một số phần thô ráp nên dự án mong nhận báo cáo lỗi
ASR cục bộ mở rộng tới cả thiết bị công suất thấp
- Mục tiêu là giúp việc chạy ASR trực tiếp trên thiết bị trở nên dễ dàng hơn, qua đó giảm nhu cầu gửi giọng nói lên dịch vụ đám mây
- Ngay cả trên CPU RK3566 hiệu năng thấp, mô hình vẫn có thể chạy nhanh hơn thời gian thực
- Tốc độ chép lời bằng hoặc vượt thời gian thực với các mô hình mới nhất có thể hoạt động ở mức điện năng chỉ vài watt
- Để xử lý nhiều tác vụ suy luận hơn ở cục bộ, quá trình triển khai và chạy engine suy luận trong ứng dụng cần phải trở nên đơn giản hơn
- transcribe.cpp không thể tự mình giải quyết toàn bộ bài toán triển khai suy luận cục bộ, nhưng được phát triển như một bước giúp hạ thấp rào cản tiếp cận ASR cục bộ
Những hỗ trợ đứng sau dự án
- Mozilla AI, chương trình BiR và Davide của Mozilla AI đã hỗ trợ dự án từ giai đoạn khám phá ban đầu khi sản phẩm còn chưa có hình hài cụ thể
- ggml là nền tảng cốt lõi giúp việc triển khai ứng dụng suy luận cục bộ trở nên khả thi
- Modal đã cung cấp credit dùng cho kiểm thử WER và xác minh CUDA
- Blacksmith hỗ trợ một phần CI/CD để kiểm tra các sản phẩm phát hành
- Hugging Face cung cấp không gian lưu trữ riêng tư cho tổ chức handy-computer để có thể tự do tải mô hình lên
Ứng dụng AI trong quá trình phát triển
- Tác giả nhận thấy một cá nhân khó có thể tự viết từ đầu một engine quy mô như vậy dựa trên ggml chỉ trong vài tháng, nên đã sử dụng hỗ trợ AI trong quá trình phát triển
- Phần giới thiệu dự án không được viết bằng AI mà gồm các câu do tác giả trực tiếp nói hoặc nhập
1 bình luận
Ý kiến từ Hacker News
Trông rất tuyệt. Tuy vậy, tôi không tìm thấy trong tài liệu của mô hình tính năng chuyển âm thanh thành Ký hiệu ngữ âm quốc tế (IPA), thay vì diễn giải nghĩa của một ngôn ngữ chưa được biết đến
Với các ngôn ngữ thiểu số có chưa đến 10.000 người nói, có lẽ sẽ luôn thiếu tài nguyên để huấn luyện mô hình riêng cho từng ngôn ngữ. Nếu có một mô hình chuyển chính âm thanh sang IPA mà không cần nhận diện ngôn ngữ, nó sẽ rất hữu ích cho các nhà ngôn ngữ học nghiên cứu các ngôn ngữ thiểu số trên khắp thế giới
Cũng có rất ít tư liệu được ghi chép lại, nên tôi muốn tự làm một hệ thống dịch như trong Project Hail Mary
Chẳng hạn âm l tối và l sáng trong tiếng Anh (ball/light), hay âm p bật hơi (pin/spin), có thể phân biệt nghĩa trong ngôn ngữ khác nhưng không phải trong tiếng Anh. Tôi tự hỏi liệu các nhà ngôn ngữ học có muốn nhận một bản phiên âm IPA trung thực tối đa rồi tự chuẩn hóa thủ công hay không
Chúc mừng phát hành. Tôi đang dùng Handy rất tốt trên Mac và điện thoại, đặc biệt hữu ích khi nhận diện giọng nói mặc định của Apple nghe sai các thuật ngữ chuyên ngành
Tôi tò mò liệu có thể xin một quỹ hỗ trợ chi phí bảo trì hay không. Nếu muốn được trả công cho loại dự án này, nên tìm tổ chức nào và đề nghị hỗ trợ theo cách nào?
Tôi muốn tiếp tục đóng góp cho mã nguồn mở, nên rất hoan nghênh những nơi ủng hộ điều đó, đặc biệt là các tổ chức tin vào và thúc đẩy mã nguồn mở. Có thể trao đổi chi tiết qua contact@handy.computer
Nhiều hệ thống chuyển giọng nói thành văn bản nhận diện lời nói khá chính xác, nhưng không hỗ trợ đúng quy trình làm việc tôi muốn. Tôi cần mở tài liệu ra, nói, và văn bản phải được nhập liên tục với độ trễ tối thiểu tại vị trí con trỏ
Cách dừng ghi âm rồi dán toàn bộ một lần không hữu ích; điểm mấu chốt là nhập liên tục
Nói hết mọi thứ trong đầu về một chủ đề trong 5–10 phút rồi mới xem lại sẽ hữu ích hơn vì không làm đứt dòng suy nghĩ
Một số ứng dụng còn dùng cả nội dung đang sao chép hoặc đang xem làm ngữ cảnh phiên âm để cải thiện kết quả: https://superwhisper.com/docs/common-issues/context#types-of...
Tôi muốn biết liệu giống Whisper.cpp, có thể đưa ngữ cảnh vào để tăng mạnh độ chính xác hay không
Trong bốn binding ngôn ngữ mà người bảo trì hỗ trợ, bản cho Python nằm ở https://github.com/handy-computer/transcribe.cpp/tree/main/b...
Hiện vẫn chưa có binary wheel PyPI kèm phụ thuộc, và thư viện PyPI hiện tại gọi thư viện được cài riêng qua ctypes, nhưng có vẻ sẽ phát hành trong tương lai
Tôi bắt gặp nó đúng lúc. Gần đây tôi hay nghe nói về việc đưa tổng hợp giọng nói (TTS) vào các công cụ prompt, nên muốn tự thử
Quy trình nói dài các ý tưởng nảy ra trong đầu để tạo thành tài liệu, chỉnh sửa rồi gửi cho AI nghe có vẻ rất hấp dẫn
Đây là một đóng góp khổng lồ cho cộng đồng, và thật đáng ngạc nhiên khi nó được làm bởi một người. Tôi cứ tưởng đến cuối sẽ có thông báo gọi vốn Series A
AI có thể được dùng để nhanh chóng tung ra các sản phẩm chất lượng thấp, nhưng nó cũng cho thấy ta có thể mở rộng tham vọng để làm ra những thứ chặt chẽ và bền vững hơn trước. Thay vì tự nhúng Transcribe.cpp vào từng ứng dụng, tôi nghĩ những khả năng như vậy nên dùng được ở mọi nơi thông qua hệ điều hành hoặc các ứng dụng như Handy
Một ngày nào đó tôi muốn phân phối libtranscribe một cách bài bản để nó trở thành giống như một thư viện hệ thống. Sẽ mất thời gian để ổn định, nhưng tôi tin là có thể
Hoạt động tốt hơn nhiều so với transcribe-rs trước đây. Sau khi cập nhật ứng dụng nhập giọng nói ngoại tuyến để dùng thư viện mới, tốc độ được cải thiện đáng kể: https://github.com/notune/android_transcribe_app
Trong tương lai, suy luận cục bộ sẽ tăng lên vì nhiều lý do, và nhận định rằng để nhiều ứng dụng dùng được hơn thì việc chạy và triển khai phải dễ dàng hơn là rất chính xác
Việc không có từ nào trong bài viết do AI tạo ra mà đều xuất phát từ miệng hoặc ngón tay cũng khiến dự án đáng tin cậy hơn và dễ tiếp cận hơn
Dùng thường xuyên rồi thì sẽ học được những cách sắp xếp từ nào được chép lại chính xác, và điều này trở thành một phần của quá trình tư duy. Theo thời gian, LLM và tư duy đan xen vào nhau, nên kiểu sử dụng AI này cũng có thể thực sự thay đổi câu chữ cuối cùng
Tôi cũng từng gặp vấn đề tương tự khi tìm cách vận hành máy chủ API phiên âm cục bộ. Thứ thiếu nhất là hỗ trợ streaming và hỗ trợ các từ đặc biệt để tăng ưu tiên khi nhận dạng, nên thật mừng vì ở đây có streaming
Sau khi whisper.cpp xuất hiện, tôi đã tự vận hành trên máy chủ 3090 Ti. Dù có giải pháp thay thế nhanh hơn và tốt hơn xuất hiện thì nó vẫn tiếp tục hoạt động ổn định, trọng số nhỏ và đủ nhanh hơn mức cần thiết
Chỉ cần đưa lên home server cục bộ như bên dưới là có thể dễ dàng tạo API phiên âm cục bộ. Các tham số suy luận cần tinh chỉnh đôi chút, nhưng khi đã chốt xong thì hoạt động rất tốt
MODEL="/home/user/projects/ggml-org/whisper.cpp/models/ggml-large-v3-turbo.bin"WHISPER_SERVER_BIN="/home/user/projects/ggml-org/whisper.cpp/build/bin/whisper-server""$WHISPER_SERVER_BIN" --model "$MODEL" --language en --host 127.0.0.1 --port 7812Điều chỉnh trọng số từ nhiều khả năng sẽ chỉ được hỗ trợ muộn hơn khá nhiều, nhưng streaming thì đã có sẵn
Mong ai đó đóng góp một ví dụ máy chủ tốt cho codebase và giúp xử lý các vấn đề, hoặc tạo một máy chủ vững chắc bằng transcribe.cpp hay binding ở ngôn ngữ khác. Khi hoàn thiện, tôi cũng sẵn sàng nối trực tiếp nó vào dự án chính