Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung)
85

Sản phẩm

Ra mắt transcribe.cpp: Thư viện chuyển đổi giọng nói đa nền tảng hỗ trợ hơn 60 mô hình ASR

(giờ Việt Nam)

Tóm tắt AI

transcribe.cpp v0.1.0 là thư viện mã nguồn mở dựa trên ggml, hỗ trợ 16 dòng mô hình ASR với khả năng tăng tốc GPU qua Vulkan, Metal, CUDA và TinyBLAS.

Bản dịch AI

Tôi vô cùng hào hứng khi được chia sẻ transcribe.cpp ngày hôm nay.

transcribe.cpp là một thư viện chuyển đổi giọng nói thành văn bản (transcription) dựa trên ggml, hỗ trợ tất cả các mô hình mới nhất hiện nay. Mọi mô hình được xuất bản dưới tổ chức handy-computer trên HF đều đã được kiểm chứng về mặt số học và kiểm tra WER để đảm bảo khớp với bản triển khai tham chiếu. Nó được tăng tốc trên mọi nền tảng.

Tôi là tác giả và người duy trì Handy. Thư viện này ra đời từ những khó khăn trong việc phân phối một ứng dụng chuyển đổi giọng nói thành văn bản đa nền tảng đến với nhiều người dùng.

Đây là thư viện phiên bản v0.1.0, nghĩa là vẫn còn một số điểm chưa hoàn thiện mà tôi không thể tự mình phát hiện hết! Hãy báo cáo cho tôi biết và chúng ta hãy cùng nhau khắc phục nhé!

Động lực

Hãy để tôi nói thế này. Tôi nghĩ việc phân phối một ứng dụng đa nền tảng với các bộ công cụ suy luận ASR hiện tại là một điều tồi tệ.

Bạn về cơ bản chỉ có whisper.cpp và ONNX. Chỉ vậy thôi. Bạn có thể sử dụng MLX cho các thiết bị Apple, nhưng khi đó bạn lại phải hỗ trợ hai engine khác nhau và chuyển đổi mô hình cho từng loại. Tôi từng là một người hâm mộ ONNX vì nó giúp đưa hỗ trợ mô hình vào Handy một cách nhanh chóng, nhưng hiệu năng lại bị lãng phí rất nhiều khi chỉ chạy trên CPU.

Có một vài thư viện ngẫu nhiên ngoài kia tuyên bố hỗ trợ rất nhiều mô hình, nhưng theo những gì tôi thấy, chúng có tác giả không rõ ràng và quy trình kiểm thử không minh bạch. Chúng để lại cho tôi nhiều câu hỏi hơn là câu trả lời.

Khi nào họ sẽ ngừng duy trì thư viện này? Tác giả đã nghĩ đến việc tạo các binding để bạn có thể thực sự sử dụng nó trong một ứng dụng máy tính hoặc di động thực tế chưa? Đây có thực sự chỉ là mã nguồn demo? Họ đã đo điểm chuẩn (benchmark) chưa? Nó có nhanh hơn ONNX không?

Và đó là điều dẫn đến sự ra đời của transcribe.cpp. Với tư cách là người duy trì Handy, tôi cần một thư viện mà tôi có thể tin tưởng. Nơi tôi có thể tải xuống một tệp và chạy suy luận trên đó. Nơi tôi có thể biết rằng kết quả suy luận từ mô hình trong engine cũng tốt như bản triển khai tham chiếu. Quá trình suy luận phải chạy trên GPU để đạt hiệu suất tốt nhất. Nó phải dễ dàng nhúng vào Handy, không thể là một thư viện pytorch khổng lồ. Nó phải là thứ hoạt động được trên Mac, Windows và Linux. Và ggml dường như là con đường tốt nhất cho đến nay. Nó có một cộng đồng mạnh mẽ và một câu chuyện phân phối tuyệt vời.

Vậy bạn nhận được những gì?

Bạn nhận được một engine suy luận nhanh, chính xác với khả năng hỗ trợ mô hình rộng rãi.

Hỗ trợ mô hình đa dạng

Chúng tôi dự định hỗ trợ càng nhiều mô hình chuyển đổi giọng nói hiện đại nhất càng tốt. Tính đến hôm nay, chúng tôi hỗ trợ hầu hết các mô hình hiện đại đang được công khai. Vẫn còn một vài mô hình chưa được hỗ trợ, nhưng chúng sẽ sớm được bổ sung.

