Прихована маркова модель порогу


14

Я розробив доказову систему концепції розпізнавання звуку за допомогою mfcc та прихованих моделей markov. Це дає перспективні результати, коли я тестую систему на відомі звуки. Хоча система, коли вводиться невідомий звук, повертає результат з найбільшою відповідністю, і оцінка не є такою чіткою для розробки, що це невідомий звук, наприклад:

Я підготував 3 приховані маркові моделі: одна для виступу, одна для води, що виходить з крана для води, і одна для стуку по парті. Потім я перевіряю їх на небачені дані та отримую такі результати:

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.

Я знаю, що при виявленні ключових слів OOV (поза словниковим словом) звук можна відфільтрувати за допомогою моделі сміття чи наповнювача, але він говорить, що він навчається за допомогою обмеженого набору невідомих слів, де це не може бути застосовано до моєї системи, оскільки я Я не знаю всіх звуків, які може записувати система.

Як подібна проблема вирішується в системі розпізнавання мовлення? І як я можу вирішити свою проблему, щоб уникнути помилкових позитивних результатів?

Відповіді:


5

Дуже гарне запитання!

Як ви вже згадували, єдиний спосіб змусити HMM дати вам відповідь "я не знаю" (назвемо це OOV) - надати йому особливий стан, оскільки він завжди виводить штати з найбільшою ймовірністю за вашою моделлю. Отже, ви повинні гарантувати, що OOV має більш високу ймовірність під кожним входом, який не є speech, watertapабо knocking.

Коротка відповідь - це неможливо. Тому що HMM не є абсолютним розпізнавачем шаблону. Він лише порівнює ймовірність результатів за вашою моделлю, і в контексті цього був підготовлений .

Подумайте про вхід, який був би speechі knockingводночас. Швидше за все, HMM буде "вагатися" між цими двома станами, оскільки цей вхід має особливості кожного. Зрештою, він видасть одне з таких, але це малоймовірно, що він видасть OOV. У разі виявлення ключових слів, я здогадуюсь, що ви можете знайти розумні дані, які б постійно обдурювали їх HMM. Однак автори, ймовірно, знають, на що слід чекати, і вони вибрали свій кінцевий список невідомих слів, так що ці отруйні дані є рідкістю.

Раджу вам зробити те саме. Поміркуйте, у яких ситуаціях ви будете використовувати HMM і навчите стан OOV на найбільш поширених входах, які ви хочете усунути. Ви навіть можете подумати про наявність декількох станів OOV.


2
Але як щодо порогової моделі на основі розпізнавання жестів, описаної тут: herin.kaist.ac.kr/Publication/PS/hklee_PAMI_i09611.pdf . Вони створюють порогову модель, яка є ергодичним хм, що містить стани кожного хм, об'єднані разом. "Порогова модель виступає базовою лінією. Жест кандидата виявляється, коли конкретна модель жестів піднімається вище порогу". Але моя проблема полягає в тому, що я використовую бібліотеку java та jahmm, і я не думаю, що вона має можливість для ergodic хм.
Радек

Як сказано в назві, це алгоритм на основі HMM, тому це не HMM. Мені здається, що чистий HMM не відповідає вашим потребам і що поріг-класифікатор дійсно краще підходить.
gui11aume

5

Це дещо часто зустрічається у сфері розпізнавання жестів. Відповідь полягає у створенні порогової моделі, як описано у статті Лі та Кіма (1999)

Він відіграє ту ж роль, що і модель для наповнення або сміття, але його не потрібно тренувати окремо, як ви кажете. Можна створити порогову модель, з'єднавши всі стани самопереходу від інших моделей та ініціалізуючи перехід з рівномірними ймовірностями, повністю з'єднавши ці стани. Будь ласка, подивіться на папір, щоб побачити, як це насправді можна зробити.

Навіть якщо ваша бібліотека не підтримує ергодичні моделі, вона не повинна заважати вам створювати вручну модель потрібного розміру та відповідно встановлювати стани. Якщо ви дійсно хочете бібліотеки для цього, то реалізація для прихованих класифікаторів моделей Маркова, включаючи підтримку порогових моделей , доступна, наприклад, в рамках Accord.NET Framework .

Відмова: Я є автором цієї бібліотеки.


Правильно я можу створити порогову модель вручну. Отже, скажімо, наприклад, що у мене є дві моделі, названі hmm: sound1 і sound2. Обидва мають 2 стани. Потім я створюю порогову модель з 4 станами. Кожен стан має однакове початкове значення, яке становить 0,25. Тоді я встановлюю рівномірний розподіл для всіх можливих переходів, тому всі можливі переходи стану (0,0), (0,1), (1,0), (1,1), (1,2), (2,1), (2,2) тощо отримують рівномірний розподіл 0,0625. Тоді для стану 1 і 2 порогової моделі я встановлюю opdf стану 1 і 2 від sound1, а для стану 3 і 4 порогу встановлюю opdf стану 1 і 2 від sound2.
Радек

Чи правильний описаний підхід?
Радек

1
Не зовсім ... можливо, я трохи опинився на своєму описі. Діагональні елементи вашої матриці переходу для порогової моделі отримують вихідні ймовірності самопереходу від інших ваших моделей. Переходи від стану до інших станів ініціалізуються з однаковою ймовірністю. Я знаю, що може здатися ледачим вказати його на код, але іноді код зрозуміти простіше, ніж формули .
Сезар

До речі, якщо ви прочитали статтю Лі та Кіма та інтерпретували її по-різному, або вважаєте, що моя реалізація є невірною, будь ласка, дайте мені знати.
Сезар

3

Отже, що я зробив: я створив свою спрощену версію моделі наповнення. Кожен хмм, що представляє звук водяної крани, стукаючий звук та мовленнєвий звук, є окремим шестигранним шумним станом, який навчається звукам із навчального набору 30, 50, 90 звуків відповідно різної довжини від 0,3 до 10 секунд. Тоді я створив модель наповнення, яка є 1-мм станом, що складається з усіх звуків тренувального набору для стукання, водної тати та мови. Отже, якщо бал моделі hmm для даного звуку більший, ніж оцінка наповнювача - звук розпізнається, інакше це невідомий звук. У мене насправді немає великих даних, але я перфорував наступний тест на відхилення помилкових позитивів та відхилення справжнього позитиву на невидимі звуки.

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

Тож з цього швидкого тесту я можу зробити висновок, що такий підхід дає розумні результати, хоча у мене є дивне відчуття, що його може бути недостатньо.


+1 Це дуже цікаво. Якщо ви вже не забули про цю роботу, чи спрацював цей підхід врешті? Чи вистачило це як модель "наповнювача / іншого"? Якщо ні, чи реалізували ви врешті-решт щось інше?
Жубарб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.