[Nasıl] SPHINX Otomatik Konuşma Kayıt Sistemi

Başlatan EsatYuce, 11 Ocak 2010 - 02:48:03

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

EsatYuce

1.) Taktim

  • Öğretim için gerekli bileşenler
  • Kayıt için verilecek bileşenler
2.) Sistemi ayarlama

  • Başlamadan önce gerekli olan yazılım
  • Veriyi ayarlama
  • Öğreticiyi ayarlama
  • Kaydediciyi ayarlama
3.) Başlangıç öğretim çalıştırma nasıl kurulur
4.) Başlangıç kod çözücü nasıl çalıştırılır
5.) Diğer araçlar
6.) Bu uygulamayı kullanmaktaki amacın nedir
7.) Öğrenmek nasıldır ve öğrenim ipuçları nelerdir
8.) Kayıt nasıl yapılır ve kayıt ipuçları nelerdir

Taktim

Bu kılavuzda, son model, HMM tabanlı konuşma kayıt sistemini kullanımı üzerinde durulacak. Kullanacağım sistem SPHINX sistemdir ve Carnegie Mellon Universitesi tarafından tasarlanmıştır. SPHINX, bugün dünyada kullanılan en iyi ve en yetenekli bir kayıt sistemidir.

Bir HMM tabanlı sistem, diğer bütün konuşma kayıt sistemleri gibi ses birimlerinin karakterlerini öğreterek konuşulan kelimeleri hafızasında tutan ve onları en düzgün bir şekilde kullanan sistemdir. Ses birimleri ile ilgili olan öğrenme işlemi öğretme olarak adlandırılır. Birimlerin en uygun sıralamasına karar veren öğrenme yetisi işlemine kaydetme veya basitçe kayıt diyoruz.

Bu yüzden, alıştırma ve kayıt için kullanacağın SPHINX sisteminin bu bileşenlerine ihtiyacın olacak. Ayrıca, SPHINX öğretici ve SPHINX kaydedici kelimelerini de yer yer bu kılavuzda kullanacağım.

Tam bir konuşma kayıt sistemi kurmak için gerekli bileşenleri nasıl indireceğine, tanımlayacağına ve çalıştıracağına dair yönergeler sana öğretilecek. Örneklendirmek gerekirse SphinxTrain ve  SPHINX-3'ü nasıl kullanacağına dair yönergeler verilecek. Eğer kaydediciler ve kendi uygulamaları hakkında daha fazla bilgiye ihtiyaç duyarsan bir CMUSphinx proje sayfasını kontrol ediniz. Bu kılavuz sana bir dil modeli nasıl oluşturacağını öğretmez. Fakat mükemmel bir rehber için CMU SLM Toolkit kontrol edebilirsin.

Bu kılavuzun sonunda bir öğretici pozisyonunda olacaksın ve bu sistemi kendi kayıt görevlerin için kullanabileceksin. Bu sistemi öğrenmekden daha önemli olan, gerçek bir HMM tabanlı ASR sisteminini kullanarak birkaç önemli konu hakkında bilgi sahibi olmaktır.

Öğretim için gerekli bileşenler

SPHINX öğreticisi, hem iyi tanımlanmış görevler için sorumlulukları hem de hangi programların çağrıldığını belirleyen betik ayarları içerir. Kodu kendi kullandığın platformda tanımlamalısın.

Öğretici, örnek konuşma sinyallerinin bir ayarını kullanarak, ses birim modellerinin parametrelerini öğrenir. Bu, öğrenim veritabanı olarak adlandırılır.  Öğrenim veritabanının bir seçeneği sana verilecek. Öğreticiye hangi ses birimini öğretmek istiyorsan, bunu ona söylemelisin. En azından öğrenim veritabanındaki her konuşma sinyalinde meydana gelen sıralamayı. Bu bilgi betik çeviri dosyası olarak adlandırılan bir dosya tarafından sağlanır. Kelimelerin sıralamaları ve konuşulmayan sesler, konuşma sinyalinde meydana gelmiş gibi yazılır ve bir etiket tarafından takip edilir ve konuşma sinyallerinin yerini tutan sıralama ile ilişkilendirilir. Öğretici daha sonra ses birimlerinin sıralamasında kelime haritasındaki bir ifadeye ses birimlerinin sıralamasını herbir sinyalle olan uyumluluğunu sağlamak için bakar. Bu konuşma sinyallerine ek olarak, veritabanı (tek bir dosya) ve iki sözlük için çeviri betiklerinin ayrı bir seti sana verilecek. Bu iki sözlükten biri ses birimleri sırasıyla dizilmiş olan mantıklı (uygun) kelimeler, diğeri ise konuşulmayan kelime veya konuşulmuş gibi görülen kelimelerdir. Ben ilkine dil ifadesi ve sonrakini doldurma ifade deyeceğim.

Özetle, öğretim için verilen bileşenler:

 1. Öğretici kaynak kodu
 2. Akustik sinyaller
 3. İlişkilendirilen çeviri betik dosyası
 4. Bir dil ifadesi
 5. Doldurma ifade

Kayıt için verilecek bileşenler

Kaydedici, verilen doğru girişleri ve kayıt görevlerini yürütecek, derlenmiş bir program ayarı içerir. Verilmesi gereken değerler şunlardır:
öğretilmiş akustik modeller, bir model içerik dosyası, dil modeli, dil ifadesi, doldurma ifade ve tanımlanması gereken akustik sinyal ayarı. Tanımlanan veri genelde test verisini ifade eder.

Özetle, kayıt için verilen bileşenler:

1. Kaydedici kaynak kodu
2. Dil ifadesi
3. Doldurma ifadesi
4. Dil modeli
5. Test verisi

Bu bileşenlere ek olarak, teşhis için öğretilen akustik modeller gerekir. Bunları kaydediciye bildirmelisin. Akustik model öğretirken, öğretici rastgele adlandırılan model içerik dosyası oluşturacak. Model içerik dosyası, öğretici tarafından kullanılan, her HMM'nin herbir durumu için sayısal kimlikler içeren basit bir dosyadır. Kaydedici bu HMM durumları için doğru parametre ayarlarına burdan erişir. Herhangi bir akustik model ayarı ile verilen ilgili model içerik dosyası kayıt için kullanılmalıdır. Model içerik dosyasının yapısı hakkında daha fazla bilgi öğrenmek istiyorsan CI model açıklama dosyası oluşturma bağlantısına bakabilirsin.    

