- transcribe.cpp adalah library berbasis ggml yang dibuat untuk memudahkan penyematan berbagai model pengenalan suara terbaru ke aplikasi Mac, Windows, dan Linux, serta mempercepatnya dengan GPU
- Menjalankan 16 keluarga ASR dan lebih dari 60 model di Vulkan, Metal, CUDA, dan TinyBLAS, serta mendukung transkripsi streaming maupun batch
- Semua model dibandingkan secara numerik dengan implementasi referensi dan menjalani pengujian WER dengan ribuan ujaran; hasil validasinya dipublikasikan di repositori dan Hugging Face
- Dapat menjalankan file
.binyang sudah ada untuk whisper.cpp dan, untuk sebagian besar penggunaan, bisa menggantikannya dengan performa serupa; binding resmi untuk Python, JavaScript/TypeScript, Rust, dan ObjC/Swift juga tersedia - Bahkan pada RK3566 berdaya rendah, transkripsi bisa lebih cepat dari real-time, sehingga ASR lokal dapat diterapkan di berbagai perangkat tanpa mengirim suara ke cloud
Keterbatasan deployment ASR lintas platform
- Pilihan inferensi ASR lintas platform yang ada pada praktiknya terbatas pada whisper.cpp dan ONNX
- Untuk perangkat Apple, MLX bisa ditambahkan, tetapi itu berarti harus mendukung dua engine dan mem-porting model untuk tiap engine
- ONNX berguna untuk menambahkan model dengan cepat ke Handy, tetapi sulit memanfaatkan performa secara penuh jika hanya berjalan di CPU
- Beberapa library yang mendukung banyak model memiliki tingkat kejelasan yang rendah soal pembuat, cakupan pengujian, dan rencana pemeliharaan
- Sulit memastikan apakah ada binding yang bisa dipakai di aplikasi desktop dan mobile nyata, apakah hanya sebatas kode demo, apakah ada benchmark, atau apakah lebih cepat dari ONNX
- Berdasarkan pengalaman deployment input suara lintas platform di Handy, dibutuhkan engine yang memenuhi syarat berikut
- File harus bisa diunduh dan langsung dipakai untuk inferensi
- Harus bisa memverifikasi apakah kualitas inferensi setara dengan implementasi referensi
- Harus berjalan di GPU untuk performa terbaik
- Harus mudah disematkan ke Handy tanpa library PyTorch berukuran besar
- Harus berjalan di Mac, Windows, dan Linux
- ggml dipilih sebagai dasar implementasi kebutuhan ini karena memiliki komunitas kuat dan cara distribusi yang praktis
Model yang didukung dan metode akselerasi
- transcribe.cpp bertujuan menyediakan inferensi yang cepat dan akurat serta dukungan model yang luas
- Mendukung 16 keluarga ASR dan lebih dari 60 model, dan akan menambahkan lebih banyak model
- Mendukung sebagian besar model transkripsi terbaru yang tersedia publik, meski masih ada beberapa yang belum tercakup
- Menyediakan transkripsi streaming dan batch
- Semua model yang didukung dapat berjalan di backend akselerasi berikut
- Vulkan
- Metal
- CUDA
- TinyBLAS
- Benchmark per model dilakukan pada lingkungan Fedora dengan CPU Ryzen 4750U dan Vulkan, serta pada M4 Max
- Dukungan Vulkan dijadikan syarat minimum untuk deployment aplikasi inferensi lokal
Implementasi referensi dan validasi akurasi
- Berdasarkan pengalaman sulitnya memastikan akurasi inferensi model
.onnxyang diperoleh dari Hugging Face, semua model divalidasi secara numerik terhadap implementasi referensi - Selain perbandingan numerik, pemeriksaan WER penuh dijalankan untuk memastikan keluarannya sama dengan implementasi referensi
- Setiap model memproses ribuan ujaran
- Hasilnya sangat dekat atau identik dengan implementasi referensi
- Data validasi dipublikasikan di repositori transcribe.cpp dan di setiap halaman model milik organisasi handy-computer di Hugging Face
Kompatibilitas whisper.cpp
- Agar dapat menggantikan whisper.cpp yang digunakan di Handy, kompatibilitas yang mendekati drop-in replacement diimplementasikan
- File model
.binuntuk whisper.cpp yang didistribusikan bersama Handy juga dapat dijalankan di transcribe.cpp - Sebagian flag dan fitur whisper.cpp belum didukung
- Untuk sebagian besar penggunaan, implementasi whisper sudah cukup stabil dan dapat menggantikan whisper.cpp dengan performa yang kurang lebih serupa
Binding bahasa dan pemeliharaan
- Ditulis dalam C/C++ dan menyediakan binding yang dipelihara resmi agar transkripsi lokal dapat dideploy di berbagai lingkungan
- Python
- JavaScript/TypeScript
- Rust
- ObjC/Swift
- Kontribusi binding untuk bahasa lain juga disambut, tetapi kontributor harus bertanggung jawab memelihara binding tersebut
- Kebutuhan nyata Handy tercermin dalam desain library, dan transcribe.cpp juga direncanakan untuk terus dikelola berdasarkan pengalaman pemeliharaan Handy
- Pengalaman dari mendukung berbagai model ASR dan kasus penggunaan nyata telah diterapkan, tetapi masih ada kasus yang belum tertangani sehingga kontribusi eksternal diterima
- Versi saat ini adalah v0.1.0 dan masih memiliki bagian yang belum halus, sehingga diminta untuk melaporkan issue
ASR lokal yang meluas hingga perangkat berdaya rendah
- Tujuannya adalah memudahkan menjalankan ASR langsung di perangkat, sehingga mengurangi kebutuhan mengirim suara ke layanan cloud
- Bahkan pada CPU RK3566 berperforma rendah, model dapat berjalan lebih cepat dari real-time
- Kecepatan transkripsi di atas real-time dengan model terbaru dapat berjalan pada konsumsi daya beberapa watt
- Agar lebih banyak inferensi diproses secara lokal, proses mendistribusikan dan menjalankan engine inferensi di aplikasi harus menjadi mudah
- transcribe.cpp sendiri tidak bisa menyelesaikan seluruh masalah deployment inferensi lokal, tetapi dikembangkan sebagai langkah untuk menurunkan hambatan masuk ASR lokal
Dukungan yang menopang proyek
- Mozilla AI, program BiR, dan Davide dari Mozilla AI mendukung proyek ini sejak tahap eksplorasi awal ketika belum ada bentuk produk yang konkret
- ggml adalah fondasi inti yang memungkinkan deployment aplikasi inferensi lokal
- Modal menyediakan kredit yang digunakan untuk pengujian WER dan validasi CUDA
- Blacksmith mendukung sebagian CI/CD yang memeriksa artefak rilis
- Hugging Face menyediakan ruang penyimpanan privat untuk organisasi handy-computer agar model dapat diunggah dengan bebas
Penggunaan AI dalam proses pengembangan
- Karena dinilai sulit bagi satu orang untuk menulis engine berbasis ggml berskala seperti ini dari nol dalam beberapa bulan, pengembangan memanfaatkan bantuan AI
- Teks pengantar proyek ini tidak ditulis oleh AI, melainkan terdiri dari kalimat yang diucapkan atau diketik langsung
1 komentar
Komentar Hacker News
Terlihat sangat keren. Namun, saya tidak menemukan di dokumentasi model fitur untuk menyalin bunyi ke International Phonetic Alphabet (IPA), bukan makna dari bahasa yang tidak dikenal
Untuk bahasa minoritas dengan penutur kurang dari 10 ribu orang, sumber daya untuk melatih model per bahasa mungkin akan selamanya kurang. Jika ada model yang mengubah suara itu sendiri ke IPA tanpa mengidentifikasi bahasanya, itu akan sangat membantu para linguis yang meneliti bahasa-bahasa minoritas di seluruh dunia
Materi tertulisnya juga sedikit, jadi saya ingin membuat sendiri sistem terjemahan seperti dalam Project Hail Mary
Dark l dan clear l dalam bahasa Inggris (ball/light), serta p beraspirasi (pin/spin), dapat membedakan makna di bahasa lain, tetapi tidak dalam bahasa Inggris. Saya penasaran apakah para linguis ingin menerima transkripsi IPA yang setia mungkin, lalu menormalisasinya secara manual
Selamat atas peluncurannya. Saya memakai Handy dengan baik di Mac dan ponsel, dan sangat berguna terutama saat istilah bidang tertentu sering salah dikenali oleh pengenalan suara bawaan Apple
Saya penasaran apakah biaya pemeliharaan bisa didukung oleh yayasan. Jika ingin mendapat imbalan untuk proyek seperti ini, saya juga ingin tahu organisasi seperti apa yang harus dicari dan bagaimana cara meminta dukungannya
Saya ingin terus berkontribusi pada open source, jadi saya menyambut pihak yang mendukung hal tersebut, terutama organisasi yang percaya pada open source dan mengembangkannya. Diskusi lebih lanjut bisa melalui contact@handy.computer
Banyak sistem speech-to-text memang mengenali ujaran itu sendiri dengan akurat, tetapi tidak mendukung alur kerja yang diinginkan. Saat membuka dokumen dan berbicara, teks harus terus dimasukkan dengan latensi minimal di posisi kursor
Cara berhenti merekam lalu menempelkan semuanya sekaligus tidak berguna; input berkelanjutan adalah intinya
Lebih berguna jika saya mengucapkan semua isi kepala selama 5–10 menit tentang satu topik, lalu meninjaunya, karena alur berpikir tidak terputus
Beberapa aplikasi bahkan memakai konten yang disalin atau sedang dilihat sebagai konteks transkripsi untuk meningkatkan hasil: https://superwhisper.com/docs/common-issues/context#types-of...
Saya penasaran apakah akurasi bisa ditingkatkan besar-besaran dengan memasukkan konteks, seperti Whisper.cpp
Dari empat binding bahasa yang didukung maintainer, yang untuk Python ada di https://github.com/handy-computer/transcribe.cpp/tree/main/b...
Saat ini belum ada binary wheel PyPI yang menyertakan dependensi, dan library PyPI yang ada sekarang memanggil library yang dipasang terpisah melalui ctypes, tetapi tampaknya direncanakan untuk dirilis ke depannya
Kebetulan menemukannya di waktu yang tepat. Saya sering mendengar pembicaraan tentang memasukkan text-to-speech (TTS) ke alat prompt, jadi saya ingin mencobanya sendiri
Alur kerja berupa berbicara panjang tentang ide yang muncul hingga menjadi dokumen, mengeditnya, lalu mengirimkannya ke AI terlihat menarik
Ini kontribusi luar biasa bagi komunitas, dan mengejutkan bahwa dibuat sendirian. Saya kira di bagian akhir akan ada pengumuman pendanaan Series A
AI memang bisa dipakai untuk dengan cepat menghasilkan keluaran berkualitas rendah, tetapi ini menunjukkan bahwa kita juga bisa memperbesar ambisi dan membuat sesuatu yang lebih teliti serta tahan lama daripada sebelumnya. Alih-alih memasukkan Transcribe.cpp langsung ke aplikasi, menurut saya fitur seperti ini seharusnya tersedia di mana saja lewat sistem operasi atau aplikasi seperti Handy
Suatu hari saya ingin mendistribusikan libtranscribe dengan baik dan menjadikannya seperti library sistem. Stabilisasi akan butuh waktu, tetapi saya rasa itu mungkin
Jauh lebih bekerja dengan baik dibanding transcribe-rs yang lama. Saya juga memperbarui aplikasi input suara offline agar memakai pustaka baru ini, dan kecepatannya meningkat tajam: https://github.com/notune/android_transcribe_app
Ke depannya inferensi lokal akan makin banyak dipakai karena berbagai alasan, dan diagnosis bahwa eksekusi serta distribusinya harus dibuat lebih mudah agar lebih banyak aplikasi bisa menggunakannya memang tepat
Fakta bahwa tidak satu kata pun dalam tulisan itu ditulis oleh AI, melainkan berasal dari mulut atau jari, juga membuat proyek ini terasa lebih tepercaya dan mudah didekati
Jika sering digunakan, kita akan belajar susunan kata seperti apa yang ditranskripsi dengan benar, dan itu menjadi bagian dari proses berpikir. Seiring waktu, LLM dan pemikiran menjadi saling terjalin, sehingga penggunaan AI dengan cara seperti ini pun bisa benar-benar mengubah kalimat akhir
Saat mencari cara menjalankan server API transkripsi secara lokal, saya mengalami masalah serupa. Yang paling kurang adalah dukungan streaming dan dukungan untuk kata-kata khusus yang ingin diberi prioritas lebih tinggi saat pengenalan, jadi senang melihat di sini sudah ada streaming
Setelah whisper.cpp muncul, saya menjalankannya sendiri di server 3090 Ti. Meskipun alternatif yang lebih cepat dan lebih baik sudah muncul, ini tetap berjalan tanpa masalah, bobotnya kecil, dan kecepatannya lebih dari cukup untuk kebutuhan saya
Jika dipasang di home server lokal seperti di bawah ini, kita bisa dengan mudah membuat API transkripsi lokal. Parameter inferensi memang perlu sedikit disetel, tetapi setelah dipastikan, hasilnya berjalan sangat baik
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 7812Penyesuaian bobot kata kemungkinan besar baru akan didukung jauh belakangan, tetapi streaming sudah tersedia
Saya berharap ada yang menyumbangkan contoh server yang bagus ke codebase dan membantu pemecahan masalah, atau membuat server yang kokoh dalam bahasa lain dengan transcribe.cpp atau binding-nya. Jika sudah selesai, saya juga bersedia menautkannya langsung dari proyek utama