Распознавание голоса, есть ли способ определить, что говорит пользователь, возможно, с помощью регулярного выражения?

Я использую функцию распознавания голоса в Android, я могу говорить в свое устройство и получать список возможных слов.

Когда я говорю «начало», он дает мне следующие слова, которые, как ему кажется, он слышит:

  1. акции
  2. запас
  3. останавливаться
  4. Начало
  5. остановки
  6. старки

Этот список будет зависеть от пользовательских акцентов среди множества других факторов. Есть ли простой способ проверить этот список на наличие определенного слова?

Если пользователь выдает команду «старт» или «стоп», мне нужно уметь различать эти две команды.

Моя первоначальная мысль заключалась в том, чтобы использовать регулярное выражение для проверки «sta» или «sto» в любом из ответов, есть ли более эффективный способ?


person Jimmy    schedule 12.02.2011    source источник
comment
Я бы рекомендовал пометить это по-другому, возможно, Java/Regex. Я думаю, вы найдете больше людей, имеющих опыт в этих областях, чем через Android. Плюс ваш вопрос на самом деле не о распознавании голоса. Речь идет о том, как анализировать/искать строку, которую обеспечивает распознавание голоса.   -  person user432209    schedule 12.02.2011


Ответы (1)


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

Например, start кодирует S363, а stop кодирует S310. Оценка тех, кто соответствует словам, как процент совпадающих символов, приводит к следующей таблице:

Word    Soundex  S363   S310
----    -------  ----   ----
stocks  S320     0.50   0.75
stock   S320     0.50   0.75
stop    S310     0.50   1.00
start   S363     1.00   0.50
stops   S312     0.50   0.75
starks  S362     0.75   0.50
                 ----   ----
Average Score    0.63   0.71

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

Вы можете обойти это, выбрав слова, которые не очень похожи, например go и stop или begin и end. Затем вы можете полностью отказаться от Soundex и просто искать целевые слова в возвращаемом списке. Вам придется следить за этим в других локализациях вашего приложения, потому что другие языки могут иметь аналогичные проблемы (например, французский, в котором есть allez и arrêtez).

ХТН.

person Blrfl    schedule 12.02.2011