9 Şubat 2011 Çarşamba

Speech Synthesis Algorithms(Konuşma Sentezleme Algoritmaları)

Merhaba arkadaşlar, uzun zamandır bloga yazı yazamıyordum ama dönüşüm muhteşem oldu bence:) Bugün sizlerle Text to Speech algoritmalarının nasıl çalıştığından ve eksik, hatalı yönlernden bahsedeceğiz. Yazıyı okurken bazı cümlelerin biraz havada kaldığını düşünebilirsiniz. Örneğin "Kullandığımız Android uygulaması" falan gibi. Proje raporlarım üzerinden alıntı yaptığım için bu vb cümlelerle karşılaşabilirsiniz ama bu cümlelerin konumuzun anlaşılmasını etkilemeyeceğini düşündüğüm için tekrar düzenleme yoluna gitmedim.  Daha fazla laf kalabalığı yapmayalım ve konumuza başlayalım...

Konusma Sentezleme(Speech Synthesis)


Konuşma sentezleyici yazılı(text) bir veriyi alır ve bunun konuşma dilinde çıktısını verir. Ayrıca konuşma sentezleyici literatürde text to speech (TTL) olarakta bilinir.
Yazılı bir metinden konuşma sentezlemenin ana adımları aşağıdaki gibidir

1)Yapı Analizi(Structure Analysis):

Yazılı metni işler ve paragrafların nerede başladığına, cümlelerin nerede başlayıp nerede bittiğine karar verir. Bir çok dilde noktalama işaretleri ve tarih formatları bu adımda kullanılır.

2)Metin Önişleme(Text pre-processing):


Dilin özel yapısına karşı girdi metni analiz edilir. İngilizce ‘de kısaltmalar, akronimler, tarihler, zamanlar, numaralar, para miktarları, e-mail adresleri ve diğer birçok veri türü için özel bir işleyiş gereklidir. Diğer diller de bu tür veriler için özel bir işleyişe ihtiyaç duyarlar ve birçok dil farklı özel gereksinimlere ihtiyaç duyar.

İlk 2 adım sonrasında yazılı metni konuşma formatına çevirir. Aşağıdaki örnekler yazılı metin konuşma formatı arasındaki ilişkiyi gösterir.

St. Mathews hospital is on Main St.

“Saint Mathews hospital is on Main Street”

Add $20 to account 55374.

”Add twenty dollars to account five five, three seven four.”

Leave at 5:30 on 5/15/99

“Leave at five thirty on May fifteenth nineteen ninety nine.”

Diğer adımlar yukarıdaki çıktıları konuşmaya çevirmek içindir.

3)Yazılı Metinden Ses Birimine Çevirme(Text-to-phoneme conversion):

Her bir kelimeyi ses birimlerine çevirir. Ses birimi(hece-phoneme) bir dildeki seslerin en basit birimidir. Amerikan İngilizcesinde yaklaşık 45 adet ünlü ünsüz dahil ses birimi bulunur. Örneğin, “times” sözcüğü 4 adet ses biriminden yararlanılarak seslendirilir(t ay m s). Farklı diller de farklı ses birimleri vardır.

4)Vezin (Ölçü) Analizi(Prosody Analysis):
Cümle yapısı süreci, kelime ve sesleri cümle için uygun vezni(aruz) bulmak için kullanılır. Vezin kelimeyi söylerken ağızdan çıkan seslerden ayrı olarak daha fazla konuşma özelliği içerir. Bunlar; ses perdesi(pitch or melody), zamanlama(timing or rhythm), duraksama(pausing), konuşma oranı(speaking rate), kelimeler üzerindeki vurgu ve diğer bir çok özellik. Doğru vezin doğru konuşma seslerini bulmak için ve doğru anlamı verebilmek için önemlidir.

5)Dalga Üretimi(Waveform Production):
Son olarak, fonem ve vezin bilgisi her bir cümle için ses dalgası üretmek için kullanılır. Fonem ve vezin bilgisinden ses dalgası üretmenin birçok yolu vardır. En güncel sistemler bunu iki yolla yaparlar. Bunlardan biri kayıtlı insan sesi parçalarını birleştirerek diğeriyse sinyal işleme tekniklerini kullanarak yapar.

Konuşma Sentezi Sınırlamaları

Konuşma sentezleyiciler yukarıdaki adımları uygularken bazı hatalar yapabilirler ve insan kulağı bu hataları yakalamada çok başarılıdır. Geliştiriciler tarafından iyi geliştirilmiş bir konuşma sentezleyici bu tür hataları en aza indirebilir ve konuşma kalitesini artırabilir.

Android in kullandığı Java konuşma Apisi(Java Speech API) ve java konuşma işaretleme dili (Java Speech Markup Language(JSML)) geliştiricilere konuşma kalitesini artırmak için birçok olanak sunar.

Java sentez işaretleme dili(Java Synthesis Markup Language) girdi yazısının nasıl işaretleneceğini belirler. Özelliklerinden bazılarından kısaca bahsedelim:

* Paragrafın ya da cümlenin işaretleme başlangıcını ve bitişini belirleme yeteneği.

