1 poin oleh GN⁺ 22 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • 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 .bin yang 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 .onnx yang 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 .bin untuk 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

 
GN⁺ 22 jam lalu
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

    • Dalam ujaran nyata ada banyak penghilangan dan kontraksi, sehingga meski tahu bahasanya, transkripsi fonem jauh lebih sulit daripada kata. Ada model seperti https://huggingface.co/spaces/KoelLabs/IPA-Transcription-EN, tetapi tingkat kesalahannya sangat tinggi
    • Keluarga istri saya berasal dari Iu Mien, subkelompok dari kelompok Dao/Yao di Tiongkok. Mien adalah bahasa tersendiri, tetapi sebagian besar penuturnya pada dasarnya buta huruf, dan hampir tidak ada bahan ajar atau kursus, sehingga sulit dipelajari
      Materi tertulisnya juga sedikit, jadi saya ingin membuat sendiri sistem terjemahan seperti dalam Project Hail Mary
    • Saya hampir tidak tahu model yang mendukung fitur ini, jadi saat ini berada di luar cakupan library, tetapi jika ada model yang cocok, saya dengan senang hati akan mendukungnya
    • Ada beberapa model automatic phoneme recognition (APR), tetapi performanya biasa-biasa saja
    • Model seperti ini tampaknya baru praktis jika tahu rentang bunyi yang diperkirakan akan didengarnya. IPA merepresentasikan sangat banyak bunyi, tetapi tiap bahasa hanya memakai sebagian di antaranya
      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

    • Seiring Handy menjadi populer, saya tanpa sengaja menjadi maintainer open source, dan untungnya donasi pribadi serta beberapa sponsor mendukung pekerjaan ini
      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
    • Dikte bawaan sistem operasi di iOS, meski tidak memakai iCloud, harus mengunggah buku alamat ke Apple setiap kali diminta, jadi saya terpaksa mematikannya
  • 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

    • Justru cara menyalin semuanya sekaligus setelah rekaman selesai lebih cocok bagi saya. Saat melihat input real-time, saya jadi sulit menuntaskan pikiran karena sibuk memeriksa kesalahan transkripsi
      Lebih berguna jika saya mengucapkan semua isi kepala selama 5–10 menit tentang satu topik, lalu meninjaunya, karena alur berpikir tidak terputus
    • Jika mau, Handy bisa dimodifikasi relatif mudah untuk menerapkannya. Saya juga berencana menambahkannya sebagai fitur resmi aplikasi, tetapi masih banyak hal yang harus diselesaikan lebih dulu
    • Kata dalam bahasa Inggris sering kali baru bisa dipastikan jika ada konteks di sekitarnya. Misalnya there dan their tidak bisa dibedakan hanya dari pelafalan
    • Kegunaan fitur transkripsi bergantung pada cara pemakaiannya. Jika saat mendikte Anda membuka jendela lain atau melihat grafik dan data, mudah memberikan informasi yang mendukung ujaran
      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 mencoba pendekatan ini di https://github.com/electronstudio/low_latency_dictation, tetapi akurasi model real-time rendah. Karena itu, sebelum menetapkan teks, dilakukan pemrosesan kedua dengan model yang lebih akurat
  • Saya penasaran apakah akurasi bisa ditingkatkan besar-besaran dengan memasukkan konteks, seperti Whisper.cpp

    • Bisa
  • 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

    • Saya sudah mengajukan PR ke PyPI untuk meminta ruang penyimpanan tambahan bagi paket CUDA, tetapi tampaknya belum disetujui. Saya ingin bantuan untuk meningkatkan developer experience (DX) binding ini
  • 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

    • Benar, saya adalah penulis sekaligus maintainer, dan sponsor serta donasi komunitas Handy sangat membantu. Terutama Mozilla AI mendukung pekerjaan awal, sehingga mimpi samar untuk Handy bisa berkembang menjadi proyek nyata dan saya punya waktu untuk merilis v0.1.0
      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

    • Sulit untuk setuju dengan klaim ini, karena alat yang kita gunakan membentuk cara berpikir. LLM pengenalan suara pada akhirnya tetap LLM, dan kesalahan terbentuk sesuai ekspektasi yang tertanam dalam proses pelatihannya, serta memengaruhi kata-kata yang muncul di layar
      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 7812

    • Penyesuaian 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