На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
  
> PocketSphinx: обучение filler моделей
    Добрый день!

    Есть ли какие-нибудь отличия между обучением моделей обычных звуков и моделей заполняющих шумов (filler models)? И возможно ли создать акустическую модель, содержащую только модели филлеров, чтобы затем переместить их в акустическую модель, которая содержит только модели различных фонем?

    Т.е, правильно ли я понимаю, что для обучения, например, модели дыхания (т.е. +вдох+ +выдох+), нужно записать множество примеров дыхания и построить файл транскрипций (prompts) содержащий последовательность филлеров, т.е. по аналогии с обучением обычной акустической модели.

    Не будет ли в таком случае проблемы с моделью SIL, которая обычно вставляется между словами и в начале и конце каждого предложения?
      Цитата
      Есть ли какие-нибудь отличия между обучением моделей обычных звуков и моделей заполняющих шумов (filler models)?


      Нет

      Цитата
      И возможно ли создать акустическую модель, содержащую только модели филлеров, чтобы затем переместить их в акустическую модель, которая содержит только модели различных фонем?


      В теории можно, на практике объединение моделей не реализовано.

      Цитата
      Не будет ли в таком случае проблемы с моделью SIL, которая обычно вставляется между словами и в начале и конце каждого предложения?


      Если всё правильно сделать, то не будет.
        Спасибо за ответы!

        Раз отличий нет, то можно и попрактиковаться в обучении.

        А объединение моделей в моем случае можно сделать и вручную:
        - склеить файлы распределений, весов и матр.переходов (естественно, не нарушая их внутренний формат)
        - добавить описание филлеров в mdef с правильными номерами состояний и матр. переходов

        Должно работать!
          Продолжаю разбираться с построением филлер-моделей.
          На небольшой базе, содержащей дыхание, натренировал модель ++вдох++ и ++выдох++.
          Затем как и говорил выше, перенес данные филлеры в главную акустическую модель.

          Единственное предупреждение в ходе обучения состояло в том, что из-за отсутствия звуков SIL в транскрипциях, модель SIL не была обучена (но данной цели я и не преследовал)

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

          Вопрос такой - должен ли pocketsphinx выводить в распознанных гипотезах филлер-модели (например: "++вдох++ громкость три"), а если нет, то можно ли его заставить это сделать, ведь нужно каким-то образом контролировать процесс распознавания?
            Цитата
            должен ли pocketsphinx выводить в распознанных гипотезах филлер-модели (например: "++вдох++ громкость три")


            Нет, в строке результата шумы пропускаются. Только если слова с временами печатать, они будут.

            Цитата
            а если нет, то можно ли его заставить это сделать, ведь нужно каким-то образом контролировать процесс распознавания?


            -backtrace yes или -time yes можно добавить для более подробной выдачи. Можно исходный код изменить, чтобы выдавались в строке результата шумы тоже были.
              Спасибо за совет!
              Добавив флаги -backtrace и -time я обнаружил, что при декодировании записей дыхания ни одна филлер-модель, кроме <sil>, не появляется на выходе. Я воспользовался функцией printp чтобы сравнить значения параметров моих обученных сенонов и сенонов старой модели и в целом они выглядят похоже..

              В процессе обучения выводилась информация о правдоподобии обучаемой модели
              ExpandedWrap disabled
                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> выигрывает у моделей ++вдох++ и ++выдох++ при распознавании дыхания

              Или есть какой-нибудь другой способ проверить работу нужной филлер-модели?
              Сообщение отредактировано: AndKy -
                Я провел тут один эксперимент..

                С помощью pocketsphinx_batch, используя новую акустическую модель с обученными филлерами я попытался распознать записи с дыханием. На выходе, вместо распознанного дыхания получались фразы из грамматики с промежуточными моментами тишины, например:

                ExpandedWrap disabled
                  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+):
                ExpandedWrap disabled
                  +INH+ ++INH++
                  +EXH+ ++EXH++
                  +BUB+ ++BUB++
                  <s>   SIL
                  </s>  SIL
                  <sil> SIL
                  -     SIL


                Тогда я решил "обхитрить" декодер, поменяв местами описание SIL и +INH+(вдох) в mdef файле:

                ExpandedWrap disabled
                  # 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>, хотя она уже описывается другими сенонами:

                ExpandedWrap disabled
                  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


                Складывается такое впечатление, что декодер вообще не использует новые филлер-модели при распознавании. Есть какие-нибудь идеи почему так происходит?
                Сообщение отредактировано: AndKy -
                  Нашел в обсуждении похожей проблемы следующее решение (http://sourceforge.net/p/cmusphinx/discuss...hread/f70e61f4/)

                  -fillprob 0.1

                  Теперь филлер модели ожили!

                  ExpandedWrap disabled
                    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
                    Поздравляю
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0328 ]   [ 14 queries used ]   [ Generated: 21.05.24, 11:29 GMT ]