Сопоставление всех подстрок в грамматике JSGF

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

Однако из-за природы этих «действительных» предложений и фрагмент предложения (под-предложение) с тремя или более словами также является допустимым вводом.

Например, если допустимые предложения:

  • Это действительное предложение
  • Так это один

тогда грамматика должна содержать:

  • Это
  • Это действительный
  • Это действительное предложение
  • действительный
  • это действительное предложение
  • действительное предложение
  • Так это
  • Так это один
  • это один

[Очевидно, что в этом примере эта грамматика кажется немного странной, но она имеет смысл в том языке / контексте, который я использую.]

Есть ли способ сделать это автоматически с использованием синтаксиса грамматики jsgf или любого инструмента pocketsphinx / CMU Sphinx. Конечно, я мог бы программно сгенерировать файл грамматики с учетом набора действительных полных предложений, но это кажется немного длинным и делает файл грамматики длинным и трудным для непосредственного редактирования (или даже просто для определения того, какие действительные полные предложения).

Лучшее, что я могу придумать, просто используя правила формата jsgf (о которых я знаю), это следующее. (Для примера выше :)

<a> = this is a;
<valid> = (<a> | is a) valid;
<sentence> = (<valid> | a valid) sentence;

<this> = so is this;
<one> = (<this> | is this) one;

(Например, правило соответствует любому вложенному предложению длиной три или более, которое заканчивается словом «действительный».)

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

По сути, мой вопрос: есть ли лучший способ достичь вышеуказанной грамматики с помощью pocketsphinx?


person John Don    schedule 27.05.2019    source источник


Ответы (1)


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

Это должно работать:

 <sentence> = this | is  | a | valid | sentence | one | so;

Если вам нужно что-то более продвинутое, вы можете построить модель языка биграмм и преобразовать ее в fsg, как в librispeech paper на рисунке 1.

Также ответили на форуме Sourceforge

person Nikolay Shmyrev    schedule 31.05.2019