Sistemi ayarlama

Tüm sistemini kurmak için birkaç bileşen indirip, kurman gerekir. İndireceğin tüm gerekli yazılımlar; veri paketi, öğretici ve bir SPHINX kaydedicisidir.

Başlamadan önce gerekli olan yazılım

Betikleri çalıştırmak için Perl ve kaynak kodu tanımlamak için bir C derleyici gerekir.

Perl

Betik tanımlamak için Perl gereklidir. Linux genellikle bazı Perl sürümleri ile gelir. Perl'in yüklü olup olmadığını yüklü ise hangi sürümünün yüklü olduğunu öğrenmek için şu komutu uçbirime yaz:

perl -v

Eğer yüklü Perl yoksa buradan bedava indirebilirsin.

Windows için en bilinen sürüm ActivePerlde bulunur. Eğer Windows kullanıyor ve cygwin yüklü olsa bile ActivePerl, satır karakterlerinin son düzenlemesinde daha iyi ve cygwin'den daha hızlıdır. Ek olarak, dağıtımlarda olmayan bir paketi ppm komutu kullanarak indirebilirsin.
Örneğin, File::Copy modülü indirmek için tüm yapman gereken:

perl ppm install File::Copy

C Derleyici

SphinxTrain ve TRAINX-3, sistemin hakkında temel bilgi bulmak için GNU autoconf'u kullanır. Bunlar çoğu Unix ve Unix benzeri sistemlerde derlenebilir. Linux'de ise tamamen derlenir. Kod, GNU'nun C derleyicisi (gcc) kullanarak derlenir. Bunların hepsi Linux dağıtımlarında ve çoğu platformlar için özgürce kullanılabilir.

Ayrıca Microsoft Visual C++ kullanılarak derlenen dosyaların da tekrar derlenmesine imkan veriyoruz. Örn; Doğal Windows formatları olan solution (.sln) ve project (.vcproj) dosyalarını derlemek için doğal Windows biçimi gereklidir.

Kelime Doğrultma

Kaydedicinin doğruluğunu ölçmek istiyorsan bir doğrultucu programa ihtiyacın olacak. Yaygın olarak kullanılan biri Ulusal Standart ve Teknoloji Enstitüsü (NIST)ndeki sclite'dir. Bu, onların kayıt paketlerin bir bölümünü içerir. Kayıt paketlerini NIST araçları sayfasında bulabilirsin. Yazılım buralardaki konuşma grubunda bulunabilir: ~robust/archive/third_party_packages/NIST_scoring_tools/sctk/linux/bin/sclite.

Bize gelince, CMU'da, NIST program ile aynı işi gören align program kullanmak isteyebilirsin. Fakat özelliklerden bazıları kısıtlıdır. Robust ev dizininde onu bulabilirsin: ~robust/archive/third_party_packages/align/linux/align.

Veriyi Ayarlama

Sphinx Grup, bu uygulama ile kullanılabilecek iki ses veritabanının kullanımını sağlar. Her biri kendi özelliklerine sahiptir ve sadece uygun olarak sağlanır. Sağlanan veri yüksek performanslı kayıt verisi oluşturma için yeterli değildir. Onlar sadece sistemi nasıl kullanacağına dair ön bilgi verir.

Veritabanları, veritabanları sayfasında sağlanır. Ya AN4 ya da RM1'i seç. AN4 sesi içerir, fakat çok küçük veritabanıdır. Onu, eğer deneylerinde örnek dosyalar oluşturma istiyorsan seçebilirsin. RM1, biraz daha büyüktür ve bir sistemde biraz daha performan sağlar. Eğer ses lisanslı ise sağlanmaz. Benim kullandığım örnek dosyalar doğrudan öğretici ve kaydediciler tarafından sağlanır. RM1 hakkında daha fazla bilgi için LDCye bakınız.

Gerekli adımlar:

  1. Bir dizin oluştur ve bu dizini oraya taşı:

mkdir deneme
cd deneme


   2. Ya AN4 ya da RM1'e tıklayarak ses tarballarını indir. İletişim kutusu açıldığında "Kaydet"i seç. Bunu az önce oluşturduğun deneme dizinine kaydet. Bunlar tarball terimi ile tanıdık değildir. Bu, bizim içerik dosyamız olan .tar.gz dir. İçeriklerin açılması söyle yapılır.

Not: Tarball terimi sıkıştırılmış klasör anlamına gelir ve Linux tarafından kullanılır.


  • Windows'da Windows Explorer kullanarak deneme dizinine git, ses tarbalına sağ tıkla ve WinZip menüsünde "Buraya aç"ı seç.
  • Linux/Unix'de:
# Eğer AN4 kullanıyorsan
gunzip -c an4_sphere.tar.gz | tar xf -
# Eğer RM1 kullanıyorsan
gunzip -c rm1_cepstra.tar.gz | tar xf -


Bunu bitirdiğinde, aşağıdaki içeriklere sahip bir deneme dizini oluşacak.


deneme
   * an4
   * an4_sphere.tar.gz


veya

deneme
   * rm1
   * rm1_cepstra.tar.gz


Öğreticiyi ayarlama

Kod çağırma

SphinxTrain,  subversion (svn) kullanarak veya bir tarball indirerek çağrabilir. svn depoya eklenen yeni değişimler gibi kodu güncellemek için onu kolayca yapar. Fakat svn'yi yüklemen gerekir. Tarballın kullanımı daha kolay olduğu için bunu tavsiye ederim.


  • 1.) Yine de svn'yi yüklemek istiyorsan uçbirime şu komutu girin:

sudo apt-get install subversion

svn hakkında daha fazla bilgi SVN Home'da bulunabilir.

svn'yi kullanma için şunu girip bir müddet bekleyin:

