Хинты
Хинты - это одноразовые подсказки для сервиса распознавания речи, помогающие правильно понять речь пользователя в определённый момент времени. Например, когда приложение ожидает от пользователя конкретный ответ, этот ответ заранее придёт в сервис в виде хинтов.
Подсказка работает только для следующего ответа пользователя. После использования хинтов процесс распознавания речи пользователя возвращается к её обработке без подсказок.
Хинты можно подключать двумя способами:
- Через SmartApp Code
- Через SmartApp API
Виды хинтов
Хинты могут быть не только списком слов или фраз. Существуют следующие виды хинтов:
words
- позволяет использовать список слов или фраз, распознавание которых мы хотим усилить. Здесь можно перечислить слова, которые с высокой вероятностью будет произносить пользователь, отвечая ассистенту в приложении.enable_letters
- позволяет включить модель коротких фраз, тем самым улучшить распознавание отдельных букв и коротких слов.nospeechtimeout
- меняет интервал ожидания речи пользователя. Возможные значения от 2 до 20 секунд. По умолчанию стоит 7 секунд.eou
- меняет настройку распознавания конца фразы (End of Utterance - eou). Такое распознавание будет ожидаться после конца фразы столько секунд, сколько установлено в этом параметре. Возможные значения от 0.5 до 5 секунд. По умолчанию распознавание конца фразы срабатывает после 1 секунды.
Как работают хинты
Хинты срабатывают однократно и отправляются в сервис распознавания речи, чтобы следующая фраза пользователя была правильно распознана и передана приложению. Хинты необходимо включать в код приложения каждый раз, когда нужно их отправить в сервис распознавания речи. Пример работы хинтов:
- Пользователь открывает приложение с игрой и говорит: "Начинай игру".
- Ассистент отвечает: "Скажи, кто ходит первый. Ты или я?". Приложение в этот момент передаёт хинты
enable_letters
. - Далее пользователь отвечает: "Я". Фраза "Я" использует хинты и успешно распознаётся.
Хинты срабатывают один раз для следующего запроса пользователя из шага 3 после их передачи на шаге 2. По умолчанию ассистент ожидает ответа пользователя 7 секунд, и далее хинты уже не будут работать. Одновременно с шагом 2 вы можете использовать флаг auto_listening
для следующих действий:
- если
"auto_listening": false
, пользователь сам инициирует запрос (кнопкой или споттер-словом), который выполняется на шаге 3. - если
"auto_listening": true
, ассистент ожидает ответа от пользователя 7 секунд. Ответ пользователя в этом промежутке будет запросом, выполняемым на шаге 3.
Примеры вставки хинтов в код приложения
Для разработки приложений в SmartApp Code используются языки программирования SmartApp DSL и JavaScript. Ниже приведены примеры вставки хинтов на языке SmartApp DSL. При использовании JavaScript вы можете вынести приведённый в примерах скрипт в отдельную функцию и вызвать её по своему усмотрению из любого места кода.
Обратите внимание, если вы добавляете ответ, как указано в примере, то следующий пользовательский запрос передаст хинты однократно! Вызывать функцию с хинтами необходимо каждый раз, когда нужно их передать в сервис синтеза речи.
Вставка хинтов в SmartApp Code
Хинты с использованием words
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type":"raw",
"body":{
"asr_hints": {
"words": ["Гуакомоле", "Зуппа ди пеше"]
},
},
"messageName":"ANSWER_TO_USER"
})
Хинты с использованием enable_letters
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type":"raw",
"body":{
"asr_hints": {
"enable_letters": true
},
},
"messageName":"ANSWER_TO_USER"
})
Хинты с использованием nospeechtimeout
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type":"raw",
"body":{
"asr_hints": {
"nospeechtimeout": 12
},
},
"messageName":"ANSWER_TO_USER"
})
Хинты с использованием eou
script:
$response.replies = $response.replies || [];
$response.replies.push({
"type":"raw",
"body":{
"asr_hints": {
"eou": 5
},
},
"messageName":"ANSWER_TO_USER"
})
Вставка хинтов в SmartApp API
Если вы используете SmartApp API, то хинты добавляются в поле payload
ответа пользователю с типом ANSWER_TO_USER
. Примеры:
Хинты с использованием words
"payload": {
"asr_hints": {
"words": ["лайк", "дизлайк"]
}
}
Хинты с использованием enable_letters
"payload": {
"asr_hints": {
"enable_letters": true
}
}
Хинты с использованием nospeechtimeout
"payload": {
"asr_hints": {
"nospeechtimeout": 12
}
}
Хинты с использованием eou
"payload": {
"asr_hints": {
"eou": 5
}
}
Примеры работы хинтов в разных приложениях
Использование words
words
позволяет использовать список слов или фраз, распознавание которых мы хотим усилить. Пример: приложение с игрой "Кто хочет стать миллионером".
- Пользователь запускает игру.
- Ассистент задаёт вопрос и ожидает ответ от пользователя. В этот момент в сервис распознавания отправляются хинты с правильным вариантом ответа на вопрос.
- Пользователь отвечает на вопрос правильно (в данном случае срабатывают хинты, и ответ пользователя использует хинты) или неправильно (в данном случае речь пользователя распознаётся штатно).
Использование enable_letters
enable_letters
позволяет включить модель коротких фраз, тем самым улучшить распознавание отдельных букв и коротких слов. Пример: игра "Поле чудес".
- Пользователь запускает игру.
- Ассистент задаёт вопрос о слове, которое нужно угадать, произнося отдельные буквы. В этот момент в сервис распознавания отправляется включённая опция
enable_letters
, и приложение ожидает от пользователя произнесение отдельных букв. - Пользователь произносит букву, и приложение правильно её распознаёт.
Использование nospeechtimeout
nospeechtimeout
меняет интервал ожидания речи пользователя. Возможные значения от 2 до 20 секунд. По-умолчанию стоит 7 секунд. Пример: игра "Что? Где? Когда?".
- Пользователь запускает игру.
- Ассистент задаёт вопрос. В этот момент в сервис распознавания отправляется включённая опция
"nospeechtimeout": 20
с увеличенным интервалом ожидания ответа пользователя. - Пользователь отвечает на вопрос в пределах выставленного интервала, и приложение правильно распознаёт ответ, связывая его с вопросом.
Использование eou
Параметр eou
определяет, как долго ассистент ждёт окончания фразы пользователя. Возможные значения от 0.5 до 5 секунд. Если ожидается, что пользователь может закончить фразу после небольшой паузы, стоит увеличить значение eou
.
- Пользователь запускает приложение и хочет перевести деньги на номер телефона.
- Ассистент спрашивает номер телефона, на который надо перевести деньги. Пользователь начинает произносить номер телефона не быстро и с некоторыми паузами.
- Со значением eou, равным 5 секунд, распознавание речи не прерывается на середине фразы, а продолжается далее, пока номер полностью не распознается.