Whistle nedir?
Whistle, Needle adlı minik dil modelinin de arkasındaki Cactus Compute’un 2 Ekim’de yayımladığı açık (Apache 2.0) bir konuşma tanıma modeli. Sesi yazıya çeviriyor (speech-to-text). Tek bir 16,9 MB’lık dosya, ekran kartı istemiyor ve yedi dili tanıyor: İngilizce, Almanca, Fransızca, İspanyolca, İtalyanca, Felemenkçe ve Lehçe. Türkçe yok.
Model iki parçalı. Kodlayıcı (encoder) sesi her 80 milisaniyede bir sayı dizisine çeviriyor. Kod çözücü (decoder) bu dizilerden kelimeleri tek tek üretiyor. Cactus’a göre bir Apple M4 Pro işlemcide 10 saniyelik seste ilk kelime 11 milisaniyede geliyor. Dokuz kat büyük Whisper base’te bu süre 73 milisaniye.
En ilginç özelliği kod çözücünün “merdivenli” olması. Sekiz katmanın ilk 2’si, ilk 4’ü ya da hepsi tek başına çalışacak şekilde eğitilmiş. Yani modeli yüklerken kaç katman kullanacağını seçebiliyorsun: Az katman, daha küçük ve hızlı ama biraz daha hatalı bir model.
Model çipten büyük
Better Stack ekibi Whistle’ı ESP32-S3’e taşıdı. Bu, fiyatı 10 dolar civarında olan, 16 MB flaş ve 8 MB ek belleği (PSRAM) olan bir mikrodenetleyici. Kurulum basit: Karta bir I²S mikrofon ve bir düğme bağlanıyor, kartın üstündeki renkli LED de hazır. Düğmeyi basılı tutup “make it red” ya da Fransızca bir cümle söylüyorsun, LED o renge dönüyor. Wi-Fi yok, bulut yok.
Sorun şu: Cactus’un ESP32 için bir sürümü yok, modeli çalıştıran motorun kaynak kodu da yayımlanmamış. Ekip, motoru kapalı kütüphaneyi deneyerek çözdü ve C ile sıfırdan yazdı. Her ara sonucu resmî motorunkiyle tek tek karşılaştırarak doğruladı.
Tam model kartın flaşına bile sığmıyordu. Burada merdivenli kod çözücü işe yaradı: Sadece ilk 4 katman tutulunca dosya 14,5 MB’a indi ve flaşa sığdı. Kart, sabit bir komut listesiyle eşleştirme yapmıyor. Söylediğini gerçekten yazıya döküyor, renk ve yanıp sönme bilgisini sonra küçük bir program metinden ayıklıyor.
24 saniyeden 6 saniyeye
İlk çalışan sürüm 2 saniyelik bir komutu 23,9 saniyede çözüyordu. Hızlandıran üç şey oldu:
- 8 bitlik tam sayı matematiği. Çipin vektör birimi tek komutta 16 çarpma-toplama yapabiliyor. Whistle’ın ağırlıkları zaten 8 bitlik değerlere tam oturuyor, bu yüzden doğruluk düşmedi (360 test klibinde %78’den %80’e).
- İki çekirdeği birden kullanmak.
doubletuzağını bulmak. ESP32-S3’ün kayan nokta birimi sadece tek hassasiyetli (float) sayıları donanımda hesaplıyor. Koddaki tek birdoubletoplayıcı yazılımla taklit edildiği için her şeyi yavaşlatıyordu. Sonuç doğru çıktığından bilgisayardaki testler bunu yakalayamadı.
Videodaki sürüm yaklaşık 10 saniyeye inmişti. Deponun güncel ölçümüne göre 2 saniyelik İngilizce bir komut artık 6,3 saniye sürüyor. Sesin her 80 milisaniyesi işlendiği için uzun cümle daha uzun sürüyor.
Ne kadar doğru?
Ekip doğruluğu bilgisayarın sentetik sesleriyle ölçtü, yani gerçek insan sesleriyle sonuç farklı olabilir. İngilizce ve İspanyolca renk komutlarının yaklaşık %80’i doğru anlaşıldı, Felemenkçe zayıf kaldı. Kart burada tam modelden bile iyi sonuç verdi, çünkü yazılım çözümlemeyi renk kelimelerine doğru yönlendiriyor. Genel konuşmada 4 katmanlı sürümün kelime hata oranı %11,7.
Bir uyarı daha: Whistle, resmî motorda da, boş odanın gürültüsünü “Thank you.” diye yazıya döküyor. Kart bu yüzden modeli sadece ses gürültünün belirgin şekilde üstüne çıktığında çalıştırıyor.
Bilgisayarda çalışan konuşma tanıma için Phonon-2 yazımıza, aynı çipte dil modeli çalıştırma denemesi için belleğe sığmayan modeller yazımıza bakabilirsin.
Düşün
- Evindeki hangi cihaz, internete bağlanmadan sesli komut alsa daha güvenli olurdu?
- Bilgisayarda doğru çıkan ama hedef donanımda 4 kat yavaş çalışan bir kodu nasıl test ederdin?
Videoyu izle
Kaynaklar (5, İngilizce)
- Better Stack: I Got Real Speech Recognition Running on a $10 Chip (Whistle) (video) (yeni sekmede açılır)
- Cactus Compute: Whistle (yeni sekmede açılır)
- Hugging Face: Cactus-Compute/whistle (yeni sekmede açılır)
- GitHub: andrisgauracs/whistle-esp32 (yeni sekmede açılır)
- Espressif: ESP-IDF Programming Guide (ESP32-S3) (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.