1 puan yazan GN⁺ 1 일 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 .bin dosyaları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 .onnx modellerinin çı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 .bin model 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

 
GN⁺ 1 일 전
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

    • Gerçek konuşmada çok fazla atlama ve kısaltma var; dili biliyor olsanız bile fonem transkripsiyonu, kelime yazımından çok daha zor. https://huggingface.co/spaces/KoelLabs/IPA-Transcription-EN gibi modeller var ama hata oranı çok yüksek
    • Eşimin ailesi, Çin'deki Dao/Yao halkının bir alt grubu olan Iu Mien kökenli. Mien bağımsız bir dil, ancak konuşurlarının çoğu fiilen okuryazar değil ve ders materyali ya da kurs da neredeyse hiç yok; bu yüzden öğrenmesi zor
      Yazılı kaynak da az olduğu için, Project Hail Mary'deki gibi çeviri sistemini kendim yapmak istiyorum
    • Bu özelliği destekleyen pek model bilmiyorum, bu yüzden şu anda kütüphanenin kapsamı dışında; ama uygun bir model varsa memnuniyetle desteklerim
    • Bazı otomatik fonem tanıma (APR) modelleri var ama performansları pek iyi değil
    • Böyle modellerin pratik olabilmesi için, duyacaklarını bekledikleri ses aralığını bilmesi gerekiyor gibi görünüyor. IPA'nın ifade ettiği sesler çok fazla ama tek tek diller bunların yalnızca bir kısmını kullanıyor
      İ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

    • Handy popüler hale gelince istemeden bir açık kaynak bakımcısı oldum; neyse ki kişisel bağışlar ve çeşitli sponsorlar çalışmamı destekliyor
      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
    • iOS'taki işletim sisteminin varsayılan dikte özelliği, iCloud kullanılmasa bile her istekte adres defterini Apple'a yüklemek zorunda olduğu için kapalı tutmak zorundayım
  • 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ş

    • Benim için tam tersine, kaydın bitiminden sonra tek seferde transkripsiyon daha iyi oldu. Gerçek zamanlı giriş görünürken, transkripsiyon hatalarını kontrol etmek düşünceyi sonuna kadar sürdürmeyi zorlaştırıyor
      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
    • İsterseniz bunu Handy üzerinde nispeten kolayca değiştirip uygulayabilirsiniz. Uygulamanın resmî özelliği olarak eklemeyi de planlıyorum ama önce çözmem gereken başka şeyler var
    • İngilizce kelimelerin kesinleşmesi için çoğu zaman çevre bağlamı gerekir. Örneğin there ve their yalnızca telaffuzdan ayırt edilemez
    • Transkripsiyonun faydası, nasıl kullanıldığına göre değişiyor. Dikte sırasında başka pencereler açıyor ya da grafik ve verilere bakıyorsanız, bunlar konuşmayı destekleyen bilgiyi sağlamayı kolaylaştırır
      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...
    • https://github.com/electronstudio/low_latency_dictation içinde bu yaklaşımı denedim ama gerçek zamanlı modelin doğruluğu düşüktü. Bu yüzden metni kesinleştirmeden önce daha doğru bir modelle ikinci bir işlem yapıyorum
  • Whisper.cpp gibi bağlam girdisi vererek doğruluğu büyük ölçüde artırmak mümkün mü diye merak ediyorum

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

    • CUDA paketi için ek depolama alanı isteyen bir PR'ı PyPI'ye gönderdim ama henüz onaylanmamış gibi görünüyor. Bağlamaların geliştirici deneyimini (DX) iyileştirmek konusunda yardım almak isterim
  • 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ı

    • Evet, yazarı ve bakımcısı benim; sponsorlar ve Handy topluluğunun bağışları çok yardımcı oldu. Özellikle Mozilla AI, ilk çalışmaları destekleyerek Handy için belirsiz bir hayali gerçek bir projeye dönüştürmem ve v0.1.0'ı yayımlamam için bana zaman sağladı
      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.

    • Kullandığımız araçlar düşünceyi şekillendirdiği için bu görüşe katılmak zor. Ses tanıma LLM'si de sonuçta bir LLM ve eğitim sürecine gömülü beklentilere göre hatalar üretiyor, ekranda görünen kelimeleri de etkiliyor.
      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 7812

    • Kelime 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.