Наш опыт работы с DeepPavlov: голосовой помощник за 20 дней и приём 5000 звонков на горячей линии

Предлагаем вашему вниманию текст, подготовленный министерством цифрового развития государственного управления, информационных технологий и связи Республики Татарстан для habr.com. Он рассказывает об успешном опыте создания и применения ИИ-системы – робота, взаимодействующего с пользователями “горячей линии” голосом на естественном языке.

Когда объявили режим самоизоляции, на горячую линию по коронавирусу в Татарстане поступало множество вопросов от жителей. Чтобы разгрузить операторов колл-центра, мы в Центре Цифровой Трансформации республики вместе с уполномоченным по ИИ в Татарстане разработали голосового помощника, который отвечал на несложные вопросы.

Наш опыт работы с DeepPavlov: голосовой помощник за 20 дней и приём 5000 звонков на горячей линии

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

Какая задача стояла

Мы изначально задумывали сделать голосовой помощник, который бы помогал людям получать госуслуги и отвечать на часто задаваемые вопросы. Но когда началась вся канитель с коронавирусом, мы поняли, что Лилия поможет разгрузить коллцентр: например, консультировать на горячей линии, помогать получать цифровые пропуска и пособия по безработице. Все то, что человек может узнать на сайте госуслуг, можно узнать и у Лилии, а еще с ней можно просто поболтать.

Немного предыстории. 1 апреля в Татарстане ввели систему СМС-пропусков: чтобы выйти на улицу, нужно было отправить СМС на короткий номер с паспортными данными и указанием номера цели. Сначала целей было пять: доставка несовершеннолетних в образовательные организации, участие в похоронах, выезд на дачу, доставка лекарств и продуктов и изменение места проживания. Цели постепенно добавлялись и на последнем этапе их стало уже 12.

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

Кроме оформления цифровых пропусков, Лилия должна была отвечать на вопросы татарстанцев. Мы задумывали голосового помощника, который бы отвечал на распространенные вопросы, вроде «Что нужно сделать чтобы получить пропуск» и «Помогает ли имбирь от коронавируса».

Для решения этой задачи мы могли бы сделать и обычный IVR. Но IVR — долго, и если делать нормально, то нужно закладывать сложную архитектуру. В общем, времени на это не было. Мы подумали, что сделать голосового помощника (который умеет переводить речь в текст, обрабатывать его, классифицировать интенты и выдавать голосовой ответ) проще. Хе-хе.

Как это выглядит со стороны пользователя

Тут все просто.

  1. Человек звонит на горячую линию, ему предлагают выбрать между разговором с оператором и Лилией. На любом этапе можно переключиться на живого оператора.
  2. Лилия предлагает озвучить свой вопрос и человек его задает.
  3. Лилия отвечает и спрашивает, смогла ли она ответить на вопрос. Если ответ нерелевантный или Лилия не знает ответа на этот вопрос, то она просит его повторить или сформулировать по-другому.

Наш опыт работы с DeepPavlov: голосовой помощник за 20 дней и приём 5000 звонков на горячей линии

Как обрабатываются звонки

Для приема звонков и реализации сценариев использовали платформу Voximplant: написали скрипт и подключали сигнал автоответчика. Лилия приветствовала человека и спрашивала, чего он хочет.

Звонящий задает вопрос по телефону. Затем Лилия начинала слушать. У VoxImplant мы использовали модуль ASR для перевода речи в текст, он под капотом вызывает модель Yandex.SpeechKit. Таким образом, аудиопоток переводится в текст, который потом проходит токенизацию и стемминг. Мы попробовали также извлекать признаки: NER, POS и Chunk для базовых методов ML, но все это занимало очень много времени.

Наш опыт работы с DeepPavlov: голосовой помощник за 20 дней и приём 5000 звонков на горячей линии

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

Дальше возможно несколько вариантов в зависимости от уровня уверенности (confidence):

  1. Если сеть классифицировала вопрос с достаточным confidence (исходя из исследования пороги подбирались индивидуально, поклассово), то Лилия даст ответ на вопрос.
  2. Если у сети малый confidence ответа, мы предполагаем, что это вопрос который мы не охватили в рамках нашего датасета (но вопрос при этом всё ещё относится к домену коронавируса) или человеку просто захотелось поговорить на другую тему. Например, спросил «Кто такой Илон Маск».

Для таких вопросов мы использовали обученную на дампе Википедии модель BERT для задачи knowledge base question answering.

В конце Лилия обязательно верифицирует корректность распознавания интента и качество ответа, спросив: «Ответила ли я на ваш вопрос?». Если пользователь ответит да, то Лилия будет ждать следующего вопроса. Если нет, то мы попросим переформулировать вопрос и пройдем весь цикл заново. Бывает так, что это не получается. Тогда в бой вступают живые операторы.

Сейчас Лилия говорит приятным голоском синтезатора речи от Яндекса — мы немного поменяли тональность и увеличили скорость. Иногда Лилия путает ударения, но это можно исправить с помощью разметки. Конечно, хотелось бы добавить татарский, но пока это сложно.

Суммарно проект занял две с половиной недели с учетом датасетов: возникла идея, обсудили проект с министром и, как говорят у нас, алга. Неделя ушла на прикидку и исследование, еще дней 10 заняла разработка, затем мы дорабатывали и прикручивали дополнительные функции. Основными лошадками были Nvidia RTX2070. Для BERT’ов требовалось около 12-16 ГБ видеопамяти.

От LSVM и catboost до DeepPavlov

В процессе разработки мы использовали разные модели классификаторов. Сначала мы попробовали такие модели машинного обучения, как random forest, LSVM, catboost, logreg. Вообще точность моделей машинного обучения была не очень высокой. Почему так? Потому что многие вопросы пользователей очень похожи друг на друга: вопрос «у меня ребенок заболел коронавирусом что делать» достаточно похож на вопрос «можно ли гулять с ребенком во время коронавируса», хотя это разные категории и требуются разные ответы.

Мы могли бы заняться извлечением сущностей, увеличением выборки, исследования. Но мы торопились. Поэтому мы решили использовать в работе библиотеку DeepPavlov от МФТИ, давшую точность 78% с логистической регрессией и BERT — 84%.

Наш опыт работы с DeepPavlov: голосовой помощник за 20 дней и приём 5000 звонков на горячей линии

Точность ответов зависит от разметки датасетов. У нас был список из 200 вопросов, которые люди задают на горячей линии, но они были неправильно разделены. Например, люди спрашивали, что делать, если у них заболел кто-то из родственников, и был вопрос, какие симптомы у коронавируса. Модели ML путались.

Результаты и планы на будущее

Лилия проработала 2 недели и обработала 5000 звонков. За это время Лилия существенно облегчила работу операторам горячей линии — им не приходилось отвечать на банальные и повторяющиеся вопросы. Благодаря Лилии пользователи получали пропуска, ответы на вопросы и просто разговаривали. Конечно, были пользователи, которые ругались на нее и просили перевести на оператора.

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

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

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

Пока что Лилия может подсказать, до скольки работает ЗАГС, а в будущем мы планируем, что она сможет принимать показания счетчиков (но это только тогда, когда мы решим вопрос с безопасностью передачи этих данных). В общем, мы превращаем Лилию в отдельный продукт.

Если вам было бы интересно поучить Лилию, велком в нашу команду.

Следите за нашим Телеграм-каналом, чтобы не пропускать самое важное!

Поделиться: