Сопоставление всех подстрок в грамматике JSGF - PullRequest
0 голосов
/ 27 мая 2019

Я использую грамматику формата 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?

1 Ответ

0 голосов
/ 31 мая 2019

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

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

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

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

Также ответили на Sourceforge Forum

...