svn co https://cmusphinx.svn.sourceforge.net:/svnroot/cmusphinx/trunk/SphinxTrain


  • 2.) Tarball'ı kullanma, SphinxTrain tarballa tıklayarak indir ve iletişim kutusu açıldığında "Kaydet"i seç. Onu aynı deneme dizinine kaydet. İçeriği aşağıdaki gibi aç.

     A.) Windows'da, Windows Explorer kullanarak deneme klasörüne git, SphinxTrain tarball'a sağ tıkla ve WinZip menüsünde "Buraya aç"ı seç.

     B.) Linux/Unix'de:

gunzip -c SphinxTrain.nightly.tar.gz | tar xf -

İndirme seçeneği hakkında daha fazla bilgi cmusphinx.org sayfasının altındaki Download instructions başlığında bulunur.

Bunu bitirdiğinde, aşağıdaki içeriğe sahip bir deneme dizinin olacak

deneme

   * an4
   * an4_sphere.tar.gz
   * SphinxTrain
   * SphinxTrain.nightly.tar.gz


veya

deneme

   * rm1
   * rm1_cepstra.tar.gz
   * SphinxTrain
   * SphinxTrain.nightly.tar.gz


Derleme sakın terleme :D

linux/Unix'de:

cd SphinxTrain
configure
make


Uçbirimde bu işlemlerin yapılması biraz zaman alacaktır. Bu işlem sonunda uçbirimde şu gözükecektir:

esat@esat:~/deneme/SphinxTrain$

Windows'da:


  •   1. deneme/SphinxTrain/SphinxTrain.sln dosyasına çift tıkla. Bu, eğer yüklüyse MS Visual C++'ı açacak. Eğer değilse  Microsofta sor.
  •   2. "Build" menüsünde "Batch Build"i seç ve bütün nesneleri işaretle. "Rebuild All"a tıkla. Bu gerekli bütün çalıştırılabilirleri öğretici tarafından kuracak.

Denemeyi Kurma

Kodu derledikten sonra, bütün ilgili çalıştırılabilirleri ve betikleri bir veri gibi aynı alana kopyalayarak kurmalısın. Mevcut çalışan dizini deneme olarak varsayalım. Şunu yapman gerekir.

cd SphinxTrain
# Eğer AN4 yüklediysen
perl scripts_pl/setup_tutorial.pl an4
# Eğer RM1 yüklediysen
perl scripts_pl/setup_tutorial.pl rm1


Kaydediciyi ayarlama

Sphinx Grup uygulaman için en iyisini seçmene yardım edecek özellikleri olan birkaç farklı kaydediciye sahiptir.


  • PocketSphinx: Bu, Sphinx-2'nin modernleştirilmiş sürümüdür. Özellikle gömülü ve taşınabilir sistemler için yapılandırılmıştır. SPHINX-2'den ortalama  %20 daha az Hafıza ve %5-20 daha az İşlemci harcar. Bunula birlikte aktif gelişimin altındadır. Böylece arayüz ve özellik ayarı kararsızdır.
  • SPHINX-3: Devamlı HMM'ler kullanır. Hem canlı hem de yığın kayıt yapabilir. Varsayılan olarak geliştirilmiş en etkin kaydedicidir.
  • SPHINX-4: Devamlı HMM'ler kullanır. Java programlama dili ile yazılmıştır. Yüksek esneklik ve üstün doğruluk ve küçük görevlerde yüksek hıza sahiptir.

Uygulaman için uygun olan kaydediciyi seçebilirsin. Ben bu kılavuzda temel kaydedici olarak SPHINX-3'ü kullanacağım. İlk önce hatalardan korumak için modelini SPHINX-3 ile test etmen iyi bir düşüncedir.

SPHINX-3 Yükleme

Kod çağırma

SPHINX-3, subversion (svn) kullanarak veya bir tarball indirerek düzeltebilir. svn depoya eklenen yeni değişimler gibi kodu güncellemek için onu kolayca yapar. Fakat svn'yi yüklemen gerekir. Tarballın kullanımı daha kolaydır.


  • Yine de svn'yi kullanmak istiyorsan uçbirime şunları yaz ve biraz bekle:

svn co https://cmusphinx.svn.sourceforge.net:/svnroot/cmusphinx/trunk/sphinxbase
svn co https://cmusphinx.svn.sourceforge.net:/svnroot/cmusphinx/trunk/sphinx3


  • Eğer Tarball'ı kullanmak istiyorsan, sphinx3 tarball ve sphinxbaseye tıklayarak indir ve iletişim kutusu açıldığında "Kaydet"i seç. Onları aynıdeneme dizinine kopyala. İçerikleri şöyle aç.

     A.) Windows'da, Windows Explorer kullanarak, deneme klasörüne git sphinxbase ve sphinx3 tarballs'lara sağ tıkla WinZip menüsünde "Buraya aç"ı seç.

     B.) Linux/Unix'de:

gunzip -c sphinxbase.nightly.tar.gz | tar xf -
gunzip -c sphinx3.nightly.tar.gz | tar xf -


Bunu bitirdiğinde, deneme dizinini içeriği şöyle olacaktır:

deneme

   * an4
   * an4_sphere.tar.gz
   * SphinxTrain
   * SphinxTrain.nightly.tar.gz
   * sphinx3
   * sphinx3.nightly.tar.gz
   * sphinxbase
   * sphinxbase.nightly.tar.gz


veya

deneme

   * rm1
   * rm1_cepstra.tar.gz
   * SphinxTrain
   * SphinxTrain.nightly.tar.gz
   * sphinx3
   * sphinx3.nightly.tar.gz
   * sphinxbase
   * sphinxbase.nightly.tar.gz


Derleme

A.) Linux/Unix'de:

# sphinxbase'i derleme
cd sphinxbase
# Eğer svn kullandıysan, autogen.sh çalıştırman gerekir, Burada
# açıklandığı gibi. Eğer tarball yüklediysen, onu çalıştırman gerekmez.
#
# ./autogen.sh
./configure
make

# SPHINX-3 derleme
cd sphinx3
# Eğer svn kullandıysan, autogen.sh çalıştırman gerekir, Burada
# açıklandığı gibi. Eğer tarball yüklediysen, onu çalıştırman gerekmez.
#
# ./autogen.sh
configure --prefix=`pwd`/build --with-sphinxbase=`pwd`/../sphinxbase
make
make install


