Menu

pocketsphinx lattice

Help
Вадим
2012-02-05
2012-09-22
  • Вадим

    Вадим - 2012-02-05

    Здравствуйте Николай,
    хотел бы задать такой вопрос - есть у меня грамматика .jsgf, в которой есть
    список команд управления "вперёд/назад/вправо/влево". Мне бы хотелось знать,
    можно ли както показывать, какая вероятность того, что распознанное слово
    соответствует фонемам, которые отображают записанный кусочек фразы? тоесть
    например, слово "влево" в словаре в виде фонем "v ll ee v aa", а на практике
    поидее фонемы выглядят как "b aa ll ae ee aa" или "v aa ee v a" - это ведь не
    точная транскрипция слова "влева" - точная v ll ee v aa и равняется 100%, а
    остальные - как узнать сколько процентов уверенности? это возможно?

     
  • Nickolay V. Shmyrev

    Эта функция не реализована

     
  • Вадим

    Вадим - 2012-02-06

    Спасибо, Николай. Буду тогда сам писать такой алгоритм.
    Кстати, выводить результат в виде фонем можно - основываясь на теме "keyword
    spotting with pocketsphinx."
    Если привести такую грамматику:

    #JSGF V1.0;
    
    grammar rbot;
    
    public <command> = <garbage_loop>;
    
    <garbage_loop> = ( hh | f | gg | e | kk | pp | bb | zz | sch | mm | y | zh | u | z | b | uu | ch | ff | yy | g | ur | c | k | ss | rr | ll | ae | m | nn | t | d | vv | i | j | ee | dd | n | oo | l | v | ay | sh | aa | r | p | s | a | h | ii | tt )+;
    

    где hh, f, gg и т.п. - отмечены в словаре таким образом:

    hh hh
    f f
    gg gg
    e e
    kk kk
    pp pp
    

    если запустить pocketsphinx_continuous.exe с параметрами

    -jsgf commands.gram -dict dict.dic -bestpath no -nbest no
    

    (bestpath и nbest отключаем потому что так быстрее и все равно эффективно) -
    запускаем и теперь любая фраза вообще будет показывать в виде фонем.

     
  • Вадим

    Вадим - 2012-02-06

    "хороший способ" - e n d r oo zh ii s t b oo s oo p m f

     
  • Вадим

    Вадим - 2012-02-06

    А также можно игнорировать мусорные слова - если сделать такую грамматику:

    public <command> = ( <garbage_loop> <greet> <garbage_loop> ) | <garbage_loop>;
    public <greet> = ( вперёд | назад | вправо | влево );
    <garbage_loop> = ( hh | f | gg | e | kk | pp | bb | zz | sch | mm | y | zh | u | z | b | uu | ch | ff | yy | g | ur | c | k | ss | rr | ll | ae | m | nn | t | d | vv | i | j | ee | dd | n | oo | l | v | ay | sh | aa | r | p | s | a | h | ii | tt )+;
    

    таким образом, он будет довольно хорошо распознавать команды - например
    "вперёд" - "f вперёд tt" а если сказать чтото непохожее - он просто напишет
    результат в фонемах. Но остается небольшая проблема - он может и команды
    распознать плохо - тоесть говорю "вперёд" а он "v ae ee rr oo tt" - поэтому
    если написать скриптик который будет обрабатывать фонемный результат и писать
    сколько процентов - то можно улучшить распознавание еще лучше.

     
  • Nickolay V. Shmyrev

    Можно и так

     

Log in to post a comment.