Журнал / польза

Как устроена работа голосовых помощников

От распознавания звуков до человечных ответов на вопросы.

Голосовые помощники экономят время пользователей: с их помощью можно мгновенно включить музыку или набрать нужный номер. Однако для того, чтобы правильно отреагировать на запрос человека, голосовому ассистенту нужно выполнить десятки действий: распознать отдельные звуки, представить их в виде чисел, перевести в текст и так далее. Академия Яндекса составила путеводитель по работе голосовых помощников и узнала у разработчиков Алисы, как их речь делают человечной.

Как голосовые помощники распознают речь

Первая стадия в работе голосового ассистента — это обработка звука.

Если сказать помощнику «Лев Толстой», то он услышит не два слова, а звуковой сигнал, в котором гласные и согласные плавно перетекают друг в друга.

Задача системы распознавания речи SpeechKit — восстановить по этому сигналу то, что человек говорил.

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

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

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

Как и человек, голосовой помощник не всегда хорошо распознаёт звуки, и ему приходится достраивать слова исходя из контекста и статистики. У него есть таблица вероятностей переходов, которая указывает, что после «к» с одной вероятностью будет «о», с другой — «т» и так далее. Это позволяет определить варианты последовательности фонем и потом варианты слов, которые вы могли сказать.

Голосовому помощнику нужно учитывать множество акцентов, в которых фонемы звучат по-разному. Например, в Москве чаще будет произноситься гласная «а», а в Архангельске — «о». Причем, если для Siri и Alexa можно выбрать британский или американский английский, а вот вологодского или краснодарского русского нет.

Как голосовые ассистенты понимают и выполняют поручения

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

Задача классификатора намерений — определить, что человек хотел сказать своей фразой. Например, если пользователь спросил: «Будет ли завтра дождь?», то голосовой помощник должен понять, что речь идёт о погоде. В классификаторе намерений запрос дробится на слова и пунктуационные знаки. Для них применяют обученные на больших данных эмбеддинги — представления слов, которые позволяют понять, в каком контексте эти слова обычно используются.

Один из самых простых методов эмбеддинга — это контекстные векторы. Сперва для текстового корпуса составляют словарь, из которого выбираются самые распространённые слова. Дальше подсчитывается, сколько раз каждое слово из словаря встречается в контексте выбранных слов, и таким образом получается вектор. Так, если слово «дождь» трижды встречалось рядом со словом «погода», один раз — со словом «прогноз» и ни разу — со словом «радость», то его векторное представление будет выглядеть так: [3;1;0]. Затем смысл (интент) каждого слова определяется по его ближайшим соседям: в приведённом примере это «погода».

Для каждого намерения есть специальная модель, которая выделяет полезную информацию в том, что сказал пользователь, — она называется семантическим теггером. Теггер для погоды по предложению «Будет ли завтра дождь?» понял бы, что завтра — это дата, на которую пользователю нужен прогноз.

Задавая вопросы, люди редко проговаривают всю нужную для ответа информацию, поэтому голосовому помощнику приходится её достраивать. Например, чтобы понять, погоду в каком городе хочет узнать пользователь, ассистент может либо переспросить пользователя, либо получить эту информацию сам, если на смартфоне включено определение геолокации. Только после этого помощник может дать подходящий ответ.

Как голосовых помощников учат быть человечными

Если запрос не подошёл ни под один из сценариев, то его перенаправляют в поиск или в модуль для неформальных разговоров — в Алисе его называют «болталкой». Голосовых ассистентов часто используют не для того, чтобы узнать или сделать что-то конкретное, а чтобы поиграть: спросить у помощника, какие книги ему нравятся или что на нём надето.

Эта задача решается при помощи редакторских ответов: команда авторов выбирает сотни наиболее популярных у пользователей вопросов и пишет по несколько вариантов ответа на каждый. Составлять ответы нужно в едином стиле, чтобы из них складывался цельный образ помощника.

У каждого голосового ассистента есть личность: пол, имя, черты характера и стиль речи.

Алиса не может позволить себе общаться с пользователем на «ты» и соблюдает дистанцию: здесь у неё есть прототип — Мэри Поппинс.

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

Для ответов на неклассифицируемые вопросы и реплики голосовые помощники обычно используют нейросети, обученные на базе текстов из медиа, книг и кино. Так, Алиса учится на самых разных материалах, в которых персонажи в том числе ругаются и спорят — и может научиться совсем не тому, чего хотят разработчики.

Как и ребёнка, голосового помощника нельзя научить вести себя вежливо, ограждая от всего: то есть, обучая нейросеть на «чистом» датасете, где нет грубостей и прочих неприятных вещей, встречающихся в реальном мире.

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

Обучение ассистентов — как обучение детей: они всему учатся постепенно и иногда ошибаются. И это нормально.