B.) Windows'da, eğer SphinxBase'yi yayımlama sisteminden indirdiysen, onu 'sphinxbase-0.1' olarak yeniden adlandır ve sonra:


  • 1. deneme/sphinxbase/sphinxbase.sln dosyasına çift tıkla. Bu, eğer yüklüyse MS Visual C++'ı açacak. Eğer değilse Microsoft'a sor.
  • 2. "Build" menüsünde Batch Build'i ardından tüm nesneleri seç. Rebuild All'a tıkla. Bu SphinxBase paketindeki bütün kitaplıkları kuracak.
  • 3. tutorial/sphinx3/programs.sln dosyasına çift tıkla. Bu eğer yüklüyse MS Visual C++'yi açacak. Eğer değilse Microsoft'a sor.
  • 4. Build menüsünde Batch Build'i seç. Rebuild All'a tıkla. Bu, SPHINX-3 paketindeki bütün çalıştırılabilir olanları kuracak.
Denemeyi Kurma

Kodu derledikten sonra, bütün ilgili çalıştırılabilirleri ve betikleri bir veri gibi aynı alana kopyalayarak kurmalısın. Mevcut çalışan dizini deneme olarak varsayalım. Şunu yapman gerekir.

cd sphinx3
# Eğer AN4 yüklediysen
perl scripts/setup_tutorial.pl an4
# Eğer RM1 yüklediysen
perl scripts/setup_tutorial.pl rm1


Başlangıç öğretim çalıştırma nasıl kurulur

Veriyi yüklediğin dizine git. Eğer Linux'de yukardaki yönergeleri takip ettiysen bunu yapmak şu kadar kolaydır:

# Eğer AN4 kullanıyorsan
cd ../an4
# Eğer RM1 kullanıyorsan
cd ../rm1


ve Windows'da:

# Eğer AN4 kullanıyorsan
cd ..\an4
# Eğer RM1 kullanıyorsan
cd ..\rm1


PocketSphinx için modelleri öğretinceye kadar betikler "kutunun haricinde" çalışır. Bu sebeple, etc/sphinx_train.cfg dosyasını düzenlemen gerekir. Satır tanımlama değişkeni $CFG_HMM_TYPE değiştirmeksizin. Böylece kutu aşağıdaki gibi olacak.

#$CFG_HMM_TYPE = '.cont.'; # Sphinx III
$CFG_HMM_TYPE  = '.semi.'; # Sphinx II


Not: Eğer uçbirimden dosyayı açamadıysan dosyaya elle ulaşmak için; /Ev/kullanıcı_adın/deneme/rm1 (veya an4)/etc/sphinx_train.cfg yolunu kullan ve dosyayı aç. Ardından yukardaki satırları arattır.

Linux makinelerde, çoklu işlemcinin avantajlarından faydalanmak için betikleri kurabilirsin. Bunu yapmak için, etc/sphinx_train.cfg'yi düzenle. $CFG_NPART değişkeninin olduğu satırı sistemdeki işlemcinin sayısıyla eşleştir ve $CFG_QUEUE_TYPE ile tanımlanan satırı aşağıdaki gibi düzenle:

# Queue::POSIX yerel bir makinedeki çoklu İşlemciler için
# Queue::PBS bir PBS/TORQUE dizisi kullanma için
$CFG_QUEUE_TYPE = "Queue::POSIX";


Eğer TORQUE veya PBS toplu sistemleri çalıştıran bilgisayar ağına sahipsen, ağdaki çalışan öğretim işlerini yukarıda $CFG_NPART ile açıklandığı şekilde programlayabilir ve aşağıdaki gibi $CFG_QUEUE_TYPE'yi düzenleyebilirsin:

# Queue::POSIX yerel bir makinedeki çoklu İşlemciler için
# Queue::PBS bir PBS/TORQUE dizisi kullanma için
$CFG_QUEUE_TYPE = "Queue::PBS";


Sistem doğrudan akustik sinyallerle çalışmaz. Sinyaller ilk önce mevcut akustik sinyallerin yerinde kullanılan örnek vektör sırasına dönüştürülür. Bu dönüşümü veya parametreleştirmeyi an4 dizininden yapmak için uçbirime şunları yaz. Eğer Linux yerine windows kullanıyorsan / karakterini \ ile değiştir. Eğer zaten cepstra biçimli dosyalar yerine rm1 indirdiysen, bunu yapman gerekmez. Bu adımı da yapma:
 
perl scripts_pl/make_feats.pl  -ctl etc/an4_train.fileids

Bu betik, her öğretim telaffuzunu 13 boyutlu vektör sıralama olarak hesaplar. Dalga dosyalarının listesi ses dosyalarının tam yolunu içerdiğine dikkat et. Veriler çalıştığın dizinle aynı yere yerleştirildi. Yollar gerçektir, göreceli değildir. Bunu, eğer veri dosyasının yeri farklıysa an4_test.fileids dosyası gibi değiştirmelisin. Bu işlem hızlı bir makinede yaklaşık olarak 10 dakika sürer. Fakat zaman değişkendir. Bir yandan çalışırken bir taraftan da okumaya devam edebilirsin. MFCC'ler ./feat dizinine otomatik olarak yerleşecektir. Öğrenim ve tanılama için konuşma sinyalinde hesaplanan örnek vektörlerin türüne dikkat et. Bu kılavuzun haricinde MFCC'lere sınırlanmamıştır. MFCC haricindeki örnekleri de hesaplayabilirsin. SPHINX-3 ve SPHINX-4 herhangi tür boyutlu örnekleri kullanabilir. Bunula beraber bu programda iki sebepten dolayı MFCC'yi kullanacaksın: a) Bunlar HMM tabanlı sistemler altında en akustik şartları sağlayan, en iyi tanılama performansı verir. b) Bu uygulama konuşma parametresinin sinyal işlemeyi kaplamaya yönelik değildir ve sadece standart kullanım platformu için yardım sunar. Şimdi sistemi öğrenmeye başlayabilirsin.

