Gizli Markov model eşiği


14

MFCC ve gizli markov modelleri kullanarak ses tanıma için bir konsept sistemi kanıtı geliştirdim. Sistemi bilinen sesler üzerinde test ettiğimde umut verici sonuçlar veriyor. Sistem, bilinmeyen bir ses girildiğinde en yakın eşleşme ile sonuç döndürür ve skor, onu tanımlamak için o kadar da farklı değildir, örneğin:

3 gizli markov modelini biri konuşma için, biri su musluğundan çıkan ve diğeri masaya vurmak için eğittim. Sonra görünmeyen veriler üzerinde test ve aşağıdaki sonuçları elde:

input: speech
HMM\knocking:  -1213.8911146444477
HMM\speech:  -617.8735676792728
HMM\watertap:  -1504.4735097322673

So highest score speech which is correct

input: watertap
HMM\knocking:  -3715.7246152783955
HMM\speech:  -4302.67960438553
HMM\watertap:  -1965.6149147201534

So highest score watertap which is correct

input: knocking
HMM\filler  -806.7248912250212
HMM\knocking:  -756.4428782636676
HMM\speech:  -1201.686687761133
HMM\watertap:  -3025.181144273698

So highest score knocking which is correct

input: unknown
HMM\knocking:  -4369.1702184688975
HMM\speech:  -5090.37122832872
HMM\watertap:  -7717.501505674925
Here the input is an unknown sound but it still returns the closest match as there is no system for thresholding/garbage filtering.

Anahtar kelimede bir OOV (kelime dışı) sesinin bir çöp veya dolgu modeli kullanılarak filtrelenebileceğini biliyorum, ancak bunun benim sistemime uygulanamayacağı sınırlı bir bilinmeyen kelime kümesi kullanılarak eğitildiğini söylüyor Sistemin kaydedebileceği tüm sesleri bilmiyorum.

Konuşma tanıma sisteminde benzer bir sorun nasıl çözülür? Ve yanlış pozitifleri önlemek için sorunumu nasıl çözebilirim?

Yanıtlar:


5

Çok güzel bir soru!

Bahsettiğiniz gibi, HMM'yi size "Bilmiyorum" (buna OOV diyelim) cevabı vermenin tek yolu, özel bir durum vermektir, çünkü her zaman modelinizin altında en yüksek olasılıklı durumları üretir. Yani oov altında yüksek olasılığını sahip olmasını sağlamak zorunda her değildir girdi speech, watertapya knocking.

Kısa cevap, bunun mümkün olmadığıdır. Çünkü bir HMM mutlak bir desen tanıyıcı değildir. Yalnızca modelinizin altındaki çıktıların olasılığını karşılaştırır ve bağlamda eğitilir .

Olacağını girdi düşünün speechve knockingaynı zamanda. Büyük olasılıkla HMM bu iki durum arasında "tereddüt edecektir" çünkü bu girdinin her birinin özellikleri vardır. Sonunda bunlardan birini üretecekti, ancak OOV'u çıkarması pek olası değil. Anahtar kelime tespit durumunda, tahminim, HMM'lerini sürekli olarak kandıracak akıllı girişler bulabileceğinizdir. Bununla birlikte, yazarlar muhtemelen hangi girdiyi bekleyeceğini biliyorlar ve bu zehirli girdilerin nadir olması için bilinmeyen kelimelerin sınırlı listesini seçtiler.

Ben de aynısını yapmanı tavsiye ederim. HMM'yi kullanacağınız durumları düşünün ve ortadan kaldırmak istediğiniz en yaygın girdiler hakkında bir OOV durumu eğitin. Birkaç OOV durumuna sahip olmayı bile düşünebilirsiniz.


2
Ancak burada tanımlanmış jest tanıma için hmm tabanlı bir eşik modeline ne dersiniz: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Her bir hmm'nin bir araya getirildiği durumlara sahip bir ergodik hmm olan bir eşik modeli oluştururlar. "Eşik modeli taban çizgisi gibi davranır. Belirli bir jest modeli eşiğin üzerine çıktığında aday bir jest bulunur" Ama benim sorunum java ve jahmm kütüphanesini kullanıyorum ve ergodik için bir seçenek olduğunu düşünmüyorum hı.
Radek

Başlıkta söylediği gibi, bu HMM tabanlı bir algoritmadır, bu yüzden bir HMM değildir. Bana öyle geliyor ki, saf bir HMM ihtiyaçlarınızı karşılamıyor ve eşik tabanlı bir sınıflandırıcı gerçekten daha uygun.
gui11aume