* Herhangi bir kelimenin telaffuzunu belirleme, sözcük veya cümle kısaltma ya da diğer özel, yazı ifade etme yeteneği

* Vezin geliştirmek için aleni duraksama kontrolü, sınırlama, vurgulama, ses perdesi, konuşma oranı ve yükseklik.

Bu saydığımız özellikler geliştirici ve kullanıcılara birazdan bahsedeceğimiz aşağıdaki gibi hataların üstesinden gelebilme olanağı verir. Şimdi hata kaynaklarını ve bu hata kaynaklarını nasıl minimize edeceğimizi inceleyelim.

1)Yapı Analizi(Structure Analyses):Noktalama ve formatlama kesin olarak bir cümlenin ya da paragrafın nerede başlayıp nerede bittiğini gösteremeyebilir. Örneğin “U.S.A.” kısaltması yanlış çevrilerek bir cümle sonu olarak algılanabilir.

Çözüm: JSML de paragraf ve cümlelerin açık biçimde işaretlenmesi bu tür yapısal hataları engelleyebilir.

2)Metin Önişleme(Text pre-processing): Sentezleyicinin bütün cümle ve kelime kısaltmalarını bilmesinin ihtimali yoktur. Ayrıca bütün tarih ve zamanları da bilmesinin imkanı yoktur. Örneğin: 8/5 bizim yazımızda 5. Ayın 8’i kastedilirken 8/5 sonucunu okuyabilir ya da 1998 tarihi İngilizcede “nineteen nınety eight” olarak okunması gerekirken “one thousand nine hundred ninety eight” olarak okunabilir. Bu da anlam karmaşasına yol açabilir.

Çözüm: JSML in SAYAS elementi yazı kısaltmaları için değişiklikler sunar.

3)Yazılı Metinden Ses Birimine Çevirme(Text-to-phoneme conversion): Birçok sentezleyici yüz binlerce kelimeyi doğru olarak telaffuz eder fakat her zaman tahmin edilmesi gereken değişik ve olağandışı isim, şirket ismi vb. şeyler ya da yazılışları aynı ama okunuşları farklı sözcükler vardır ve bunların tahmin edilmesi büyük bir sorundur.

Çözüm: JSML in SAYAS elementi alışılmadık sözler için fonetik telaffuz sağlar.

4)Vezin (Ölçü) Analizi(Prosody Analysis): Bir cümleyi doğru olarak ifade edebilmek, doğru vurguyu yapabilmek, doğru ses perdesini tutturabilmek vb. şeyler için cümlenin anlamını anlamak gereklidir ve maalesef bilgisayarlar bunu yapamazlar.

Çözüm: JSML in EMP, BREAK ve PROS elementleri yazı üzerinde vurguyu, duraksamayı vb işler için kullanılabilir.

5)Dalga Üretimi(Waveform Production): Dudak, ağız, akciğer gibi insan sesinin özelliğini veren aparatlar olmadan ses sentezleyicisinden çıktı olarak çıkacak ses genellikle yapay(robotik) olur. Bu mekanik veya robotik ses insan sesinden kolaylıkla ayırt edilebilir. Bazı şartlar altında bu robotik ses tercih edilebilir fakat çoğu zaman sentezleyiciden gelen sesin daha kolay anlaşılabilir ve dinlenilebilir olduğu için insan sesine benzemesi tercih edilir.

Çözüm: Maalesef Java Speech API ve JSML direk olarak bu konu hakkında pek bir şey yapamazlar.

Konuşma Sentezi Değerlendirmesi

Konuşma sentezleyicilerin kilit noktaları sentezlenen sesin anlaşılabilirliği, kullanıcılar tarafından kabul görüşü ve çıkış kalitesidir. Konuşma sentezleyicilerin kalitesinin nasıl hesaplanacağının ve hangi faktörlerin çıktı kalitesine etki edeceğinin bilinmesi özellikle uygulama alanında önemlidir.

İnsanlar neredeyse yaşam süreleri boyunca dinlerler ve konuşurlar. Bunun sonucunda da insan kulağı ve beyni sesler üzerine çok hassastır. Konuşma üzerindeki en ufak değişiklikleri, duygusal duruları, aksanları, konuşma problemlerini rahatlıkla algılayabilir. Fakat şu anki konuşma sentezleyicilerin konuşması bu ufak değişiklikleri ses ile iletemeyecek durumdadır. Bu yüzden dinleyiciler konuşma sentezleyiciden çıkan sesleri anlayabilmek için ekstra efor sarf etmelidirler. Yukarıda sayılan gibi bir çok nedenden dolayı yeni kullanıcılar konuşma sentezleyicilerle ilk tanıştıklarında kendilerini rahatsız ve tatmin olmamış hissederler.

Geliştiriciler konuşma sentezleyicilerin kalitesinin değerlendirmesini yaparken 2 önemli faktör vardır. Anlaşılabilirlik ve doğallık. Anlaşılabilirlik sentezlenen konuşmanın kullanıcılar tarafından güvenli olarak anlaşılmasının göstergesidir. Doğallık ise sesin ne kadar insan sesine yaklaşabildiğiyle ve kullanıcılara bir insanla konuşuyormuş hissi vermesiyle alakalıdır.

0 yorum:

Yorum Gönder