Betik dizininde, (./scripts_pl) 00*'dan 99*'a kadar sıralanmış birkaç dizin vardır. Her dizin ya slave*.pl adında ya da .pl içeren basit bir dosyaya sahiptir. Sıralama dizinlere doğru devam eder ve aşağıdaki gibi ya slave*.pl ya da sadece .pl dosyasını çalıştır. Her zaman dediğimiz gibi eğer Linux yerine Windows kullanıyorsan / karakterini \ ile değiştirmelisin.

perl scripts_pl/00.verify/verify_all.pl
perl scripts_pl/10.vector_quantize/slave.VQ.pl
perl scripts_pl/20.ci_hmm/slave_convg.pl
perl scripts_pl/30.cd_hmm_untied/slave_convg.pl
perl scripts_pl/40.buildtrees/slave.treebuilder.pl
perl scripts_pl/45.prunetree/slave-state-tying.pl
perl scripts_pl/50.cd_hmm_tied/slave_convg.pl
perl scripts_pl/90.deleted_interpolation/deleted_interpolation.pl
perl scripts_pl/99.make_s2_models/make_s2_models.pl


Bütün bunları çalıştırmak zor gelirse, basitçe RunAll.pl betiğini şu şekilde çalıştırabilirsin:

perl scripts_pl/RunAll.pl

Buradan, basitçe her dizindeki slave*.pl yi çalıştırmalısın. Dosya bulunmayan dizinlerde, sadece .pl dosyası olduğuna bil.

Betikler makinedeki işleri başlatacak ve herbir iş çalışması için birkaç dakika sürecek. Herhangi bir betik çalıştırmadan önce, dizinin, senin mevcut dizin (bizde deneme) olduğunu kontrol et. Her bir slave*.pl'yi çalıştırdıktan sonra içerikleri tekrar kontrol et. Birkaç yeni dizin oluşturuldu. Bu dizinler öğrenim veya deneme aşamasında oluşturulan dosyaları barındırır. Bu noktada bu dizinlerin içeriklerine hakim olmalısın. Çünkü bazı dizin adları kendilerini açıklayabilir ve eğer merak edersen onları keşfedebilirsin.

Mevcut dizininde (deneme) oluşan dosyalardan biri .html dosyasıdır. Bu, kullandığın veritabanına bağlı olarak an4.html veya rml.html şeklinde adlandırılır. Bu dosya yapılan işlerin bir durum raporunu içerir. Başlattığın işin başarıyla tamamlandığını doğrular. Daha sonra sadece sonraki slave*.pl'yi sırayla başlat. Bu işlemi bütün dizinlerde slave*.pl çalışıncaya kadar takrarla.

00*'dan 99*'a kadar devam eden betik işlemlerinde, herbiri tanılama için kullanılmış birkaç akustik model ayarı oluşturduğuna dikkat et. Bu adımlardan bazılarının sadece yarı devam model oluşturma için gerektiğine de dikkat et. Dizinindeki 20.ci_hmm'de tamamlamak için çalıştırılan ilk iş, İçerik Bağımsızlığı (CI) modellerini dilindeki ön kelime birimleri için öğrenmen içindir. 30.cd_hmm_untied dizinindeki işler tamamlamak için çalışdığında İçerik Bağımlılık modellerini öğreneceksin. Bunlar CD-çözüm modelleri olarak adlandırılır. Bunlar durumları sırayla birbirine bağlayan hücreler oluşturmak içindir. 40.buildtrees'deki işler her alt kelime biriminin durum ağacını kurar. 45.prunetree, ağaçları kırpar ve durumları bağlar. Takibindeki 50.cd-hmm_tied de, öğrenim kitağlığındaki çoklu telefonlar için son modelleri eğitir. Bunlara CD-eğitimli modeller diyoruz. Herhangi durum sonunda modelleri teşhis etmek için kullanabilirsin...Diğer dizinler ilerde açıklanacaktır

