Русский
Русский
English
Статистика
Реклама

Зачем нам потребовалось написать свою реализацию MRCP-сервера. Часть 1

Привет, Хабр! Сегодня мы хотели бы поделиться кейсом создания собственного MRCP-сервера. Это протокол передачи данных, используемый серверами для предоставления различных услуг (таких как распознавание речи и синтез речи) для своих клиентов. MRCP опирается на другие протоколы, в частности, потоковый протокол реального времени (протокол RTSP) или протокол установления сеанса связи (протокол SIP) для установления и управления сеансом аудиопотоков между клиентом и сервером. О том, что нас привело к созданию собственной реализации этого сервера - под катом. Во второй части расскажем об особенностях своего проекта, с подробным разбором возможностей.

UniMRCP - хорошо, но может быть и лучше

Первая версия сервера была построена на UniMRCP. Почему? Да просто потому, что это стандарт, и практически его все и используют. Альтернативы практически нет.

UniMRCP - кроссплатформенное ПО с открытым исходным кодом, которое включает все необходимое для реализации функций MRCP-клиента и MRCP-сервера. Распространяется под лицензией Apache License 2.0. Все бы ничего, но при работе с UniMRCP у нас возникло несколько проблем.

Проблема 1. Дорого!

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

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

Проблема 2. Паузы

Для того, чтобы голосовой агент работал нормально и воспринимался собеседником без проблем, он должен моментально реагировать во время разговора. А в случае использования UniMRCP с этим возникали проблемы, которые мешали нормальному общению с собеседниками-людьми. Сложности появились даже в случае пауз в разговоре.

В документации говорится о назначении speech-complete-timeout - это время, после которого должен вернуться результат распознавания, если абонент молчит. В UniMRCP, как мы не пытались, мы не могли этим управлять. Наш собственный VAD к этому параметру восприимчив.

Пример запроса

MRCP/2.0 304 RECOGNIZE 1
Channel-Identifier: 230f4b33-fcdc-1239-d5a6-d00ddfa58be9@speechrecog
Content-Type: text/uri-list
Cancel-If-Queue: false
Recognition-Timeout: 30000
Start-Input-Timers: true
No-Input-Timeout: 5000
Speech-Complete-Timeout: 750
Content-Length: 25builtin:speech/transcribe

Параметром speech-complete-timeout управлять никак не удавалось - такое впечатление, что это просто не предусмотрено разработчиками. Единственный таймаут, который нормально работал в UniMRCP - это recognition-timeout.

Пример разговора (HR-сценарий)

Бот: Здравствуйте! Меня зовут Елена, звоню по поводу вашего резюме. Подскажите, предложение по вакансии актуально для вас?

Абонент: Да, здравствуйте

Бот: Смотрите, сейчас у нас открыта вакансия специалиста офиса продаж. В обязанности входит консультация абонентов, продажа оборудования и работа с кассой. Оформление идет полностью официальное, белая зарплата, средний уровень дохода N рублей, максимальный уровень практически не ограничен, есть возможность карьерного роста. График 5 рабочих дней с двумя плавающими выходными. Также предоставляем все социальные гарантии, дмс, бонусы и скидки от компании. Рассмотрите такие условия для себя?

Абонент: А еще раз, откуда вы звоните?

Бот: Это розничная сеть NNN

Абонент: А какой у вас график?

Бот: График работы формируется программой автоматически с учетом потока клиентов и нагрузки на офис с двумя плавающими выходными, то есть смены рабочие 6 8 10 12 часов в день могут быть и не более 40 часов в неделю. При этом график составляется заранее на 2 недели, то есть вы заранее знаете ваш график, ваши выходные, и можете уже планировать.

Абонент: Ну хорошо

Это лишь начало разговора. И если абонент делал большие паузы, то у бота возникали проблемы, возникали большие задержки в работе бота, а это не просто критично, а очень критично. Разговор мог прерваться, не начавшись.

Проблема 3. Сложности с реакцией на отказ

Речь идет о возможности управлять логикой отправки (START-OF-INPUT) - сообщение, которое сигнализирует о том, что начался ввод и надо бы прервать воспроизведение.

Так, система проигрывает определенный скрипт пользователю.

Бот: Здравствуйте! Меня зовут Валентин и я хочу вам предложить супер-пупер предложение

Абонент: не-не-не, ниче не надо

Мы должны остановиться и среагировать на это не-не-не.... И здесь как раз возникала проблема с возможностью управления логикой отправки.

Проблема 4. Необходимость кастомизации

UMS Transcribe Plugin - проприетарный плагин, в нем ничего нельзя менять и настраивать. Да, можно связаться с разработчиками, что-то там предложить, но такое взаимодействие требует немало сил и, главное, времени. А его никогда ни у кого нет.

Нам же нужно было реализовать не одну кастомную фичу, а сразу несколько, включая:

  • распознавание пола.

  • разделение кредов по проектам.

  • кэширование синтеза.

Хватит это терпеть!

Помучавшись с UniMRCP, мы решили, что не хотим больше проблем, поэтому решили найти выход из положения. И лучшим выходом стало написание собственного сервера/плагина.

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

Недостатки UniMRCP мы превратили в достоинства собственного продукта, который получил:

  • Собственный NLU-алгоритм, способный обучаться на небольшом объеме данных.

  • Короткие паузы в диалогах.

  • Умную систему реагирования на прерывания разговора со стороны собеседника.

  • Возможность создания любого количества каналов.

  • Возможность кастомизации - систему можно подстраивать под нужды любого проекта.

Решение стать самостоятельными стало более чем правильным. Кроме того, что мы сами его используем во всех проектах, так им еще и заинтересовались многие компании. Сейчас наша разработка, MRCP-сервер, успешно продается на рынке, ее используют крупные банки и телеком-операторы.

Источник: habr.com
К списку статей
Опубликовано: 30.04.2021 12:16:20
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании neuro.net

Управление проектами

Голосовые интерфейсы

Neuro.net

Ivr

Mrcp

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru