Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.239.150.167] |
|
Сообщ.
#1
,
|
|
|
Добрый день!
Есть ли какие-нибудь отличия между обучением моделей обычных звуков и моделей заполняющих шумов (filler models)? И возможно ли создать акустическую модель, содержащую только модели филлеров, чтобы затем переместить их в акустическую модель, которая содержит только модели различных фонем? Т.е, правильно ли я понимаю, что для обучения, например, модели дыхания (т.е. +вдох+ +выдох+), нужно записать множество примеров дыхания и построить файл транскрипций (prompts) содержащий последовательность филлеров, т.е. по аналогии с обучением обычной акустической модели. Не будет ли в таком случае проблемы с моделью SIL, которая обычно вставляется между словами и в начале и конце каждого предложения? |
Сообщ.
#2
,
|
|
|
Цитата Есть ли какие-нибудь отличия между обучением моделей обычных звуков и моделей заполняющих шумов (filler models)? Нет Цитата И возможно ли создать акустическую модель, содержащую только модели филлеров, чтобы затем переместить их в акустическую модель, которая содержит только модели различных фонем? В теории можно, на практике объединение моделей не реализовано. Цитата Не будет ли в таком случае проблемы с моделью SIL, которая обычно вставляется между словами и в начале и конце каждого предложения? Если всё правильно сделать, то не будет. |
Сообщ.
#3
,
|
|
|
Спасибо за ответы!
Раз отличий нет, то можно и попрактиковаться в обучении. А объединение моделей в моем случае можно сделать и вручную: - склеить файлы распределений, весов и матр.переходов (естественно, не нарушая их внутренний формат) - добавить описание филлеров в mdef с правильными номерами состояний и матр. переходов Должно работать! |
Сообщ.
#4
,
|
|
|
Продолжаю разбираться с построением филлер-моделей.
На небольшой базе, содержащей дыхание, натренировал модель ++вдох++ и ++выдох++. Затем как и говорил выше, перенес данные филлеры в главную акустическую модель. Единственное предупреждение в ходе обучения состояло в том, что из-за отсутствия звуков SIL в транскрипциях, модель SIL не была обучена (но данной цели я и не преследовал) Сейчас я начал тестировать полученную акустическую модель и столкнулся с тем, что при распознавании записей, содержащих фрагменты дыхания, либо совсем нет гипотез, либо ошибочно распознается фраза из грамматики. Вопрос такой - должен ли pocketsphinx выводить в распознанных гипотезах филлер-модели (например: "++вдох++ громкость три"), а если нет, то можно ли его заставить это сделать, ведь нужно каким-то образом контролировать процесс распознавания? |
Сообщ.
#5
,
|
|
|
Цитата должен ли pocketsphinx выводить в распознанных гипотезах филлер-модели (например: "++вдох++ громкость три") Нет, в строке результата шумы пропускаются. Только если слова с временами печатать, они будут. Цитата а если нет, то можно ли его заставить это сделать, ведь нужно каким-то образом контролировать процесс распознавания? -backtrace yes или -time yes можно добавить для более подробной выдачи. Можно исходный код изменить, чтобы выдавались в строке результата шумы тоже были. |
Сообщ.
#6
,
|
|
|
Спасибо за совет!
Добавив флаги -backtrace и -time я обнаружил, что при декодировании записей дыхания ни одна филлер-модель, кроме <sil>, не появляется на выходе. Я воспользовался функцией printp чтобы сравнить значения параметров моих обученных сенонов и сенонов старой модели и в целом они выглядят похоже.. В процессе обучения выводилась информация о правдоподобии обучаемой модели Baum welch starting for 8 Gaussian(s), iteration: 1 (1 of 1) Normalization for iteration: 1 Current Overall Likelihood Per Frame = 6.27045468698569 Baum welch starting for 8 Gaussian(s), iteration: 2 (1 of 1) Normalization for iteration: 2 Current Overall Likelihood Per Frame = 6.75358592732956 Baum welch starting for 8 Gaussian(s), iteration: 3 (1 of 1) Normalization for iteration: 3 Current Overall Likelihood Per Frame = 6.84499185993755 На сколько я понимаю, декодер, зная транскрипции фраз, рассчитывает данную оценку правдоподобия. А можно ли тоже самое сделать с помощью pockeshinx_batch? Чтобы понять, почему модель <sil> выигрывает у моделей ++вдох++ и ++выдох++ при распознавании дыхания Или есть какой-нибудь другой способ проверить работу нужной филлер-модели? |
Сообщ.
#7
,
|
|
|
Я провел тут один эксперимент..
С помощью pocketsphinx_batch, используя новую акустическую модель с обученными филлерами я попытался распознать записи с дыханием. На выходе, вместо распознанного дыхания получались фразы из грамматики с промежуточными моментами тишины, например: word start end pprob ascr lscr lback <sil> 0 50 1.000 -1161 -337 1 <sil> 51 122 1.000 -1832 -337 1 <sil> 123 167 1.000 -381 -337 1 громкость 168 436 1.000 -4274 0 1 ноль 437 661 1.000 -4816 0 1 (NULL) 661 661 1.000 0 -7 1 Т.е. вместо моделей +вдох+ и +выдох+ распознается модель <sil> и обрывки команд. Однако в словаре шумов есть и филлеры для вдоха и выдоха (+INH+ +EXH+): +INH+ ++INH++ +EXH+ ++EXH++ +BUB+ ++BUB++ <s> SIL </s> SIL <sil> SIL - SIL Тогда я решил "обхитрить" декодер, поменяв местами описание SIL и +INH+(вдох) в mdef файле: # Columns definitions #base lft rt p attrib tmat ... state id's ... ++BUB++ - - - filler 51 153 154 155 N ++EXH++ - - - filler 52 156 157 158 N ++INH++ - - - filler 0 0 1 2 N <- теперь ++INH++ отображен на сеноны SIL SIL - - - filler 53 159 160 161 N а SIL отображен на сеноны модели ++INH++ a - - - n/a 1 3 4 5 N aa - - - n/a 2 6 7 8 N ae - - - n/a 3 9 10 11 N Теперь, при распознавании тех же записей, декодер должен выдавать +INH+ вместо <SIL>, однако на практике он снова выдает гипотизы, включающие модель <sil>, хотя она уже описывается другими сенонами: word start end pprob ascr lscr lback <sil> 0 148 1.000 -2209 -337 1 <sil> 149 225 1.000 -447 -337 1 громкость 226 339 1.000 -3299 0 1 <sil> 340 570 1.000 -1919 -337 1 <sil> 571 595 1.000 -459 -337 1 пять 596 662 1.000 -2647 -7 1 <sil> 663 746 1.000 -1485 -337 1 Складывается такое впечатление, что декодер вообще не использует новые филлер-модели при распознавании. Есть какие-нибудь идеи почему так происходит? |
Сообщ.
#8
,
|
|
|
Нашел в обсуждении похожей проблемы следующее решение (http://sourceforge.net/p/cmusphinx/discuss...hread/f70e61f4/)
-fillprob 0.1 Теперь филлер модели ожили! word start end pprob ascr lscr lback +INH+ 0 123 1.000 -2187 -147 1 +INH+ 124 216 1.000 -836 -147 1 +EXH+ 217 393 1.000 -1606 -147 1 +EXH+ 394 422 1.000 -1248 0 1 +INH+ 423 554 1.000 -2715 -147 1 +INH+ 555 621 1.000 -531 -147 1 +INH+ 622 644 1.000 -450 -147 1 +EXH+ 645 702 1.000 -365 -147 1 +BUB+ 703 823 1.000 -482 -147 1 |
Сообщ.
#9
,
|
|
|
Поздравляю
|