Şimdi öğrenimini tamamladın. Son model ve konumu, veritabanına ve kullandığın model türüne bağlı olacak. Eğer model öğrenmeye devam etmek için RM1 kullanıyorsan son 8 Gauss/durum, 3 durum, bağlı CD akustik modeller (HMM'ler) ile 1000 bağlı durum ./model_parameters/rm1.cd_cont_1000_8/ dizininde bulacaksın. Ve ayrıca ./model_architecture/ içinde rm1.1000.mdef dosyasında bir model içeriği bulacaksın. Bu dosya önceki sistem tarafından kullanılan ses modelleriyle alakalıdır. Öğrenim işlemi bu belgede genişçe açıklandı. Bununla beraber eğer AN4 ile yarı devamlı modeller öğrendiysen, son model ./model_parameters'da /an4.1000.s2models'de bulunacaktır. Bütün dosyaları bulmak için pecketsphinx ile kod çözmelisin

Öğrenim esnasında birkaç kritik olmayan hata şunun gibi oluşabilir:

This step had 6 ERROR messages and 2 WARNING messages. Please check the log file for details.

Onlara aldırma, Bu, veritabanında birkaç hata olması bile iyi bir sonuçtur. Hataların ana kaynağı an4'deki gibi verinin küçük miktarıdır ve kayıtların kötü kalitesidir. Bunun sebebi, kayıttaki "final state not reached" (Son duruma ulaşılamadı) veya "mgau less then zero" hatalarıdır. Eğer çok fazla hata oluşursa, bu demektir ki öğrenim kurulum aşamasını gözden geçirmek gerekir.

Başlangıç kod çözücü nasıl çalıştırılır

Kod çözmeyi çalıştırmak nispeten basittir. İlk önce, test setindeki bütün örnekleri MFCC hesaplar. Eğer indirdiysen, dosyalar zaten cepstra biçimindedir. Bu yüzden bu adımı uygulaman gerekmez. Eğer indirmediysen dalga dosyasından MFCC'leri hesaplamak için, en üstte an4 adındaki dizine, uçbirime şunları yazarak eriş:

perl scripts_pl/make_feats.pl  -ctl etc/an4_test.fileids

Bunun çalışması için yaklaşık olarak 10 dakika gerekecek.

Şimdi kod çözmeye hazırsın. Uçbirime aşağıdaki komutu yaz:

perl scripts_pl/decode/slave.pl

Bu sağlanan bütün bileşenleri akustik modeller ve başlangıç öğreniminde çalıştırarak oluşturduğun model içerik dosyaları da dahil olmak üzere kod çözme için kullanır. Tanımlama işi tamamlandığında, betik, Kelime Hata Oranı (WER) veya Cümle Hata Oranı (SER)i tanımlar. SER'i hesaplayan fonksiyonun çok basit şekilde kurulduğuna dikkat et. * tabi ki CMU makine kullanmıyorsan. Eğer WER'İ hesaplamak istiyorsan, bunu yapmak için kod indirip tanımlamalısın. En bilinenlerden biri standart araştırma topluluğu, NIST'de bulunur.

Eğer program doğrulamıyorsa, etc/sphinx_decode.cfg dosyasındaki şu satırı şöyle değiştirebilirsin:

$DEC_CFG_ALIGN = "builtin";

Eğer betikleri CMU'da çalıştırıyorsan yukardaki satır normalde şöyle olacaktır:

DEC_CFG_ALIGN = \\
"/afs/cs.cmu.edu/user/robust/archive/third_party_packages/NIST_scoring_tools/sctk/linux/bin/sclite";


Kod çözücü betiği çalıştırdığında, üst dizindeki .html dosyasında deneyimin için doğruluk hakkında bilgi gösterecektir. Bu, ayrıca dosyaların iki ayarını oluşturacak. Bu ayarlardan biri, .align genişlemesi ile doğrultma programı tarafından oluşturulmuş doğrultmaları içerir. Eğer NIST aracını an4 ile kullandıysan .html dosyası aşağıdaki satıra benzer sonuç verecektir:

SENTENCE ERROR: 56.154% (73/130)   WORD ERROR RATE: 16.429% (127/773)

veya eğer rm1 kullandıysan

SENTENCE ERROR: 38.833% (233/600)   WORD ERROR RATE: 7.640% (434/5681)

İkinci yüzdelik sayısı, (7.640%) WER'dir ve HMMler de durum başına 8 Gauss kullanarak elde edilir. WER, hangi kod çözücüyü kullandığına bağlı olarak değişebilir.

Eğer gömülü betik kullandıysan, satır şuna benzeyecektir:

SENTENCE ERROR: 56.154% (73/130)

İlk kısımdaki hatalar kelime hata oranını (WER), ikincisindekiler ise cümle hata oranını (SER) belirtir. Bu yüzden farklılıkları anlaşılabilir.

Diğer araçlar

Üç araç kurulum problemlerine yardım etmek için verilecektir. Bunlardan ikisini çalıştırılabilir bin dizininde bulabilirsin. Üçüncüsünü aşağıda gösterildiği şeklide indirip kurabilirsin:


  • 1. mk_mdef_gen: Telefon sinyal analiz aracı. Bunu, öğrenim veritabanındaki temel ses biriminde meydana gelen göreceli frekansları hesaplaması için kullanabilirsin.
  • 2. printp: Hesaplanan parametre modelini gösteren araç.
  • 3. cepview: MFCC dosyalarının gösteren araç. Tarball'dan indirebilirsin.

Bu uygulamayı kullanmaktaki amacın nedir

Öğretim için bütün bileşenleri kullanarak SPHINX sistemi öğrenmeyi umuyorsun. Öğretici bir akustik model ayarı oluşturacak. Bu akustik modelleri ve test verisinde söylenenleri teşhis etmek için kaydediciyi kullanmayı ümit ediyorsun. Kayıt çıktısının, sana verilecek olan test verisinde konuşulan kelimeleri "doğru" sıraya koymasını ve yapılan hataların oranını bulmayı umuyorsun.

Öğrenmek nasıldır ve öğrenim ipuçları nelerdir

Şimdi kendi örneklerini yapmaya hazırsın. Her öğrenme ve kayıt için ilk önce ona bir ad vermen gerekir. Ben burada $ilktest adını kullanacağım. Sen istediğin başka bir ad kullanabilirsin. Örneğin yukardaki deneylerde kullandığım iki  veritabanı an4 ve rm1 idi. Benim şimdiki seçimim $ilktest öğrenim ve kayıt çalıştırmada basit tanımlama içim otomatik olarak bütün dosyalarda kullanılacak. Bu deneyim için gerekli bütün dizin ve dosyalar $ilktest adındaki dizine kopyalanacak. Veri gibi bazı dosyaları ya deneme/an4 ya da deneme/rm1'den kendin kopyalayabilirsin. Diğer dosyalar öğretici veya kaydedici yüklemelerinde otomatik olarak oluşturulacaktır.  

Yeni bir görev var olan $ilktest dizininde oluşturuldu. Daha önce oluşturduğum deneme/an4 dizininden bir kurulum kopyalayalım. Bu yeni görev deneme/$ilktest'e yerleşecek. Buradaki $ilktest'in kendi seçimine bağlı olduğunu hatırla.

Aşağıdaki örnekte yaptığımız şey tek şey sadece var olan eski an4 kurulumundan yeni bir kurulum kopyalamaktır. Mevcut çalışma dizinine dikkat et. Yenisi şu komutla oluşturulacak:

cd an4
perl scripts_pl/copy_setup.pl -task $ilktest


Bu işlem,SphinxTrain'i yeniden çalıştırarak yeni kurulum oluşturacak. Sonra da, ilk kurulumda (an4'deki) yaptığımız gibi aynı kaydediciyi kullanarak kaydedici kurulumu çalıştırılacak. Ardından etc dizinine yapılandırma dosyaları kopyalanacak. Yeni kurulum bu yeni görevlerle eşleşecek.

copy_setup.pl betiğinin verileri feat ve wav altına kopyaladığına dikkat et. Eğer veriler büyükse bu kopyalama, diskte büyük miktarda yer kaplayacak. İyi bir seçim sadece bağlantıları veri dizinlerine yapmaktır. Betik bunu desteklemez, çünkü bütün işletim sistemleri sembolik bağlantıları oluşturamaz.

Bundan sonra tamamiyle $ilktest dizininde çalışacağız.

