Speech-to-Text
Konuşmadan metne dönüşüm (STT) veya otomatik konuşma tanıma, Whisper gibi sinir ağlarıyla konuşulan sesi metne aktarır ve performansı sözcük hata oranıyla ölçülür.
Konuşmadan metne (STT), otomatik konuşma tanıma (ASR) veya kısaca konuşma tanıma olarak da adlandırılır ve konuşma sesini yazılı metne dönüştürür. Bir STT modeli, dalga biçimini zaman-frekans gösterimine dönüştürür, bir sinir ağı kullanarak karakterlere veya sözcük parçalarına eşler ve genellikle noktalama işaretleri, zaman damgaları ve konuşmacı etiketleri içeren bir döküm oluşturur. Bu, sesli asistanların, canlı altyazıların, toplantı notlarının ve çağrı analizlerinin girdi katmanıdır; dökümler de arama, özetleme ve niyet tespiti için doğal dil işlemeye (NLP) aktarılır. Etiketsiz seslerle yapılan öz denetimli ön eğitim ve internetten alınan 680.000 saatlik çok dilli sesle eğitilmiş OpenAI'nin Whisper modeli gibi büyük ölçekli zayıf denetimli eğitimler, modern sistemlerin farklı aksanlarda, arka plan gürültüsünde ve onlarca dilde doğru sonuçlar vermesini sağladı.
Konuşmadan Metne Dönüştürme Nasıl Çalışır?#
Ses önce yeniden örneklenir (Whisper için 16 kHz) ve zaman içindeki frekans bantlarının enerjisini gösteren bir ızgara olan log-mel spektrogramına dönüştürülür. Whisper, her 10 milisaniyede bir alınan 25 milisaniyelik pencerelerde 80 mel bandı hesaplar; large-v3 modeli ise 128 bant kullanır. Evrişimli ve Transformer katmanlarından oluşan akustik kodlayıcı, bu çerçeveleri özelliklere dönüştürür. Evrişimin yerel ses örüntülerini yakaladığı Conformer kodlayıcı, evrişimi bir ifadenin uzak bölümlerini ilişkilendiren öz dikkat ile iç içe geçirir ve harici bir dil modeli olmadan LibriSpeech test-clean ve test-other kümelerinde sırasıyla %2.1 ve %4.3 sözcük hata oranlarına ulaşmıştır. Üç kod çözücü ailesi, kodlayıcı özelliklerini metne dönüştürür:
- Bağlantıcı zamansal sınıflandırma (CTC): Her ses çerçevesi için bir karakter, sözcük parçası veya boşluk tahmin eder; ardından tekrarları birleştirip boşlukları kaldırır. Tüm çerçeveler paralel olarak çözümlendiğinden CTC hızlıdır.
- Dönüştürücüler: RNN-T ve sonraki sürümleri, ses çerçeveleri geldikçe belirteçler üretir; bu nedenle telefonlarda ve canlı altyazılarda akış hâlinde tanımaya uygundur.
- Dikkat kullanan kodlayıcı-kod çözücüler: Bir metin kod çözücü, kodlanmış sese dikkat ederken belirteçleri teker teker üretir. Whisper, 30 saniyelik pencereleri bu yöntemle çözümler ve dili belirlemek, zaman damgalarını tahmin etmek veya İngilizceye çevirmek için özel belirteçler kullanır.
Akış sistemleri, daha fazla ses geldikçe değişen kısmi dökümleri gösterir ve konuşmacı durakladığında bir bölümü sonlandırır:
Kod çözümlemesinden sonra ters metin normalleştirme, "twenty five dollars" gibi konuşma biçimlerini "$25" olarak yeniden yazar; konuşmacı ayrıştırma ise dökümü kimin ne zaman konuştuğuna göre böler.
Eğitim Verileri ve Modeller#
- Öz denetimli ön eğitim: Meta'nın wav2vec 2.0 modeli, etiketsiz sesin bazı bölümlerini maskeleyerek konuşma gösterimlerini öğrenir. 53.000 saatlik etiketsiz konuşma üzerinde önceden eğitilip yalnızca 10 dakikalık yazıya dökülmüş sesle ince ayar yapıldığında LibriSpeech'in clean ve other test kümelerinde %4.8 ve %8.2 sözcük hata oranlarına ulaştı.
- Büyük ölçekte zayıf denetim: Whisper, çevrimiçi bulunan kusurlu dökümlerle eşleştirilmiş sesler üzerinde eğitilir. Modellerinin boyutu tiny için 39 milyon parametreden large için 1.55 milyara kadar çıkar. 809 milyon parametreli, large-v3'ün optimize edilmiş sürümü olan turbo modeli, large'dan yaklaşık 8 kat hızlı çalışır.
- Halüsinasyon: Dikkat kod çözücüleri dil modelleri gibi davranır; bu yüzden sessizlik veya gürültü, akıcı metinler uydurmalarına yol açabilir. Careless Whisper araştırması, Whisper dökümlerinin yaklaşık %1'inin seste bulunmayan tümce veya cümleler içerdiğini ve bunun uzun duraklamalar veren konuşmacılarda daha sık görüldüğünü ortaya koydu.
Konuşmadan Metne Dönüştürme ve İlgili Terimler#
- Konuşma tanıma ve ASR: Konuşmadan metne dönüştürmenin eş anlamlılarıdır.
- Konuşmacı tanıma ve konuşmacı ayrıştırma: Ne söylendiğinden ziyade kimin konuştuğunu belirler. Konuşmacı ayrıştırma, bir kaydın bölümlerini konuşmacılara göre etiketleyerek toplantı dökümündeki her satırın kime ait olduğunu gösterir.
- Doğal dil anlama (NLU): Dökümün anlamını, örneğin "saat yedide iki kişilik masa ayırt" ifadesindeki niyeti ve varlıkları yorumlar.
- Metinden konuşmaya (TTS): Ters yönde çalışarak metinden konuşma üretir. Sesli asistanlar STT'yi, bir büyük dil modelini ve TTS'yi art arda kullanır.
Gerçek Dünya Uygulamaları#
- Altyazılar ve erişilebilirlik: Telefonlardaki, video platformlarındaki ve toplantı yazılımlarındaki canlı altyazılar, konuşmayı sağır ve işitme güçlüğü çeken kişiler için erişilebilir, herkes için de aranabilir hâle getirir.
- Klinik dokümantasyon: Ortam dinleme sistemleri, doktor-hasta konuşmalarını yazıya döker ve elektronik sağlık kaydı için klinik notlar hazırlar.
- İletişim merkezleri: Yazıya dökülen çağrılar aramayı, uyumluluk denetimlerini ve duygu analizini besler.
- Görsel sistemlerin sesle kontrolü: "Kırmızı sırt çantasını bul" gibi yazıya dökülmüş bir komut, YOLOE-26 için metin istemine dönüşür. Ultralytics YOLO26 modelinin açık sözcük dağarcıklı sürümü olan YOLOE-26, eğitim sınıflarında hiç bulunmamış olsalar bile çıkarım sırasında adı verilen kategorileri tespit eder ve segmentlere ayırır.
Doğruluğu Ölçme#
Sözcük hata oranı (WER), dökümü bir referans döküme dönüştürmek için gereken değiştirme, silme ve ekleme işlemlerini sayar ve bu sayıyı referans dökümdeki sözcük sayısına böler. Bu kod, sözcük düzeyindeki düzenleme uzaklığını kullanarak WER'ı hesaplar:
import numpy as np
reference = ["turn", "on", "the", "kitchen", "lights"]
hypothesis = ["turn", "of", "the", "kitchen", "light", "please"]
# Edit distance over words: d[i, j] is the cheapest way to turn the first i reference words into the first j hypothesis words
d = np.zeros((len(reference) + 1, len(hypothesis) + 1), dtype=int)
d[:, 0] = np.arange(len(reference) + 1) # deletions
d[0, :] = np.arange(len(hypothesis) + 1) # insertions
for i in range(1, len(reference) + 1):
for j in range(1, len(hypothesis) + 1):
substitution = d[i - 1, j - 1] + (reference[i - 1] != hypothesis[j - 1])
d[i, j] = min(substitution, d[i - 1, j] + 1, d[i, j - 1] + 1)
# Word error rate: (substitutions + deletions + insertions) / words in the reference
print(f"{d[-1, -1]} errors / {len(reference)} words = WER {d[-1, -1] / len(reference):.0%}")3 errors / 5 words = WER 60% değerini yazdırır: "on" yerine "of" ve "lights" yerine "light" kullanılması değiştirme, "please" ise eklemedir. Ekleme işlemleri de sayıldığından WER %100'ü aşabilir. Open ASR Leaderboard gibi kıyaslamalar, puanlamadan önce büyük-küçük harfleri, noktalama işaretlerini ve yazım farklılıklarını normalleştirerek "Lights." ile "lights" ifadelerinin eşleşmesini sağlar. Çince ve Japonca gibi sözcükler arasında boşluk kullanılmadan yazılan dillerde bunun yerine karakter hata oranı kullanılır.










