Cumartesi, Mayıs 19, 2012

Yapay Sinir Ağları ile Ses Tanıma 4


Eveet Nihayet serimizin sonuna ermiş bulunuyoruz. YSA uygulaması kısmında yine söz bize kaldı...

Tuhaf tuhaf sembollerle dolu tuhaf formüller,bir o kadar acayip grafiklerden sonra elimiz de kalan nedir diye bakıyoruz.
Başlangıçta
Kaliteli bir sesin 20 ms kısmındaki örnek sayısı
yaklaşık 20 * 10^-3 * 44100 = 882.
Şeklindeki veriyi her pencere için  36 adet veriye düşürdük, İlaveten  Sözcüğün uzunluğuna söylenişinin hızına göre değişik sayıda penceremiz var.
Değişken  sayıdaki  veri; YSA ve  pekçok Yapay öğrenme metodu için uygun değil. keza minimum 200 pencereden(200x36) gibi pek de pratik olmayan veri ortaya çıkıyor.

YSA yı uygulayabilmemiz için iki şey yapmamız lazım
  • Sabit bir uzunluğa çevirmek
  • Pratikte kullanılabilir bir sayıya düşürmek


Bir önceki yazıda grafik olarak gördüğünüz, metod şuydu
En basit uygulamada; Tüm veriler kendi içlerinde, 0. bileşenlerin
ortalaması, 1.bileşenlerin ortalaması……n.bileşenlerin ortalaması gibi 36
adet sözcüğü ifade eden rakama düşürülüyor.
Çok pratik ve yeterince küçük.Fakat o kadar uğraşarak damıttığımız özniteliklerin heba olmasına sebep oluyor. Bir birinden çok farklı sözcükler için çalışsada nispeten yakın sözcüklerde muhtemelen işimiz görmeyecektir.

Biraz daha geliştirsek mesela ortalamaya ek olarak  minimum, maksimum, standart sapma değerleride  ( 4x36 ) şeklinde ifade edebiliriz.

Bizim tercih ettiğimiz yaklaşım biraz daha gelişkin ;
Elimizdeki bütün verileri kullanarak herbir seviye için
histogramlar hesaplamak.
Histogram değerlerini 10 seviyede hesaplarsak. 10 x 36 = 360 adet katsayı
ile bütün bir sözcüğü ifade edebiliyoruz.
yeterince makul ve sabit uzunlukta

Gelelim YSA uygulamamıza;
Küçük bir veri seti hazırlandı 6 değişik kelime 10 kez seslendirildi.
60 veriden oluşan bu setin 48 tanesini eğitim 12 tanesini test için kullandık.
Giriş : 360
Çıkış : 6
şeklinde bir YSA tasarlandı ve FannTool ile eğitildi, Ulaştığımız sonuçlar

Eğitim Verisi : %100
Test Verisi     : % 91
Sonuçda çok güzel bir çalışma ortaya çıkarmışlar, İnşallah devamını getirip projeyi  ticari bir hale getirirler.
Emeği geçenlere, bizle de paylaştıkları için teşekkür ediyoruz. Daha Nice okuyucu yazılarına diyoruz...

Not:
  • Bütün Çalışma C# ile yazıldı,Dil fanatiği değilim ama hem lehinde hem aleyhinde olanlar var. Sadece sürükle bırak tarzı uygulama yapanlar ve sadece öyle olduğunu zannettiklerinden eleştirenler, C# ile böyle uygulamada yazılabiyor bilmem size bir şey ifade ediyormu ?
  • Stajı angarya olarak gören Öğrenciler, bakınız stajda neler yapılabiliyor...
  • Stajeri angarya işe koşturulacak sebil zanneden firmalar, bakınız doğru yönlendirmeyle neler yapabiliyorlarmış...

5 yorum:

Adsız dedi ki...

Merhaba,
Öncelikle yazınız için teşekkürler.Şu an bende ses tanımayla uğraşıyorum ve ysa ile yapacağım. Ancak bahsettiğiniz gibi ysa giriş sayısının sabit olması gerekiyor.Bunu nasıl gerçekleştirdiğinizi detaylı anlatabilirmisiniz?
İyi çalışmalar.

bluekid dedi ki...

Yazıda geçiyor histogram ile yapıyorum

Uğur dedi ki...

Histogram ile ama nasıl , histogramla yaptıünızı zaten gördüğümüz için onun açıklamasını soruyoruza

Uğur dedi ki...

Histogramla ama nasıl , matematiksel izahı ne , Zaten yazıda histogasm ile yazdıüınızı gördüğümüzden soruyoruz

bluekid dedi ki...

sonuçda çıkarılan özniteliklerde bir çeşit zaman serisi uzunluğuda sabit değil
bu serinin histogramını alıyoruz
yani serideki değerlerin dağılımı
farklı seslerdekiyle daha fazla farklı varsayımıyla
elbette başka sistemlerde düşünülebilir benimkisi biraz sade...