Проблемы интерпретации голосового ввода — как это работает у нас

в 9:41, , рубрики: ivr, естественный анализ, Работа со звуком, разработка, распознавание речи, телефония

По стопам публикаций habrahabr.ru/company/croc/blog/235565/ и habrahabr.ru/company/megafon/blog/228899/, а так же комментариев к ним, я решил рассказать, как мы решаем проблему интерпретации голосового ввода в нашей диалоговой системе.

Для начала позвольте продемонстрировать небольшой видеоролик из нашего интерфейса прототипирования и разработки диалогов, снятый специально для статьи. Снят он по мотивам комментариев к публикации Мегафона (смотреть, по возможности, в разрешении 720+):

Хотелось бы отметить, что система не требует какой-либо предварительной подготовки – из ролика, надеюсь, очевидно, что я создаю и тестирую диалог «на лету».

Основные отличия нашего подхода к созданию диалогов

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

Во-вторых, система – чистый WYSIWYG. Клиент слышит ровно то, что слышит дизайнер диалога; код одинаков для всех версий. Time to market любого изменения исчисляется буквально секундами. К примеру, если у провайдера лег маршрутизатор, то новый вопрос-ответ, объясняющий клиентам ситуацию, может быть добавлен прямо на лету.

В-третьих, вопросы можно задавать как «вглубь» диалога, так и в обратную сторону. Т.е. мы стараемся имитировать живое общение, где нет какого-то однозначного «текущего состояния» (скажите «да» или «нет») и можно задать любой вопрос в любое время.

В-четвертых, мы поддерживаем текущий контекст. Т.е. если в двух ветках находятся одинаковые вопросы, скажем, стоимость СМС, и я спросил что-то в духе «стоимость СМС в тарифе Дождь», то я могу задать уточняющий вопрос – «а в тарифе Радуга?», что по сути будет эквивалентно вопросу «стоимость СМС в тарифе Радуга».

Как это работает?

  1. Для каждого поддерживаемого языка мы строим векторную семантическую модель — unsupervised word representation. Весьма распространенный и хорошо зарекомендовавший себя подход. Устойчивые выражения тренируются наравне с отдельными словами. На текущий момент мы не разделяем слова на множественные прототипы по значению – как-то не дошли пока руки, да и в диалоговых системах количество используемых доменов обычно значительно меньше, чем в дикой природе.
  2. Граф с вопросами, указываемыми пользователем (мы называем их «каноническими вопросами»), конвертируется в набор векторов.
  3. Для каждого заданного вопроса мы ищем подходящую комбинацию векторов, используя относительно простую эвристику приоритетов. На этом этапе мы учитываем текущий контекст исходя из предыдущих вопросов, а также сравниваем вопрос с иерархией «вглубь» и назад.

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

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

Именно поэтому мы сейчас разрабатываем ASR, который будет работать в виде плагина к нашему семантическому процессору и декодировать звук напрямую в семантические вектора. Одним из преимуществ такой схемы будет возможность использовать адаптивные граммары. В самом деле, ведь диалоговая система всегда знает, какой словарь она понимает. Поэтому естественным средством борьбы с ростом дерева гипотез и, соответственно, с неточностями в распознавании, является приоритезация определенного словаря (граммары). Но такие граммары, очевидно, для более менее практичной диалоговой системы, все равно содержали бы тысячи слов. Плюс трудности с их ручным построением. А если еще и для морфологически богатого языка…

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

Обработка языка – будущее?

Стоит признать, что наш текущий подход к языку не является «пониманием языка», в том смысле, как его «понимают» люди. Хотя векторные семантические модели, как нам кажется, достаточно успешно моделируют некоторые части этого процесса.

На сегодняшний день мы начали экспериментировать с математическим подходом к общей теории языка за авторством Зеллига Харриса. Возможно и кого-то из вас вдохновит его теория operator grammar. Мне она кажется очень и очень интересной, особенно в контексте диалоговых систем.

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

С точки зрения разработки диалоговой системы единое семантическое пространство позволит указывать «канонические вопросы» только один раз. Т.е. к примеру, система хоть и отвечает на русском, но способна при этом понять вопрос от говорящего на белорусском языке.

Практика

А на практике, если вдруг вам резко захотелось поиграть с нашей бетой – киньте в меня письмом на tridemax@sapiensapi.com и я дам вам доступ к системе. Из инструментария вам понадобится только браузер Chrome. Заранее извините, если будет некоторая задержка с ответом – нам придется выстроить определенную очередь, чтобы не убить наш любимый сервер.

Автор: tridemax

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js