Hỗ trợ tăng tốc

Một trong những mục tiêu hàng đầu của tôi là chạy bất kỳ mô hình ASR nào tôi muốn trên Vulkan. Theo ý kiến của tôi, đây là tiêu chuẩn tối thiểu cho bất kỳ ứng dụng nào cung cấp tính năng suy luận cục bộ. Với mỗi mô hình chúng tôi hỗ trợ, đều có một bài kiểm chuẩn tương ứng chạy trên Ryzen 4750U (CPU + Vulkan) trên Fedora cũng như trên chiếc M4 Max của tôi.

Đã được kiểm chứng về mặt số học

Tôi cũng muốn đảm bảo rằng quá trình suy luận trong transcribe.cpp là chính xác và gần nhất có thể với bản triển khai tham chiếu. Điều này xuất phát từ sự không chắc chắn về độ chính xác của suy luận khi sử dụng các mô hình.onnx mà tôi tìm thấy trên Hugging Face. Để đảm bảo quá trình suy luận của chúng tôi là chính xác, chúng tôi kiểm chứng số học mọi mô hình so với bản tham chiếu. Ngoài việc kiểm chứng số học, chúng tôi chạy các bài kiểm tra WER toàn diện để đảm bảo rằng bất cứ thứ gì bản tham chiếu xuất ra, chúng tôi cũng xuất ra kết quả tương tự. Điều đó có nghĩa là mọi mô hình đã trải qua hàng ngàn câu nói và kết quả rất gần hoặc giống hệt với bản tham chiếu. Dữ liệu này được công bố trong kho lưu trữ transcribe.cpp cũng như với từng mô hình trên Hugging Face.

Thay thế trực tiếp cho whisper.cpp

transcribe.cpp gần như là một sự thay thế trực tiếp cho whisper.cpp. Lý do chính là: Handy đã sử dụng whisper.cpp và tôi cần phát hành một bản cập nhật với transcribe.cpp để thay thế nó. Tôi cần duy trì khả năng tương thích với các tệp.bin rất phổ biến đang chạy trong whisper.cpp và được phân phối cùng Handy. transcribe.cpp có thể chạy chúng. Có một số cờ (flag) và tính năng trong whisper.cpp mà chúng tôi chưa hỗ trợ. Nhưng tôi nghĩ đối với đại đa số các trường hợp sử dụng, bản triển khai whisper của chúng tôi rất vững chắc và có thể thay thế whisper.cpp với hiệu năng tương đương.

Phân phối thực tế

Các ngôn ngữ binding là điều tôi đã nghĩ đến ngay từ đầu. Mặc dù thư viện này được viết bằng C/C++, tôi cần các binding cho Rust. Và tôi cũng biết rằng để chúng ta phân phối tính năng chuyển đổi giọng nói cục bộ rộng rãi nhất có thể, nó đòi hỏi tối thiểu là sự hỗ trợ tốt từ các binding chính chủ. Tôi đã chọn 4 ngôn ngữ mà tôi nghĩ là đại diện khá tốt cho nơi mọi người sẽ sử dụng thư viện này. Tôi hoan nghênh những người khác đóng góp binding trực tiếp vào dự án, với điều kiện họ sẵn sàng đảm nhận trách nhiệm duy trì chúng.

Và tất nhiên, cuối cùng thì rất nhiều quyết định được thúc đẩy bởi Handy. Vì Handy phổ biến, tôi dự định sẽ duy trì thư viện này, giống như cách tôi đã cố gắng hết sức để duy trì Handy. Tôi dự định sẽ là người tiếp tục duy trì các dự án mã nguồn mở và đóng góp cho hệ sinh thái bất cứ khi nào có thể.

Thư viện này sẽ không bao giờ tồn tại nếu không có Handy vì tôi sẽ không gặp phải vấn đề cố gắng hỗ trợ hàng loạt mô hình ASR khác nhau. Tôi sẽ không bao giờ biết được tất cả các trường hợp sử dụng mà mọi người cần cho ASR. Tôi đã cố gắng hết sức để bao quát những trường hợp tôi nghe thấy nhiều nhất. Chắc chắn là có những trường hợp trong thư viện hiện chưa được xử lý. Nếu có những thứ tôi bỏ sót, bạn hoàn toàn có thể đóng góp cho thư viện!

