Я разработал концептуальную систему для распознавания звука с использованием моделей 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
Here the input is an unknown sound but it still returns the closest match as there is no system for thresholding/garbage filtering.
Я знаю, что при определении ключевого слова звук OOV (вне словаря) может быть отфильтрован с использованием модели мусора или наполнителя, но он говорит, что он обучается с использованием конечного набора неизвестных слов, где это не может быть применено к моей системе, как я делаю Не знаю всех звуков, которые система может записать.
Как подобная проблема решается в системе распознавания речи? И как я могу решить мою проблему, чтобы избежать ложных срабатываний?
Это несколько распространено в области распознавания жестов. Ответ заключается в создании пороговой модели, как описано в статье Ли и Кима (1999).
Он играет ту же роль, что и модель наполнителя или мусора, но не требует отдельного обучения, как вы говорите. Вы можете создать пороговую модель, соединив все состояния самоперехода из других ваших моделей и инициализировав переход с одинаковыми вероятностями, полностью связав эти состояния. Пожалуйста, посмотрите на бумагу, чтобы увидеть, как это можно сделать на самом деле.
Даже если ваша библиотека не поддерживает эргодические модели, это не должно помешать вам вручную создать модель требуемого размера и соответственно установить состояния. Если вам действительно нужна библиотека для этого, то , например, в Accord.NET Framework доступны реализации для скрытых классификаторов моделей Маркова, включая поддержку пороговых моделей .
Отказ от ответственности: я являюсь автором этой библиотеки.
источник
Итак, я сделал: я создал свою упрощенную версию модели наполнителя. Каждый hmm, представляющий звук водяного удара, стучащий звук и речевой звук, представляет собой отдельный 6-миллиметровый hmm, обучаемый звуками из обучающего набора из 30, 50, 90 звуков соответственно различной длительности от 0,3 секунды до 10 секунд. Затем я создал модель наполнителя, состоящую из 1 состояния, хм, состоящую из всех звуков обучающего набора для стука, воды и речи. Так что, если оценка по модели хмм больше для данного звука, чем оценка наполнителя - звук распознается, иначе это неизвестный звук. У меня нет больших данных, но я провел следующий тест на отклонение ложных срабатываний и отклонение истинных положительных результатов на невидимых звуках.
Итак, из этого быстрого теста я могу сделать вывод, что этот подход дает разумные результаты, хотя у меня есть странное ощущение, что этого может быть недостаточно.
источник