Senin bu denemen ilk çalışma esnasında oluşturduğum MFCC örnek dosyaları kullanarak öğrenim sistemiyle başlar. Bununla beraber bu eğitime (denemeye) başladığında daha önce bahsedilen bilgilere ihtiyacın olacak. Vereceğiniz kararlar (çalıştıracağınız komutlar) öğrenim modellerinin kalitesine etki edecek ve bu da sistem kayıt performansını değiştirecek.

Şimdi bu adımları sırasıyla takip etmen gerekir.


  • 1. Eğer an4 veritabanı kullandıysan veya kendi veritabanını kullanıyorsan öğrenmi veritabanını tanımla. Eğer ilk çalışma esnasında an4 veritabanı kullandıysan bunu zaten yapmışsındır. Eğer rm1 kullandıysan veri zaten tanımlanmıştır. Bu noktadan sonra konuşma kayıt alanındakileri not etmekten başka yapman gereken başka * bir şey yoktur. Veritabanındaki herbir dosyayı bir "ifade" olarak adlandırman iyi bir kullanımdır. Bir ifadedeki sinyal tam bir cümle gerektirmez. cepview aracını kullanarak herhangi bir dosyadaki cepstra'yı görebilirsin.

  • 2. Sisteme öğretmen için hangi ses birimlerini soracağına karar ver. Bunu yapmak için dil ifadesi $ilktest/etc/$ilktest.dic ve doldurma ifade $ilktest/etc/$ilktest.filler'a bak ve buradaki ses birimlerini not et. Bu dizinlerdeki bütün ses birimlerinin bir listesi $ilktest/etc/$ilktest.phone dosyasına da yazılır. İfadeleri öğren ve ses birimlerinin kayıt için uygun olduğuna karar ver. Sonra da iyi kayıt yapılmalı, ses birimleri karmaşık (anlaşılamayan) olmamalı ve ifadeler tutarlı olmalı.

    Ayrıca bu birimlerin ne olduğunu kontrol et. Biçimlenebilen çoklu sesler öğrenim verisinde iyi ifade edilmiştir. Veride bulunan sıralamaları öğrenmek için mk mdef gen aracını kullanabilirsin.  

    Dizinde verilen ses birimlerinin ayarını, birleştirerek veya ayrıştırarak yeniden düzenleyebilirsin. Ses birimlerini birleştirmekten kastım, iki veya daha fazla farklı ses birimini tek bir girişte toplamaktır. Örneğin, "E" veya "Y" harfleriyle ayrı birimler yerine tek birimli bir model oluşturmak isteyebilirsin. Verilen dil ifadesinde E ve Y sembollerini temsil eden bu birimleri birleştirmek, basitçe E ve Y ifadesindeki bütün örnekleri E_Y gibi tekli sembol olarak yerleştirmektir. Ses birimlerini ayrıştırmakdaki kastım ise, yeni çoklu ses birimleri tek ses birimine sokmaktır. Bu birleştirme işleminin tersidir. Örneğin, Aynı sembol tarafından yerleştirilen E ve Y harflerinin bütün örneklerini dil ifadesinde bulursan, birkaç kelime için E ve diğerleri için Y ile bu sembolü yer değiştirmek isteyebilirsin. Ses birimleri de tekbir sesin içine, belirli ses grupları tarafından yeniden yapılandırılabilirler. Örneğin, "IX D"nin bütün örneklerini tekbir IX_D sesiyle değiştirebilirsin. Bu, var olan önceki bütün ifadelerde yeni bir sembol tanımlar. Ses birimlerinin sayısı bu etkiyle birlikte azalarak bir olur.

    Birimlerini yeniden tasarlamadan önce, $ilktest/etc/$ilktest.phone dosyasını ona göre değiştirin. Bu dosyada geçersiz boş yer veya satırlar olmadığından emin ol.

    İstersen bu tasarı yöntemini esgeçebilir, ses listesini ve ifadeleri sana verildiği şekilde kullanabilirsin. Diğer şeyleri öğrenimde daha sonra da değiştirme imkanın vardır.

  • 3. İfadelerini ve ses liste dosyasını düzenlemeden önce aşağıdaki öğrenim parametrelerinin değiştirmek için deneme/$ilktest/ dizinindeki etc/sphinx_train.cfg dosyasını düzenle.

         $CFG_DICTIONARY = öğrenim ifadesinin tam yolu (eğer ifadeyi değiştirmeye karar vermediysen bunu değiştirme)

         $CFG_FILLERDICT = doldurma ifadesinin tam yolu (eğer ifadeyi değiştirmeye karar vermediysen bunu değiştirme)

         $CFG_RAWPHONEFILE = ses listesinin tam yolu (eğer ifadeyi değiştirmeye karar vermediysen bunu değiştirme)

         $CFG_HMM_TYPE = bu değişken .semi. veya .cont. değerlerine sahiptir. Betiğin iki yanında da "." olduğuna dikkat et. Eğer çoğunlukla Pocketsphinx için kullanılan yarı devamlı HMM öğreniyorsan [colore=red].semi.[/color] veya SPHINX-4 ve SPHINX-3'ün çoğu temel seçimlerini gerektiren devamlı HMM öğreniyorsan .cont. kullan.

         $CFG_STATESPERHMM = bu herhangi bir tamsayı olabilir. Fakat 3 veya 5 olmasını tavsiye ederim. HMM'deki durumların sayısı ses birimlerinin zaman değişken karakteristikleriyle bağlantılıdır. Büyük zaman değişkenli ses birimleri onları temsil etmek için daha çok duruma ihtiyaç duyarlar. Seslerin doğal zaman değişkeni kısmen, aşağıda açıklanan $CFG_SKIPSTATE değişkeni tarafından yakalanır.

          $CFG_SKIPSTATE bunu yes veya no olarak ayarlayın. Bu değişken HMM'lerin topolojilerini kontrol eder. yes olarak ayarladığında HMM'leri durumlara atlatır. Bununla birlikte, HMM topolojisinin kuallanıldığı sistem bir soldan sağa Bakis topolojisidir. Eğer no olarak ayarlarsan girilen herhangi durum sonraki duruma dönüştürülür. Bütün bu sebeplerde yarı dönüşüm mümkündür. HMM topoloji dosyasını temel dizinindeki ($ilktest) model_architecture/ adındaki dizinde bulunan, uygun olarak adlandırılmış $taskname.topology'de bulabilirsin.

         $CFG_FINAL_NUM_DENSITIES = eğer yarı devamlı modeller öğreniyorsan bu sayısı $CFG_INITIAL_NUM_DENSITIES'i 256 olarak ayarla. Devamında $CFG_INITIAL_NUM_DENSITIES'i 1'e ve $CFG_FINAL_NUM_DENSITIES'i 1'den 8'e kadar herhangi bir sayı ile ayarla. 8'den büyük sayı tavsiye edilmez. HMM'nin her durum dağılımı Gauss karışımları tarafından modellenmiştir.  

         $CFG_N_TIED_STATES = bunu 500 ile 2500 arasındaki herhangi bir sayı ile ayarla.  

         $CFG_CONVERGENCE_RATIO = bunu 0.1 ile 0.001 arasındaki herhangi bir sayı ile ayarla.

         $CFG_NITER = bunu 5 ile 15 arasındaki herhangi bir tamsayı ile ayarla.

    İstediğin bütün değerleri değiştirmeden önce, modellerin yeni bir ayarını öğrenmelisin. Bunu, $ilktest/scripts_pl/00* dizininden $ilktest/scripts_pl/09* dizinine kadar slave*.pl betiği ile çalıştırabilirsin. Veya kısaca perl scripts_pl/RunAll.pl'yi çalıştır.

