İçeriğe geç

Text-to-Speech (TTS): Metni Sese Dönüştürme Sanatı

Güncellendi: saat 08:30Düzeltme öner

Text-to-Speech (TTS), yazılı metni konuşma sesine dönüştüren sistemlerin genel adıdır. Sistem yalnızca harfleri seslendirmez; sayıların, kısaltmaların ve noktalamanın nasıl okunacağını belirler, telaffuz ile ritmi modeller ve sonunda hoparlörden çalınabilen bir ses dalgası üretir.

TTS nasıl çalışır?

TTS mimarileri aynı işlem hattını kullanmak zorunda değildir. Bazı sistemlerde metin ön işleme, akustik model ve vocoder ayrı bileşenlerdir. VITS gibi uçtan uca yaklaşımlar ise bu sınırların bir bölümünü tek bir eğitim yapısında birleştirir. Yine de sistemi anlamak için aşağıdaki üç soruya ayırmak kullanışlıdır.

1. Metin nasıl okunacak?

Metin ön ucu ham girdiyi konuşulabilir bir gösterime dönüştürür. Bu aşamada:

Örneğin 120 değeri bağlama göre “yüz yirmi”, bir otobüs hattı numarası veya bir ürün kodu olarak farklı okunabilir. Bu nedenle text normalization yalnızca karakter değiştirme değil, alan ve dil kuralı gerektiren bir adımdır.

2. Konuşmanın akustik yapısı nasıl temsil edilecek?

Klasik sinir ağı tabanlı boru hatlarında akustik model; karakter, fonem veya başka bir dilsel gösterimden mel-spektrogram gibi zaman-frekans özellikleri üretir. Süre, perde, enerji ve vurgu kararları konuşmanın ritmini ve tonlamasını etkiler.

Tacotron 2 bu ayrımın bilinen örneklerinden biridir: metinden mel-spektrogram tahmini yapan bir ağın çıktısı, dalga biçimi üreten değiştirilmiş bir WaveNet vocoder’a koşul olarak verilir.

Bu, her güncel TTS sisteminin mutlaka mel-spektrogram ürettiği anlamına gelmez. VITS, metinden konuşmaya dönüşümün farklı bileşenlerini koşullu değişkenli autoencoder ve adversarial eğitimle paralel, uçtan uca bir yapıda birleştiren başka bir mimari örneğidir.

3. Dinlenebilir ses dalgası nasıl üretilecek?

Ayrı aşamalı sistemlerde vocoder, akustik gösterimi örneklenmiş ses dalgasına dönüştürür. WaveNet gibi autoregressive modeller bir sonraki ses örneğinin dağılımını önceki örneklere bağlı olarak üretirken, başka mimariler daha paralel üretim yöntemleri kullanabilir.

Seçim yalnızca ses kalitesine göre yapılmaz. Gerçek zamanlı bir okuyucuda ilk ses paketine kadar geçen süre ve streaming davranışı önemliyken, çevrimdışı üretimde toplam işleme süresi veya donanım maliyeti daha baskın olabilir.

Tarayıcıda Web Speech API ile TTS

Web Speech API, konuşma sentezini SpeechSynthesis arayüzü üzerinden sunar. Aşağıdaki fonksiyonu bir düğmenin tıklama olayından çağırabilirsiniz:

function speakTurkish() {
  const synth = window.speechSynthesis;
  const utterance = new SpeechSynthesisUtterance("Merhaba dünya!");

  utterance.lang = "tr-TR";
  utterance.rate = 1;
  utterance.pitch = 1;
  utterance.volume = 1;

  const turkishVoice = synth
    .getVoices()
    .find(voice => voice.lang.toLowerCase().startsWith("tr"));

  if (turkishVoice) {
    utterance.voice = turkishVoice;
  }

  synth.cancel();
  synth.speak(utterance);
}

Ses listesini görmek için:

const voices = window.speechSynthesis.getVoices();