Làm cho tính năng chuyển đổi giọng nói cục bộ trở nên dễ tiếp cận hơn

transcribe.cpp nhắm mục tiêu trực tiếp vào việc làm cho ASR chạy cục bộ trở nên dễ dàng hơn. Chúng tôi biết rằng việc chuyển đổi giọng nói có thể chạy cực kỳ chính xác trên hầu hết các thiết bị và không cần thiết phải gửi giọng nói của bạn đến dịch vụ đám mây. Một chiếc RK3566 có thể chạy các mô hình thông qua transcribe.cpp nhanh hơn thời gian thực trên CPU yếu ớt của nó. Việc chuyển đổi giọng nói nhanh hơn thời gian thực với các mô hình SOTA chỉ tiêu tốn vài watt điện. Đó không phải là hy vọng hay giấc mơ, đó là sự thật.

Tôi nghĩ khi nhìn về tương lai, việc suy luận sẽ bắt đầu diễn ra cục bộ nhiều hơn vì lý do này hay lý do khác. Điều này đưa câu chuyện phân phối lên vị trí trung tâm. Để có nhiều ứng dụng chạy suy luận cục bộ hơn, chúng ta cần làm cho việc chạy suy luận trở nên dễ dàng hơn. Chắc chắn transcribe.cpp không giải quyết được toàn bộ vấn đề này và còn một chặng đường dài phía trước, nhưng tôi hy vọng đây là một bước tiến nhỏ. Tôi chắc chắn đã học được rất nhiều điều.

Lời cảm ơn

Tôi vô cùng biết ơn tất cả những người đã ủng hộ dự án này.

Trước hết là Mozilla AI, chương trình BiR của họ và Davide từ Mozilla AI. Dự án này phần lớn là một vấn đề trong đầu tôi mà tôi đã mang đến cho họ, và họ đã quyết định hỗ trợ tôi giải quyết vấn đề đó. Vào thời điểm đó, transcribe.cpp thậm chí còn chưa phải là một ý tưởng cụ thể, tôi chỉ đang khám phá cách giải quyết vấn đề phân phối tăng tốc trong Handy. Vì vậy, gửi lời cảm ơn to lớn đến họ, sự hỗ trợ của họ và việc giúp đưa dự án này vào thực tế.

ggml. Dự án này sẽ không thể thực hiện được nếu không có ggml và tất cả những người đóng góp cho nó. Cảm ơn tất cả các bạn rất nhiều vì công việc các bạn đã làm. Tôi nghĩ ggml thực sự làm những công việc tuyệt vời trong việc giúp cho việc phân phối các ứng dụng suy luận cục bộ trở nên dễ dàng và khả thi.

Modal cũng là một sự trợ giúp quan trọng đối với tôi. Tôi đã liên hệ với họ và họ đã cấp cho tôi các khoản tín dụng. Những khoản tín dụng này được dùng để thực hiện kiểm tra WER và đảm bảo thư viện hoạt động tốt trên CUDA. Việc có thể xác minh tính chính xác của công việc là một sự trợ giúp to lớn.

Blacksmith giúp vận hành một phần CI/CD cho transcribe.cpp. Một lần nữa, tôi đã liên hệ với họ và họ ngay lập tức phản hồi bằng các khoản tín dụng. Tất nhiên, CI/CD là rất quan trọng để đảm bảo mọi thứ được đưa ra đều đã được kiểm tra ở một mức độ nhất định.

Hugging Face vì vừa là trụ cột trong cộng đồng AI cục bộ, vừa cung cấp bộ lưu trữ riêng cho tổ chức handy-computer, để tôi có thể tải lên các mô hình theo ý muốn.

Có hỗ trợ bởi AI không?

Có, chắc chắn rồi. Tôi không nghĩ một cá nhân có thể viết một engine từ đầu với quy mô này bằng cách sử dụng ggml trong vài tháng mà không có sự hỗ trợ bên ngoài. Có từ nào ở đây được viết bằng AI không? Không. Chúng đến từ miệng hoặc ngón tay của tôi.

ASRggmllập trìnhnhận diện giọng nóimã nguồn mở
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.