5

Bu, jest tanıma alanında biraz yaygındır. Cevap Lee ve Kim'in (1999) makalesinde anlatıldığı gibi bir eşik modeli oluşturmaktır.

Bir dolgu veya çöp modeli ile aynı rolü oynar, ancak söylediğiniz gibi ayrı olarak eğitilmesi gerekmez. Diğer modellerinizdeki tüm kendi kendine geçiş durumlarını bağlayarak ve geçişi tekdüze olasılıklarla başlatarak, bu durumları tamamen bağlayarak bir eşik modeli oluşturabilirsiniz. Gerçekte nasıl yapılabileceğini görmek için lütfen kağıda bir göz atın.

Kütüphaneniz ergodik modelleri desteklemese bile, gerekli boyutta bir modeli manuel olarak oluşturmanıza ve durumları buna göre ayarlamanıza engel olmamalıdır. Bunun için gerçekten bir kütüphane istiyorsanız , örneğin Accord.NET Framework'te eşik modelleri desteği de dahil olmak üzere gizli Markov model sınıflandırıcıları için uygulamalar mevcuttur .

Feragatname: Bu kütüphanenin yazarıyım.


Doğru manuel olarak bir eşik modeli oluşturabilirim. Diyelim ki iki hmm modelim var: sound1 ve sound2. Her ikisinin de 2 durumu vardır. Sonra 4 durumlu bir eşik modeli oluşturuyorum. Her durum 0.25 olan aynı başlangıç ​​değerine sahiptir. Sonra tüm olası geçişler için tekdüze dağılım ayarladım, böylece tüm olası durum geçişleri (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2), vb. Daha sonra eşik modeli 1 ve 2 durumları için ses 1'den durum 1 ve 2'nin opdf'sini, ses eşiği 1 ve 2'nin durum 3 ve 4'ü için ses2'den durum 1 ve 2'nin opdf'lerini ayarladım.
Radek

Yukarıda açıklanan yaklaşım doğru mu?
Radek

1
Pek değil ... belki de açıklamamda biraz gevşektim. Eşik modeli için geçiş matrisinizin köşegen öğeleri, diğer modellerinizden orijinal kendiliğinden geçiş olasılıklarını alır. Bir durumdan diğer durumlara geçişler, tekdüze olasılıklarla başlatılır. Kod için işaret tembel görünebilir biliyorum, ama bazen kod formüllerden daha kolay anlaşılır .
Cesar

Bu arada, Lee ve Kim tarafından makaleyi okuduysanız ve farklı yorumladıysanız veya uygulamamın yanlış olduğuna inanıyorsanız, lütfen bana bildirin.
Cesar

3

Yaptığım şey: Dolgu modelinin basitleştirilmiş versiyonumu oluşturdum. Watertap sesini, vuruntu sesini ve konuşma sesini temsil eden her hmm, sırasıyla 0,3 sn ila 10 saniye arasında çeşitli uzunluklarda 30, 50, 90 ses eğitim setinden gelen sesler tarafından eğitilen ayrı bir 6 durumlu hmm'dir. Sonra vurma, watertap ve konuşma için tüm eğitim seti seslerinden oluşan 1 durum hmm olan bir dolgu modeli oluşturdum. Dolayısıyla, hmm model skoru belirli bir ses için dolgu maddesinin skorundan daha büyükse - ses tanınırsa aksi halde bilinmeyen bir sestir. Gerçekten büyük verilerim yok ama görünmeyen seslerde yanlış pozitif reddetme ve gerçek pozitif reddetme için aşağıdaki bir testi perfore ettim.

true positives rejection
knocking 1/11 = 90% accuracy
watertap 1/9 = 89% accuracy
speech 0/14 = 100% accuracy


false positives rejection
Tested 7 unknown sounds
6/7 = 86% accuracy

Bu hızlı testten, bu yaklaşımın makul sonuçlar verebileceği sonucuna varabilirim, ancak garip bir hissim olsa da yeterli olmayabilir.


+1 Bu çok ilginç. Bu işi daha önce unutmadıysanız, bu yaklaşım sonunda işe yaradı mı? Bir 'dolgu / diğer' model olarak yeterli miydi? Değilse, sonunda başka bir şey uyguladınız mı?
Zhubarb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.