Выбор гипотезы

На каждую сказанную пользователем смартапа фразу может быть несколько вариантов распознанного текста. Каждый распознанный вариант одной и той же фразы пользователя - это гипотеза. В некоторых сценариях использования смартапа пригодится выбор не самой вероятной гипотезы, а второй или третьей в списке гипотез распознанного текста.

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

Разработчик может добавить возможность выбора гипотезы в код приложения:

Пример использования

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

Например, русское слово "магазин" имеет почти аналогичное по звучанию, но разное по смыслу, английское слово "magazine". В определённых сценариях из-за такой особенности в смартап могут приходить не самые лучшие гипотезы в качестве распознанного слова или фразы. Если вы хотите исключить распознавание слов и названий на английском языке, применяйте гипотезы только на кириллице.

Добавление через SmartApp Code

Такой скрипт возвращает список гипотез:

  script:
       var hyps = $request.rawRequest.payload.asr.hypotheses;
       $response.replies = $response.replies || [];
         for (var i=0; i < hyps.length; i++) {
             $response.replies.push({
                 "type":"text",
                 "text": String(i) + ": " + hyps[i].words,
                 "tts": ".",
             })
         }

Добавление через SmartApp API

Разрабатывая смартап с использованием SmartMarket Studio API вы можете применять любой язык программирования. Наш пример был написан на Python.

Пример перебора гипотез на Python

  final_hypo = hypos[0]

  for hypo in hypos:
   if is_okay(hypo):
    final_hypo = hypo
    break

Далее вы можете добавить выбор первого варианта на кириллице из списка гипотез, игнорируя гипотезы на английском языке.

Использование вместе с хинтами

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