for (const voice of voices) {
  console.log(voice.name, voice.lang, voice.default);
}

getVoices() yalnızca mevcut cihazda kullanılabilen sesleri döndürür. Liste işletim sistemi, tarayıcı ve kurulu ses paketlerine göre değişebilir; Türkçe ses bulunması garanti değildir. Bazı tarayıcılar ses listesini daha sonra yüklediği için ses seçimi arayüzü geliştirirken voiceschanged olayını da dinlemek gerekir. Belirli bir ses bulunamazsa örnekte utterance.lang korunur ve platformun varsayılan seçimine izin verilir.

Python ile MP3 üretme

gTTS, Google Translate’in TTS uç noktasına arayüz sağlayan üçüncü taraf bir Python paketidir:

from gtts import gTTS

tts = gTTS(text="Merhaba dünya!", lang="tr")
tts.save("merhaba.mp3")

Bu örnek çevrimdışı bir model çalıştırmaz. gTTS dokümantasyonunda belirtildiği gibi save() bir TTS API isteği yapar; dolayısıyla ağ erişimine ve uzak servisin yanıtına ihtiyaç duyar. Hassas metinleri uzak bir servise göndermeden önce gizlilik, kullanım koşulları ve veri konumu gereksinimlerini değerlendirin.

Üretilen dosyayı oynatmak ayrı bir sorumluluktur. Sunucu uygulamasında MP3’ü saklamak veya HTTP yanıtı olarak aktarmak; masaüstünde ise platforma uygun bir oynatıcı kullanmak gerekebilir.

TTS kalitesini zorlayan durumlar

Metin normalizasyonu

Tarih, para, ölçü, telefon numarası ve kısaltmalar alana göre farklı okunur. Test kümesi gerçek uygulamanın metin türlerini içermelidir.

Telaffuz

Kişi adları, marka adları, yabancı kelimeler ve kod parçaları sözlükte bulunmayabilir. Fonem sözlüğü, kullanıcı telaffuz ipucu veya modelin desteklediği başka bir kontrol mekanizması gerekebilir.

Prosodi

Noktalama tek başına doğru vurgu, duraklama ve duyguyu belirlemeye yetmez. Aynı cümle soru, uyarı veya anlatım bağlamında farklı söylenebilir.

Gecikme ve streaming

Uzun metnin tamamını üretip sonra çalmak yüksek ilk-ses gecikmesi yaratabilir. Cümlelere bölme ve streaming gecikmeyi azaltabilir; fakat bölüm sınırlarında prosodi tutarlılığını korumak gerekir.

Güvenlik ve izin

Bir kişinin sesine benzeyen çıktı üretmek teknik yeterlilikten fazlasını gerektirir. Açık rıza, kullanım hakkı, yanıltma riski ve üretilen sesin gerektiğinde işaretlenmesi ürün tasarımının parçası olmalıdır.

Uygulama seçerken kontrol listesi

  1. Gerekli dil ve lehçe gerçekten destekleniyor mu?
  2. Özel adlar ve alana özgü terimler nasıl yönlendiriliyor?
  3. Sesler cihazda mı üretiliyor, yoksa metin uzak sunucuya mı gidiyor?
  4. İlk ses gecikmesi ve toplam üretim süresi hedefi karşılıyor mu?
  5. Ses ve model lisansı hedef kullanıma izin veriyor mu?
  6. Uygulamanın gerçek metinlerinden oluşturulmuş bir telaffuz ve prosodi test kümesi var mı?

Tek bir demo cümlesinin doğal duyulması üretim kalitesini kanıtlamaz. Sayılar, kısaltmalar, özel adlar, uzun cümleler ve hatalı girdilerle tekrarlanabilir değerlendirme yapmak daha güvenilir sonuç verir.

Birincil ve resmi kaynaklar


Önceki Yazı
Systemd Nedir ve Service Nasıl Oluşturulur?
Sonraki Yazı
Hash Table ve Hash Function: O(1)'in Büyüsü