- transcribe.cpp, birden çok güncel konuşma tanıma modelini Mac, Windows ve Linux uygulamalarına kolayca gömmek ve GPU ile hızlandırmak için geliştirilmiş ggml tabanlı bir kütüphanedir
- 16 ASR ailesi ve 60’tan fazla modeli Vulkan, Metal, CUDA ve TinyBLAS üzerinde çalıştırır; hem streaming hem de batch transkripsiyonu destekler
- Tüm modeller referans uygulamalarla sayısal olarak karşılaştırıldı ve binlerce konuşma örneğiyle WER testinden geçirildi; doğrulama sonuçları depoda ve Hugging Face’te yayımlandı
- Mevcut whisper.cpp
.bindosyalarını çalıştırabilir ve çoğu kullanımda benzer performansla onun yerine geçebilir; Python, JavaScript/TypeScript, Rust ve ObjC/Swift için resmî binding’ler de sunar - Düşük güç tüketimli RK3566 üzerinde bile gerçek zamandan hızlı transkripsiyon yapabildiği için sesi buluta göndermeden çeşitli cihazlara yerel ASR dağıtmayı mümkün kılar
Çapraz platform ASR dağıtımının kısıtları
- Mevcut çapraz platform ASR çıkarım seçenekleri fiilen whisper.cpp ve ONNX ile sınırlıydı
- Apple cihazlara MLX eklenebilir, ancak bu durumda iki motoru desteklemek ve her motor için modelleri port etmek gerekir
- ONNX, Handy’ye hızlıca model eklemek için kullanışlıydı; ancak yalnızca CPU’da çalıştırıldığında performanstan yeterince yararlanmak zordu
- Birden fazla modeli destekleyen bazı kütüphanelerde yazar, test seviyesi ve bakım planı belirsizdir
- Gerçek masaüstü ve mobil uygulamalarda kullanılabilecek binding’leri olup olmadığını, demo koduyla sınırlı kalıp kalmadığını, benchmark bulunup bulunmadığını ve ONNX’ten hızlı olup olmadığını anlamak zordu
- Handy’nin çapraz platform ses girişi dağıtım deneyimine dayanarak aşağıdaki koşulları karşılayan bir motora ihtiyaç duyuldu
- Dosya indirildikten sonra doğrudan çıkarım yapabilmeliydi
- Çıkarım kalitesinin referans uygulamayla eşdeğer olup olmadığı doğrulanabilmeliydi
- En yüksek performans için GPU’da çalışmalıydı
- Büyük PyTorch kütüphaneleri olmadan Handy’ye kolayca gömülebilmeliydi
- Mac, Windows ve Linux’ta çalışmalıydı
- ggml, güçlü topluluğu ve pratik dağıtım yöntemi sayesinde bu gereksinimi gerçekleştirmek için temel olarak seçildi
Desteklenen modeller ve hızlandırma yöntemleri
- transcribe.cpp, hızlı ve doğru çıkarım ile geniş model desteğini hedefler
- 16 ASR ailesi ve 60’tan fazla modeli destekler; daha fazla model eklenecektir
- Açık olarak yayımlanmış güncel transkripsiyon modellerinin çoğunu destekler, ancak henüz eksik modeller de vardır
- Hem streaming transkripsiyon hem de batch transkripsiyon sunar
- Desteklenen tüm modeller aşağıdaki hızlandırma backend’lerinde çalıştırılabilir
- Vulkan
- Metal
- CUDA
- TinyBLAS
- Model bazlı benchmark’lar Fedora ortamında Ryzen 4750U CPU + Vulkan ve M4 Max üzerinde yapıldı
- Vulkan desteği, yerel çıkarım uygulamaları dağıtımı için asgari koşul olarak belirlendi
Referans uygulama ve doğruluk doğrulaması
- Hugging Face’ten alınan
.onnxmodellerinin çıkarım doğruluğundan emin olmanın zor olduğu deneyiminden yola çıkarak tüm modeller referans uygulamalarla sayısal olarak doğrulandı - Sayısal karşılaştırmanın yanı sıra, referans uygulamayla aynı çıktıyı verip vermediğini kontrol etmek için tam WER denetimi çalıştırıldı
- Her model için binlerce konuşma örneği işlendi
- Sonuçlar referans uygulamaya çok yakın ya da aynıydı
- Doğrulama verileri transcribe.cpp deposunda ve handy-computer Hugging Face organizasyonunun her model sayfasında yayımlandı
whisper.cpp uyumluluğu
- Handy’de kullanılan whisper.cpp’nin yerine geçebilmesi için drop-in alternatife yakın uyumluluk uygulandı
- Handy ile birlikte dağıtılan whisper.cpp için
.binmodel dosyaları transcribe.cpp’de de çalıştırılabilir - whisper.cpp’nin bazı flag’leri ve özellikleri henüz desteklenmiyor
- Çoğu kullanımda whisper uygulaması yeterince kararlı olup yaklaşık benzer performansla whisper.cpp’nin yerini alabilir
Dil binding’leri ve bakım
- C/C++ ile yazılmıştır ve yerel transkripsiyonu farklı ortamlara dağıtabilmek için resmî olarak bakımı yapılan binding’ler sunar
- Python
- JavaScript/TypeScript
- Rust
- ObjC/Swift
- Diğer dil binding’lerine katkılar da memnuniyetle karşılanır; ancak katkı yapan kişinin ilgili binding’in bakımını üstlenmesi gerekir
- Handy’nin gerçek ihtiyaçları kütüphane tasarımına yansıtıldı; Handy bakım deneyimine dayanarak transcribe.cpp’nin de sürdürülebilir şekilde yönetilmesi planlanıyor
- Çeşitli ASR modellerini ve gerçek kullanım senaryolarını desteklerken edinilen deneyimler yansıtıldı; ancak henüz ele alınmamış durumlar olduğundan dış katkılar kabul ediliyor
- Mevcut sürüm v0.1.0 olduğu için pürüzlü kısımlar hâlâ mevcut; issue bildirimi isteniyor
Düşük güç tüketimli cihazlara kadar ölçeklenen yerel ASR
- Amaç, ASR’yi doğrudan cihaz üzerinde çalıştırmayı kolaylaştırarak sesin bulut servislerine gönderilmesi ihtiyacını azaltmak
- Performansı düşük RK3566 CPU’da bile modeller gerçek zamandan hızlı çalıştırılabilir
- Güncel modellerle gerçek zamanın üzerinde transkripsiyon hızı, birkaç watt düzeyinde güç tüketimiyle çalışır
- Daha fazla çıkarımı yerelde işlemek için çıkarım motorunu uygulamalara dağıtma ve çalıştırma sürecinin kolaylaşması gerekir
- transcribe.cpp tek başına yerel çıkarım dağıtımı sorunlarının tamamını çözemez; ancak yerel ASR’ye giriş eşiğini düşüren bir adım olarak geliştirildi
Projeyi destekleyen katkılar
- Mozilla AI, BiR programı ve Mozilla AI’dan Davide, somut bir ürün biçimi yokken yürütülen erken keşif aşamasından itibaren projeyi destekledi
- ggml, yerel çıkarım uygulamalarının dağıtımını mümkün kılan temel altyapıdır
- Modal, WER testleri ve CUDA doğrulaması için kullanılan kredileri sağladı
- Blacksmith, sürüm çıktılarının denetlendiği CI/CD’nin bir bölümünü destekledi
- Hugging Face, modellerin serbestçe yüklenebilmesi için handy-computer organizasyonuna özel depolama alanı sağladı
Geliştirme sürecinde yapay zeka kullanımı
- ggml tabanlı bu ölçekte bir motoru tek kişinin birkaç ay içinde sıfırdan yazmasının zor olduğu değerlendirilerek geliştirmede yapay zeka desteği kullanıldı
- Proje tanıtım metni yapay zekayla yazılmadı; doğrudan söylenen veya girilen cümlelerden oluşuyor
1 yorum
Hacker News görüşleri
Çok etkileyici görünüyor. Ancak model belgelerinde, bilinmeyen bir dilin anlamını değil de sesi Uluslararası Fonetik Alfabe (IPA) ile yazıya dökme özelliğini bulamadım
Konuşuru 10 binden az olan azınlık dilleri için, dil başına model eğitmeye yetecek kaynak hiç olmayabilir. Dili tanımlamadan doğrudan konuşmayı IPA'ya dönüştüren bir model olsaydı, dünyanın dört bir yanındaki azınlık dilleri üzerinde çalışan dilbilimciler için çok faydalı olurdu
Yazılı kaynak da az olduğu için, Project Hail Mary'deki gibi çeviri sistemini kendim yapmak istiyorum
İngilizcedeki koyu l ve açık l (ball/light), aspirasyonlu p (pin/spin) başka dillerde anlam ayırabilir ama İngilizcede ayırmaz. Dilbilimcilerin mümkün olduğunca sadık bir IPA dökümü alıp sonra bunu elle normalize etmeyi mi amaçladığını merak ediyorum
Yayın için tebrikler. Handy'yi Mac'te ve telefonda severek kullanıyorum; özellikle Apple'ın varsayılan konuşma tanımasının belirli alan terimlerini yanlış duyduğu durumlarda çok yararlı
Bakım maliyetleri için bir vakıftan destek alma seçeneği var mı diye merak ediyorum. Böyle bir proje için ödeme almak isteseniz hangi kuruluşlara gider, ne şekilde destek isterdiniz, bunu da bilmek isterim
Açık kaynağa katkı yapmayı sürdürmek istiyorum, bu yüzden bunu destekleyen herkese açığım; özellikle açık kaynağa inanan ve onu geliştiren kuruluşlarla iyi uyuşuyorum. Ayrıntılar için contact@handy.computer üzerinden konuşabiliriz
Birçok konuşmadan metne sistem konuşmayı doğru tanıyor ama istediğim iş akışını desteklemiyor. Belgeyi açıp konuştuğumda, imlecin bulunduğu yere minimum gecikmeyle sürekli yazılması gerekiyor
Kaydı durdurduktan sonra hepsini birden yapıştırmak kullanışlı değil; esas olan sürekli giriş
Bir konu hakkında aklımdakilerin hepsini 5-10 dakika boyunca söyleyip sonra gözden geçirmek, düşünce akışını bölmediği için daha faydalı oluyor
Bazı uygulamalar, kopyaladığınız ya da baktığınız içeriği bile transkripsiyon bağlamı olarak kullanıp sonucu iyileştiriyor: https://superwhisper.com/docs/common-issues/context#types-of...
Whisper.cpp gibi bağlam girdisi vererek doğruluğu büyük ölçüde artırmak mümkün mü diye merak ediyorum
Bakımcının desteklediği dört dil bağlamasından Python olanı https://github.com/handy-computer/transcribe.cpp/tree/main/b... adresinde
Henüz bağımlılıkları içeren PyPI ikili wheel yok; mevcut PyPI kütüphanesi ayrı kurulmuş kütüphaneyi ctypes ile çağırıyor ama ileride yayınlanacak gibi görünüyor
Tam zamanında karşıma çıktı. Prompt araçlarına metinden konuşmaya (TTS) eklendiğinden sık sık bahsedildiğini görüyorum ve bunu kendim denemek istiyordum
Aklıma gelen düşünceleri uzun uzun söyleyip belgeye dönüştürmek, sonra düzenleyip yapay zekaya göndermek şeklindeki döngü cazip görünüyor
Topluluğa müthiş bir katkı ve bunu tek başına yapmış olman şaşırtıcı. Sonunda Series A yatırım duyurusu falan çıkacak sandım
Yapay zekayla düşük kaliteli sonuçları hızla çoğaltmak mümkün, ama hedefi büyütüp eskisinden daha titiz ve daha kalıcı şeyler üretmenin de mümkün olduğunu gösteriyor. Bence Transcribe.cpp'yi doğrudan uygulamaya gömmektense, böyle bir özellik işletim sistemi ya da Handy gibi bir uygulama üzerinden her yerde kullanılabilir olmalı
Bir gün libtranscribe'ı düzgün şekilde dağıtıp sistem kütüphanesi gibi yapmak istiyorum. Kararlı hale gelmesi zaman alacaktır ama bunun mümkün olduğunu düşünüyorum
Mevcut transcribe-rs'ye göre çok daha iyi çalışıyor. Çevrimdışı ses girişi uygulamasını da yeni kütüphaneyi kullanacak şekilde güncellediğimde hız belirgin biçimde arttı: https://github.com/notune/android_transcribe_app
İleride çeşitli nedenlerle yerel çıkarım artacak ve daha fazla uygulamanın bunu kullanabilmesi için çalıştırma ve dağıtımın kolaylaşması gerektiği tespiti isabetli.
Metindeki hiçbir kelimenin yapay zeka tarafından yazılmamış olması, her şeyin ağızdan ya da parmaklardan çıkmış olması da projeyi daha güvenilir ve erişilebilir kılıyor.
Sık kullandıkça hangi kelime dizilerinin doğru şekilde yazıya döküldüğünü öğreniyorsunuz ve bu da düşünme sürecinin bir parçası oluyor. Zamanla LLM ile düşünce iç içe geçtiği için, yapay zekanın bu şekilde kullanımı da nihai cümleyi gerçekten değiştirebilir.
Yerelde bir transkripsiyon API sunucusu çalıştırmaya bakarken benzer sorunlar yaşadım. En büyük eksik streaming desteği ve tanıma sırasında önceliği artırılacak özel kelime desteğiydi; bunda streaming olması sevindirici.
whisper.cpp ortaya çıktıktan sonra 3090 Ti sunucuda doğrudan çalıştırıyorum. Daha hızlı ve daha iyi bir alternatif çıkmış olsa bile sorunsuz çalışmayı sürdürüyor, ağırlıkları küçük ve ihtiyacım olandan yeterince hızlı.
Aşağıdaki gibi yerel home server'a kurarsanız kolayca bir yerel transkripsiyon API'si oluşturabilirsiniz. Çıkarım parametrelerini biraz ayarlamak gerekiyor ama bir kez oturtunca çok iyi çalışıyor.
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 7812Kelime ağırlığı ayarlama muhtemelen çok daha sonra desteklenecek, ama streaming zaten mevcut.
Umarım birileri kod tabanına iyi bir sunucu örneği katkıda bulunur ve sorun gidermeye de yardımcı olur ya da transcribe.cpp veya binding'lerle başka dillerde sağlam bir sunucu yapar. Tamamlandığında ana projeden doğrudan bağlamaya da istekliyim.