Весной мы запустили платформу Диалоги, которая позволяет создавать навыки для Алисы и распознавать голосовые запросы пользователей. Изначально разработчикам навыков приходилось разбирать запросы самостоятельно. К примеру, находить адрес в тексте. Теперь эту часть работы платформа берёт на себя.
Сегодня мы расскажем читателям Хабра о распознавании именованных сущностей (Named-entity recognition; NER) и новых возможностях для разработчиков навыков.
Мы верим, что будущее за голосовыми интерфейсами. Уже сейчас во многих случаях пользователи предпочитают использовать голос, а не экранную клавиатуру. Например, при управлении автомобилем. Или для поиска быстрых ответов на простые вопросы. Или для игры в «города» лёжа на диване. Но чтобы таких сценариев становилось всё больше, простого распознавания голоса в текст недостаточно.
Голосовые интерфейсы подобны запросам поисковой системе. Мы не всегда понимаем, как именно нужно сформулировать свой запрос, чтобы найти ровно то, что нужно. На заре становления интернета это было большой проблемой, потому что поисковые системы искали лишь точные вхождения слов из запроса. Так и с голосом. Если мы не знаем, какую именно команду ждут от нас, то гадать будем долго.
Хороший голосовой интерфейс не должен загонять человека в тупик. Обычно разработчики навыков решают это с помощью двух приемов. Прежде всего, ожидаемые ответы подсказывают с помощью кнопок на экране. Это полезная практика, которую мы рекомендуем не игнорировать.
Также создатели навыков стараются разбивать сложные вопросы на серию более простых, ответы на которые проще прогнозировать. Причём в ряде случаев от пользователей требуют произносить слова строго в определённой форме и падеже. Проблема такого подхода в том, что его уже нельзя назвать естественным общением. Чем больше условностей и ограничений, тем меньше голосовое управление отличается от использования клавиатуры и кнопок. В идеале пользователь должен общаться с сервисом так же свободно, как и с человеком.
Хорошо, когда пользователь может сказать «Спасибо! Доставьте заказ на Льва Толстого 16 и передайте Сергею Сергееву», а не разбивать это на серию вопросов об улице, номере дома, имени и фамилии. Но это потребует от разработчика навыка дополнительно разбирать полученные ответы. Можно делать это вручную силами оператора, но при большом потоке операторов понадобится много. А ещё операторы вряд ли будут делать это в режиме реального времени, поэтому навык лишится возможности уточнить недостающую информацию сразу. Можно разработать технологию, которая будет автоматически находить в тексте важную информацию, классифицировать её, нормализовать и сохранять. Но это довольно трудозатратная задача.
Чтобы эффективно извлекать из текста полезные сущности и корректно их классифицировать по типам, у сервиса должен быть опыт в двух важных направлениях. Прежде всего, нужно уметь собирать знания о том, какие объекты бывают. Если у вас в «словаре» нет улицы Льва Толстого, то при обработке запроса её легко спутать с именем человека и пропустить. С другой стороны, не менее важно уметь находить эти объекты в сыром тексте от пользователя. Как минимум учитывать морфологию русского языка, чтобы слово «Сергею» нашлось и превратилось в имя «Сергей».
Так сложилось, что у Яндекса большой опыт в этих направлениях. Поисковые технологии применяются как для поиска новых объектов, так и разбора пользовательских запросов. Теперь эти технологии доступны и разработчикам навыков для Алисы.
Распознавание именованных сущностей в Диалогах
После того, как пользователь произносит команду, наша платформа распознает ее текст и извлекает слова и фразы, которые описывают определенные объекты. На текущий момент Диалоги распознают:
— имена;
— указания на местоположение;
— даты и время;
— целые и дробные числа.
Информация о распознанных объектах отправляется на сервер навыка вместе с текстом ответа пользователя. Рассмотрим на примере:
«Закажи пиццу на Льва Толстого 16 для Сергея Сергеева на 10 вечера»
Наша платформа знает, что Лев Толстой – это не только человек, но и улица. Она также учитывает, что в адресах рядом с названиями улиц часто указывают номера домов. Поэтому запрос к навыку будет содержать следующий блок:
{
"type": "YANDEX.GEO",
"value": {
"house_number": "16",
"street": "льва толстого"
}
}
Указания на местоположения могут содержать не только улицу и дом, но и город, страну или даже аэропорт.
С именами это работает примерно так же. Платформы умеет находить имя, фамилию, отчество и приводить их к именительному падежу.
{
"type": "YANDEX.FIO",
"value": {
"first_name": "сергей",
"last_name": "сергеев"
}
}
Нормализация данных – важная особенность распознавания именованных сущностей. Если для адресов и имен это свойство не так явно бросается в глаза, то с датами и временем всё куда нагляднее. «10 вечера» автоматически превращается в «22». «Завтра» и «послезавтра» явным образом инкрементируют даты.
{
"type": "YANDEX.DATETIME",
"value": {
"hour_is_relative": false,
"hour": 22
}
}
Распознавание чисел также не стоит недооценивать. К примеру, «четыре целых пять десятых» в тексте от пользователя превратится в:
{
"type": "YANDEX.NUMBER",
"value": 4.5
}
Заинтересовало? Приглашаем в документацию. Если вопросы останутся, то добро пожаловать в наш чат в Телеграме. За другими новостями платформы удобно следить в блоге.
Автор: firstlena