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

    По стопам публикаций «Распознавание русской речи для колл-центров и параноиков» и «Елена, «электронная девушка» из службы поддержки», а так же комментариев к ним, я решил рассказать, как мы решаем проблему интерпретации голосового ввода в нашей диалоговой системе.

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



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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

    Практика


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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 8

      +2
      Круто.
      А ведь чат/email версия аналогичной системы тоже могла бы быть интересной и востребованной.

      Визивиг — это хорошо, но наполнение пунктов меню ответами и даже вопросами в некоторых случаях было бы хорошо заполнять через API какими то внешними средствами (например из текущей базы со списком товаров, прайсом и т.п.)
        0
        Спасибо!
        На самом деле, так как обработка все равно происходит на уровне текста, реализация общения на уровне чата не должна составить особого труда. =)
          0
          Тоесть те же самые вещи, для текста, в вашей системе аналогичным образом можно будет делать?

          И правильно ли я понял, что вы никакого отношения ни к Мегафону, ни к Кроку не имеете, кроме того что темой похожей занимаетесь?
            0
            Да, именно. Мы сравниваем, условно, текстовые строки.

            К Мегафону и Кроку отношения не имеем. =)
            Их публикации просто вдохновили нас рассказать о нашем подходе.
          0
          Насчет загрузки из баз данных — сейчас мы работаем над скриптованием системы (приходиться учитывать разные вкусы потенциальных заказчиков), поэтому загрузка из баз данных в скриптах не составит проблем.
          0
          Посмотрел видео, очень понравилось!
          Интонации, правда, у бота роботизированные. Если бы не это — то от живой поддержки — не отличить!
            0
            А использование Microsoft Speech Platform — это просто частная реализация на текущей платформе, или вы реально жёстко завязаны на Windows и сервис можно будет развернуть только на серверах с этой OS?
              0
              Ну пока нам удобно на ней, но пишем мы на портируемом С++.

            Only users with full accounts can post comments. Log in, please.