Kayıt nasıl yapılır ve kayıt ipuçları nelerdir


  • 1. Kayıt için ilk adım MFCC örneklerini test ifadelerin için hesaplamaktır. İlk çalıştırmada bunu zaten yaptığın için, aynı işlemi tekrarlamana gerek yok.

  • 2. Kaydedici parametrelerini, kayıt sonuç etkisini, deneme/$ilktest dizinindeki etc/sphinx_decode.cfg dosyasını düzelterek değiştirebilirsin. İlgili bazı parametreler  aşağıdaki gibidir.

         $DEC_CFG_DICTIONARY = ifade kaydedici tarafından kullanılır. Öğrenimden kullanılana ya benzer ya da benzemez. Seslerin ayarı, öğrenici ifadesindeki seslerin ayarını içerir. Kelimelerin ayarı büyük olabilir.

         $DEC_CFG_FILLERDICT = doldurucu ifade.

         $DEC_CFG_GAUSSIANS = kaydedici tarafından kullanılan modeldeki yoğunluk sayısı.

         $DEC_CFG_MODEL_NAME = model adı.

         $DEC_CFG_LANGUAGEWEIGHT = ifade uzunluğu. 6 ile 13 arasında bir sayı tavsiye edilir.

  • 3. scripts_pl/decode/slave.pl betiği zaten kayıdı bitirdiğinde kelime veya cümle doğruluğunu hesaplar. .html dosyanının en üstüne, eğer NIST sclite kullanıyorsan şuna benzer bir satır ekler:

SENTENCE ERROR: 38.833% (233/600)   WORD ERROR RATE: 7.640% (434/5681)

     Satırdaki ilk yüzdelik testte doğru kaydedilen kelimelerin oranıdır.

     Yukardaki örnekte rm1 kullanılarak 5681 kelimenin 5247'si (%93,36) doğru varsayıldı.

Yazar Notu: Bu programı kullananlardan yorumlarını bekliyorum. Emeğe değecek kadar kullanışlı bir araç olmasını umuyorum.

Daha önce belirtildiğinin aksine 2 bölüm birleştirilmiştir.

Kaynak: Carnegie Mellon Üniversitesi Elektrik-Bilgisayar Mühendisliği Bölümü CMU SPHINX Otomatik Konuşma Kayıt sistemi

heartsmagic

Bu meşakkatli çeviri için ilk teşekkürü ben edeyim istedim :)
Eline sağlık.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

badhero

Çok emek harcamışsın. İlk teşekkürü ben etmek isterdim ama bu saatte hala uyanık olan birisi daha var sanırım. :D Teşekkürler..

Ozmo


erdaltaskesen


ubuntuki lilith

Yine güzel bir paylaşım. Tayfa arkadaşımın ellerine sağlık.

kuleyni

Çok güzel bir yazı olmuş her zaman istemişimdir bunu ama açıkcası yapılacak işlemler hevesimi kursağımda bıraktı

EsatYuce

Yazılım sunumu tamamlanıp tamamen kullanıma hazırdır. Kullanışlı olması dileğiyle.

erdaltaskesen

Bu konuda iki adet sorum olacak:

1- Yukarıdaki anlatılanları başarılı bir şekilde kurup çalıştırabilen var mı?

2- Yukarıda anlatılanlar biraz kafamı karıştırdı. Bu sistem ile konuşarak yazı yazabilirmiyiz? Yani İngilizce konuşmamızı yazıya dökebilir mi? Evet ise bu konuda ne kadar başarılı?

3- Eğer yukarıdaki 2 seçeneğe de 'Evet' diye cevap verilirse biri bunun için bir video ekleyebilir mi?

Şuan VirtualBox OS ile Ubuntu kuruyorum. Bu sistemi denemek için

EsatYuce

Alıntı yapılan: erdaltaskesen - 13 Ocak 2010 - 20:17:32
Bu konuda iki adet sorum olacak:

1- Yukarıdaki anlatılanları başarılı bir şekilde kurup çalıştırabilen var mı?

2- Yukarıda anlatılanlar biraz kafamı karıştırdı. Bu sistem ile konuşarak yazı yazabilirmiyiz? Yani İngilizce konuşmamızı yazıya dökebilir mi? Evet ise bu konuda ne kadar başarılı?

3- Eğer yukarıdaki 2 seçeneğe de 'Evet' diye cevap verilirse biri bunun için bir video ekleyebilir mi?

Şuan VirtualBox OS ile Ubuntu kuruyorum. Bu sistemi denemek için

Ben Ubuntu ile denedim, Bir yerde hata olmalı, başaramadım. Yalnız bütün yazı dikkatlice uygulanırsa (bütün .pl dosyaları çalıştırılırsa) başarılabilir ümidindeyim. Vaktim olunca tekrar çalıştırmaya çalışacağım. Olumlu sonuç alırsam paylaşacağım. Kolay glesin