Geçen seneki Kasım ayındaki yazımızda
Eğer "o kadar yazını okuduk, bizim de üzerimizde borç var bizde bir ucundan destek olalım" deyip bir şeyler karalarsanız bizde burdan yayınlamaya çalışırız.
diye bir duyruda bulunmuştuk . Bu Duyrumuza İstanbuldan Şubat ayında bir cevap geldi. Firmalarında yaz stajına gelen öğrencilerle beraber yaptırdıkları bir projeyi anlatmak istiyorlardı.
Yazı yanınlanmak üzre geldi ama, öncelikle yazılım atölyesinde sunum yapılması tercih edildiğinden, yayınlanması bu zamana kadar tehir edildi.
Şimdi bu yazıyı yayınlamaya başlıyoruz ve sizlerden de yenilerini bekliyoruz...
Yapay Sinir Ağları ile Ses Tanıma
Yapay Sinir Ağları ile Ses Tanıma
Ses Tanıma genel olarak üç aşamadan
oluşuyor.
1) Ön işleme
2) Öznitelik Çıkarma
3) Tanıma ( YSA, başka Yapay Zeka yada Makine Öğrenmesi (Machine Learning) ile)
2) Öznitelik Çıkarma
3) Tanıma ( YSA, başka Yapay Zeka yada Makine Öğrenmesi (Machine Learning) ile)
Deneysel olarak yaptığımız
çalışmada biz, RASTA-PLP, MFCC ve LP yöntemlerini
gerçekleştirdik. Bu yazıda akustik vektörlerin MFCC (mel
frequency cepstral coefficients) yöntemiyle oluşturulması
anlatılıyor.
Önbilgi
Önbilgi
- Dünyanın en başarılı konuşma tanıma sistemi bizler olduğumuzdan, birçok yöntem kulak, gırtlak, dudak, dil, dişi beyin vs gibi organlarımızın özellikleri incelenerek ve taklit edilerek gerçekleştirilmiştir.
- Konu çok uzun ve detaylı olduğundan bu yazı daha çok bizim izlediğimiz yöntemlere yüzeysel bir bakış olarak düzenlendi. Birçok adım tek başına ayrı bir araştırma konusu olabilecek nitelikte ve derin matematiksel temellere oturan bir yapıda olduğundan pek detaylandırılmadı. Detaylar için konu ile ilgilenen arkadaşlara kapılar her zaman açık.
- Yapılan çalışma literatürde Ayrık Sözcük Tanıma (isolated word recognition) olarak geçiyor. Nispeten daha kolay bir yöntem olduğundan başlangıç çalışmaları için bu yöntemi seçtik.
- Konuşma olarak nitelenen kavram aslında küçük ses parçalarının bir araya gelmesi ile oluşur. Bu ses parçalarını ses telleri, ağız boşluğu, dil, diş ve dudak gibi organlarımızı kullanılarak oluşturuyoruz.
- Ses işareti mikrofondan analog bir elektrik sinyali olarak çıkar. Bunu mikroişlemcinin anlaması için sayısal olarak ifade edilmesi gerekiyor. Dönüştürme işlemi analog işaret örneklenerek yapılıyor.
- Genelde işaret işleme uygulamalarında farklı düzlemlerde çalışmak yeni yetenekler kazandırdığından, başarılı uygulamalar için mecburen düzlem dönüşümleri kullanmak durumunda kalıyoruz. Fourier transform, Z-transform gibi iki örnek sayısal işaret işlemede sık kullanılan ikisi olarak gösterilebilir.
- Ses işaretinin Fourier dönüşümü ile frekans düzlemindeki ifadesi o sesin spektrumu olarak adlandırılır ve sesin frekans bileşenlerini gösterir.
- Buradaki işlem adımları için hazır kodlar bulunabilir belki, ama biz tümünü arkadaşlarla beraber yazdık ki staj bir işe yarasın. Yaklaşımımız bu yönde.
Kısa bir önbilgi sonrası basit bir
ses tanıma sistemini adım adım gerçekleştirelim;
Sesin Kaydedilmesi
Yukarıda fener sözcüğünün seslendirilmesi sonucu oluşan işaretin zamana bağlı fonksiyon grafiğini
görebilirsiniz. E harfinin yüksek enerjili ve daha düşük frekanslı olduğu açıkça görülüyor.
DC Bileşenin Temizlenmesi
Ses kaydedilirken işaret üzerinde donanımsal vs gibi sebeplerden bir DC (doğru akım) değer olabilir.Sesin Kaydedilmesi
Yukarıda fener sözcüğünün seslendirilmesi sonucu oluşan işaretin zamana bağlı fonksiyon grafiğini
görebilirsiniz. E harfinin yüksek enerjili ve daha düşük frekanslı olduğu açıkça görülüyor.
DC Bileşenin Temizlenmesi
DC bileşeni ses işaretine + veya – bir ofset ekleyerek işaretin formunu değiştirir. Birebir aynı işaret
dahi olsa DC bileşenleri farklıysa tanıma olumsuz etkilenebiliyor. Bu nedenle ilk aşamada işaretten DC bileşenin temizlenmesi gerekiyor..
Önvurgu Filtresi
Ses işareti ağzımızdan çıkarken
daha çok dudaklardan dolayı yüksek frekans bileşenleri bir miktar
zayıflar. Bu etki yüksek frekansların birinci derecenden basit bir
FIR filtre ile önvurgu işleminden geçirilmesi ile giderilebiliyor.
Aşağıda filtrenin Z düzlemindeki ifadesini bulabilirsiniz.
H(z)=1 – a * z-1
Buradaki a
katsayısı genelde 0.95 ve 1 arasında seçilir.(a değeri filtrenin
kesim frekansını değiştiriyor) Bizim uygulamamızda seçtiğimiz
rakam 0.97 oldu. Z düzlemindeki ifadenin programatik şeklini
basitçe her örnekten kendinden önceki örneğin a katını
çıkarmak olarak düşünebilirsiniz.
w[i] = w[i] –
a * w[i -1]
Aynı işaretin önvurgu sonrası hali.
Konuşma Tespiti ( voice activty detection)
VAD olarak kısaltılan (bu yazıda KT
olarak ifade edilecek) konuşmanın başladığı ve bittiği
yerlerin doğru tespiti konuşma tanımada hayati önem taşır.
Başarılı bir tespit sistemi tasarlayabilmek başlı başına zor
bir uygulamadır. Bazı temel zorlukları şöyle sayabilirim;
Gürültülü ortamlarda yapılan
kayıtlarda, düşük enerjili ve yüksek frekanslı harfler.
F, S gibi sessizlerle başlayan
sözcükler. N, M gibi burun veya dudak sessizleri ile biten
sözcükler. P gibi patlamalı seslerle başlayan veya biten
sözcükler.
Sözcük söylendikten hemen sonra veya
söylenmeden hemen önce nefes alıp verme olan durumlar.
Biz KT için işaretin enerji
seviyeleri ve oto-korelâsyonunu kullanan basit bir karma sistem
uyguladık.
Gürültü Giderme
Gürültü giderme işlemi de
genellikle KT öncesi ve sonrasında birçok aşamada yapılır.
Bizim uyguladığımız yöntem;
- KT öncesi çıtırtı,tıkırtı gibi sesleri gidermek.
- Konuşmayı tespit ettikten sonra muhtemel konuşma dışı bölgelerin spektrumunu kullanarak konuşmaya ait spektrumda iyileştirmeler yapmak.
- Konuşmaya ait spektrum üzerinde filtreleme ve polynomial regression işlemleri ile düzenlemeler yapmak şeklinde.
Çerçeveleme - Pencereleme
Sözcüklere ait öznitelik
vektörlerinin çıkarımı için en başarılı yöntem, konuşmayı
oluşturan temel sesler mertebesinde inceleme yapmaktır.
Gırtlak ve ses yolu üzerine yapılan
araştırmalar, konuşmayı oluşturan her bir temel sesin 15ms –
25ms periyodunda seslendirildiğini ortaya koymuştur.
Bu bilgi ışığında şimdiki aşamada
elimizdeki ses sinyalini yaklaşık 20ms uzunluğunda çerçevelere
böldük.
Her bir çerçeveyi 10ms kaydırarak
işlemi gerçekleştirdik ki geçişlerde herhangi bir foneme ait
bilgiyi kaybetmeyelim.
Çerçeveleme ortaya spectral leakage
adı verilen bir problemi de beraberinde getiriyor. SL problemini
aşmak içinde pencereleme adı verilen bir yöntem uyguladık.
Pencereleme için en çok yukarıda
görülen hamming filtresi kullanılıyor ancak biz uygulamamızda
aşağıdaki Hamming-Cosine penceresini tercih ettik
Çerçeveleme ve pencereleme ardından
ses işaretine ait bir bölümü aşağıda görebilirsiniz. Grafikte
fener sözcüğünün başlangıcındaki f sesinin başlangıcına
ait bileşenleri görmekteyiz.
Hamming filtresi sonucu işaretin her
bir çerçevesindeki değişikliğe dikkat ediniz.
Hiç yorum yok:
Yorum Gönder