NSSpeechRecognizer с элементами подстановочных команд - PullRequest
1 голос
/ 15 января 2012

Документы для NSSpeechRecognizer утверждают, что сложные, многоэтапные действия могут быть выполнены из однократных голосовых команд, таких как:

«запланировать встречу с Адамом и Джоном на завтра в десять часов.”

Я могу выполнять простые команды, которые запрограммированы заранее, но я не понимаю, как это можно интерпретировать с помощью класса.Кажется, что

«планировать * с * *»

должно быть командой.Есть идеи, возможно ли что-то подобное?Или мы просто должны передать бесконечное количество возможных команд распознавателю?

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Из документации NSSpeechRecognizer мне не кажется, что он будет поддерживать использование сложных фраз, подобных приведенному вами примеру.Чтобы получить смысловое значение от такой фразы, вы должны использовать систему, которая поддерживает мультислот грамматики , как и большинство систем IVR, которые поддерживают стандарт VoiceXML.Мне кажется, что этот API распознавания речи поддерживает только передачу простых команд в виде массива и не указывает сложные грамматические правила.В этом типе системы вам потребуется реализовать так называемый направленный диалог, который может выглядеть примерно так:

C: Что бы вы хотели сделать?

U: Назначить встречу.

C: Скажите мне первый человек, которого вы хотели бы посетить?

U: Адам.

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

U: Джон.

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

U: Готово.

C: Какой сегодня день этой встречи?

U: Завтра.

C: Сколько времени на собрание?

U: Десять часов.

C: Спасибо.Ваша встреча была запланирована.

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

1 голос
/ 16 января 2012

Моя интерпретация документов такова, что вам нужно будет накапливать и работать в любом сложном состоянии самостоятельно. Вы предоставляете NSSpeechRecognizer набор отдельных слов / фраз, которые он должен распознавать как «команды», и он сообщает вам, когда распознает их.

Для примера, который вы привели, я думаю, что вы столкнетесь с проблемами, когда перейдете к части "Адам и Джон" - это не произвольный механизм диктовки. Но, для забавы, давайте попробуем представить, как мы можем это сделать:

Вы можете сказать, что хотите распознать следующие фразы как «команды»:

  • "график а"
  • «встреча» (и, возможно, «встреча», «playdate» и т. Д.)
  • "с"
  • "Адам и Иоанн"
  • «завтра» (и, возможно, другие связанные вещи, такие как «сегодня», «через два дня», все дни недели и т. Д.)
  • «десять часов»

Поскольку слова / фразы распознаются, вы можете создать стек семантически связанных слов / фраз на основе ранее распознанных слов / фраз. Так, например, он распознает фразу «планировать», и вы знаете, что должно быть больше информации для заполнения семантического контекста, поэтому вы помещаете эту фразу в стек. Далее он распознает «встречу». Ваше приложение говорит «конечно, встреча - это то, что может быть запланировано» и помещает ее в стек. Если следующее слово, которое оно распознало, не было уместным для ранее распознанной команды «планировать a», то оно очистило бы стек. Если в какой-то момент элементы в стеке удовлетворяют некоторым предварительно определенным критериям для полностью сформированного выражения семантического намерения, тогда ваше приложение может предпринять соответствующее действие на основе этого намерения. Очевидно, в этом есть и временной элемент. Если следующая вещь, необходимая для установления семантического контекста, не приходит в разумные сроки, стек семантического контекста должен быть очищен.

Концептуально похожей системой является система распознавания жестов сенсорной панели / трекпада iOS / MacOS. Когда происходит касание касания, ОС должна распознать одно касание и подтвердить возможность того, что это все намерение пользователя, но она также должна управлять возможностью того, что она может получить еще одно касание очень быстро, превращая одно касание в двойное нажатие. Это должно будет накапливать это состояние с течением времени и выводить намерения пользователя, просматривая комбинацию дискретных событий.

Вы не собираетесь получать такую ​​функциональность от NSSpeechRecognizer бесплатно, и, поскольку это не механизм диктовки, вы также не получите от него произвольные «токены» (например, «Адам и Джон», если вы не регистрировать какой-то гигантский список имен, все как потенциальные команды.) Но даже в этом случае это не означает, что нельзя было бы использовать некоторые изящные вещи, используя механизм, как я описал. Просто тебе придется написать это самому.

Удачи!

...