[Управление проектами, Голосовые интерфейсы] Зачем нам потребовалось написать свою реализацию MRCP-сервера. Часть 1

Автор Сообщение
news_bot ®

Стаж: 6 лет 7 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
30-Апр-2021 14:33


Привет, Хабр! Сегодня мы хотели бы поделиться кейсом создания собственного 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
===========

Похожие новости: Теги для поиска: #_upravlenie_proektami (Управление проектами), #_golosovye_interfejsy (Голосовые интерфейсы), #_neuro.net, #_ivr, #_mrcp, #_blog_kompanii_neuro.net (
Блог компании Neuro.net
)
, #_upravlenie_proektami (
Управление проектами
)
, #_golosovye_interfejsy (
Голосовые интерфейсы
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 21-Сен 22:44
Часовой пояс: UTC + 5