← Tüm projeler

Türkçe Konuşma Tanıma

Türkçe konuşmayı telefonda, internet olmadan metne çeviren ve kimin konuştuğunu ayıran bir ses hattı. Hangi modelin kalacağına tahminle değil, her adımı ölçerek karar verdim.

Dönem
Temmuz 2026
Alan
Yapay Zekâ / ML
Rol
Tek kişilik proje: tasarım, kod, test, değerlendirme
Teknoloji
Python, Whisper, Hugging Face, sherpa-onnx, ONNX, INT8, Android, Colab
Kod
Talep üzerine paylaşılır
%16,1WER, cihaz üstü INT8 ONNX
%3,0CER, aynı model
13.864eğitim örneği, 3 veri kümesi

Ölçümle ilerleyen kararlar

  1. Kalite tavanı: whisper large-v3 Türkçede WER %7,0 / CER %0,9 verdi. Ama telefon CPU’sunda gerçek zamanın 0,3 – 0,4 katı hızda çalıştı; mobilde kullanılamaz.
  2. Küçük model: whisper-small WER %15,6 ve gerçek zamanın 1,5 katı hız. Kullanılabilir ama büyük modelin gerisinde.
  3. Neden fine-tune: Kapsamı yalnızca Türkçeye indirince, küçük modelin kapasitesini 99 dil yerine tek dile ayırmak anlamlı hale geldi.
  4. İlk deneme: Yalnızca FLEURS (2.864 örnek) ile WER %13,7. Eğitim kaybı sıfıra yaklaşırken validasyon kaybı düzleşti; daha fazla veri değil, daha çeşitli veri gerekiyordu.
  5. Son eğitim: FLEURS + WorldSpeech + ISSAI TSC, 13.864 örnek, 2.500 adım: WER %14,03.
  6. Dağıtım: Konuşmacı tanıma da gerektiği için ASR, konuşmacı tanıma ve diarization’ı tek pakette sunan sherpa-onnx’e geçtim. Hugging Face modelini OpenAI-whisper formatına kendi yazdığım ve strict=True ile doğruladığım bir dönüşümle çevirip ONNX’e aktardım.
  7. Cihaz üstü sonuç: INT8 ONNX modeli fp32’ye karşı doğrulandı: WER %16,1 / CER %3,0 (N=100, FLEURS).

Telefonda bulunan zayıflık

Gerçek telefon testinde kısa ve günlük ifadelerde hata yaptığını gördüm: “naber” → “maber”, “ses deneme” → “ses taneme”. Eğitim verisinin tamamı resmi dile yakındı (okunmuş metin, meclis kaydı, TV haberi). sherpa-onnx’in Whisper uygulaması beam search desteklemediği için (kaynak kodda kontrol ettim) bunu çözme ayarıyla düzeltemezdim. Çözüm olarak, kısa ve doğal komut cümleleri içeren Speech-MASSIVE’i eğitim karışımına katıp eğitimi son checkpoint’ten sürdüren bir adım ekledim.

Konuşmacı tanıma

ResNet34 tabanlı konuşmacı modeli, temiz Colab kayıtlarında 0,84 eşikle çalışıyordu. Gerçek telefon mikrofonunda doğru konuşmacının skorları bile 0,52 – 0,83’e düştü. Cihazda ölçtüğüm skorlara göre (doğru konuşmacı 0,52 / 0,64 / 0,79 / 0,83, başkası 0,49) eşiği 0,55’e çektim. Ayrıca VAD bölümlerinin paralel değil sıralı işlenmesi gerektiğini buldum; aksi halde art arda konuşmalarda sıra karışıyordu.

Aynı klasörde: telaffuz değerlendirme

İngilizce telaffuz için kelime düzeyinde “doğru / yanlış” kararı hedefledim; precision %12 – 32’de kaldı, bu kadar yanlış alarm kullanılamaz. Tasarımı fonem düzeyinde güven skoruna çevirdim ve bu ayrı bir uygulamaya dönüştü: Telaffuz Testi.