Скрытая марковская модель

Я разработал доказательство концепции системы для распознавания звука с использованием mfcc и скрытых марковских моделей. Это дает многообещающие результаты, когда я тестирую систему на известных звуках. Несмотря на то, что система, когда вводится неизвестный звук, возвращает результат с ближайшим совпадением, и оценка не отличается от того, что он изобретает, это неизвестный звук, например:

Я подготовил 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

Здесь вход неизвестный, но он по-прежнему возвращает самое близкое совпадение, так как нет системы фильтрации порога/мусора.

Я знаю, что при ключевом слове OOV (из словаря) звук можно отфильтровать с использованием модели мусора или наполнителя, но он говорит, что он обучается с использованием конечного набора неизвестных слов, где это не может быть применено к моей системе так как я не знаю всех звуков, которые может записать система.

Как подобная проблема решена в системе распознавания речи? И как я могу решить свою проблему, чтобы избежать ложных срабатываний?

Ответ 1

Чтобы отклонить другие слова, вам нужна модель наполнителя.

Это статистическая гипотеза. У вас есть две гипотезы (слово известно, а слово неизвестно). Чтобы принять решение, вам нужно оценить вероятность каждой гипотезы.

Модель Filler обучается из речи, которую вы имеете, по-другому, например, для любого речевого звука может быть один гауссовский. Вы сравниваете оценку от общей модели наполнителя и оцениваете от слова HMM и принимаете решение. Для получения более подробной информации и расширенных алгоритмов вы можете проверить любую бумагу для определения ключевых слов. Этот тезис имеет хороший обзор:

ACOUSTIC KEYWORD SPOTTING В РЕЧЕ С ПРИМЕНЕНИЯМИ ДЛЯ ДАННЫХ A. J. Kishan Thambiratnam

http://eprints.qut.edu.au/37254/1/Albert_Thambiratnam_Thesis.pdf

Ответ 2

Итак, что я сделал: я создал мою упрощенную версию модели наполнителя. Каждый хмм, представляющий звук водонагревателя, звук стука и звука речи - это отдельное 6 состояний хм, обученное звуками из набора упражнений 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

Итак, из этого быстрого теста я могу заключить, что этот подход дает разумные результаты, хотя у меня странное чувство, что этого может быть недостаточно.

Ответ 3

Дискриминационные модели, как правило, лучше выполняют задачи классификации, чем генеративные модели.

Вы можете определенно получить более высокую производительность по этой задаче, используя специально разработанный CRF или классификатор max-margin (структурированный svm).

В этой статье (http://ttic.uchicago.edu/~jkeshet/papers/KeshetGrBe07.pdf) обсуждается проблема классификации, аналогичная вашей, и показано, что формулировка max-margin превосходит генеративный подход с моделью наполнителя.

Вероятно, нет ничего, что могло бы сделать то, что я описал, но с некоторыми усилиями вы могли бы расширить svm-struct. (Реализация hmm-svm не будет работать для вашей проблемы, потому что вам нужно заранее указать структуру скрытого состояния, а не изучать произвольно связанную структуру скрытого состояния.)