Как робот-оператор научился помогать людям во время пандемии

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Весной 2020 года, на заре пандемии, мы начали делать голосовой справочник по коронавирусной инфекции, самоизоляции и всему, что связано с covid19 на основе нашего робота-оператора. Мы привлекли к созданию вопросно-ответной базы несколько десятков волонтёров, получилось грандиозно.

Проект коронабот

Коронабот, так мы называем этот проект, был задуман как благотворительный — нам хотелось помочь замедлить пандемию через информирование населения. Тогда было слишком много фейков вроде «это не опаснее гриппа», «маски не помогают», «самоизоляция не нужна» (не говоря уже об откровенном ковидиотизме вроде ковидоотрицания или уверенности, что опасность исходит от вышек 5G). Информирование нужно и сейчас — больше чем год спустя, когда Россия пережила третью волну и вошла в четвёртую: низкий процент вакцинации, пренебрежение респираторным этикетом и другими правилами безопасности, так и не случилось введения карантина в первую волну (самоизоляция и меры контроля в Москве и нескольких других регионах не в счёт). К тому же, иммунитет к ковиду оказался нестоек — люди болеют по несколько раз, плюс вирус мутирует, и некоторые штаммы хотели плевать на антитела к предыдущим вариантам вируса. Похоже, голосовой справочник по коронавирусной инфекции ещё долго будет актуальным.

Идея проекта принадлежала экс-техдиру VS Robotics Сергею Маркову, специалисту по искусственному интеллекту и машинному обучению, создателю научно-популярного портала «XXII век».

Для создания глубокой вопросо-ответной базы была необходима полномасштабная редакция — с фактчекерами, редакторами, рисёчерами, экспертами (биологами, эпидемиологами и прочими смежными специалистами), тестировщиками, специалистом по адаптации текста к голосовому синтезу и так далее. Но у нас была только одна профессиональная редактриса, парочка фактчекеров и один биолог. Этого было, мягко говоря, мало для создания такого количества контента. Поэтому мы призвали на помощь волонтёров — около 30 редакторов из разных крутых изданий, среди которых была даже русская служба BBC. Ими, как и нами, двигал альтруизм — очень хотелось помочь врачам остановить пандемию и обойтись малой кровью. Каждая из волонтёрок (да, стоит отметить, что на призыв откликнулись только женщины) уделяла проекту по столько часов в день, сколько могла, но несколько человек вложились временем, умениями и нервами очень серьёзно, за что мы невероятно благодарны. Это было огромной поддержкой для команды, которая несколько месяцев вкалывала по 13-15 часов в сутки почти без выходных, это была настоящая гонка на выживание.

Редакторы коронабазы целыми днями читали, смотрели, слушали подкасты и лекции про ковид, и сами стали в некотором роде специалистами. Для многих это была работа full power 24 hour — всё условно свободное от работы время уходило на скроллинг ленты в поисках новых статей про коронавирус, новых обсуждений (из которых можно было почерпнуть вопросы, которые просто не пришли в голову редакторам — вроде «правда ли что корова-вирус передаётся через молоко?»), новых фейков и конспирологических теорий — всё это должно было оперативно появляться в базе, чтобы робот мог ответить буквально на любой вопрос, который даже чисто теоретически может прийти в голову звонящему на горячую линию.

Так мы организовали процесс

У нас была доска в Trello, где было несколько колонок: список тем, список новых вопросов, любой из редакторов мог брать себе понравившийся вопрос, перемещать в колонку «в процессе», отвечать на него и отправлять в колонку «вычитка», где проверялись орфография, пунктуация, фактология, соответствие нашим внутренним чек-листам и гайдлайнам. После вычитки у главного редактора карточка отправлялась на адаптацию к голосовому синтезу и уходила в гугл-таблицу — собственно, в нашу базу знаний. В таблице была ещё одна система контроля — фактчекеры писали свои замечания для главного редактора либо просто ставили отметку об апруве, дальше ответ уходил на одобрение к менеджеру проекта. В конечном итоге мы готовы были ручаться за качество ответов своими головами, потому что каждый ответ был выверен целой командой специалистов.

Пример одного из гайдов для тех, кто отвечал на вопросы

Если слово или речевой оборот можно выкинуть без потери смысла — безжалостно выкидывайте. Всё, что не служит смыслу высказывания, идёт в топку.

Например: «Коронавирусная инфекция является» — если вам не явилось привидение, бог в виде горящего куста или прабабушка во сне — не используйте это слово. Его можно легко заменить на «это».

«Проект предназначен для выявления бессимптомных носителей» — «предназначен» выкидываем и ничего не меняется.

Существительное + «осуществляется» — не лучше одного глагола от этого существительного. Также, как и «позволяет выявить» меняем на «выявляет».

«Тестирование будет осуществляться с помощью иммуноферментного анализа. Он позволяет выявить наличие либо отсутствие в крови антител и иммунитета к коронавирусу. Отбор жителей будет осуществляться случайным образом» — вместо этого «Тестируют с помощью иммуноферментного анализа. Он выявляет наличие или отсутствие в крови антител к коронавирусу».

Следите за подчинёнными отношениями в предложении. Например: «Приглашают на сдачу анализа по sms и электронной почте» — выглядит так, будто анализ можно сдать по смс.

Старайтесь выбирать более короткие синонимы. Было: «Перчатки нужны каждому человеку, который ещё не переболел», стало: «перчатки нужны всем, кто ещё не переболел».

Смотрите на ответы через призму экономии знаков, как если бы вы писали платную смс или твит.

Пример текста, который можно сократить: «Перчатки защищают от нечаянного прикосновения к зараженной поверхности. Например, перилам в подъезде, на которые пятнадцать минут назад кто-то чихнул. Набирая код в магазине, вы прикасаетесь к поверхности, которую перед вами трогали сотни людей. Если на вас в этот момент перчатки, вероятность того, что вирус попадет к вам на кожу, становится меньше. Но, конечно, нельзя прикасаться руками в перчатках к лицу!» — слова «например», «в этот момент», «становится», «конечно» — ничему не служат, выкидываем. Можно просто перечислить поверхности, которые не стоит трогать незащищёнными руками, наверняка люди подозревают о том, сколько людей могло потрогать всё это до них и без капитана очевидность. Избыточных объяснений тоже лучше избегать.

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

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

«Если вы чувствуете у себя симптомы, похожие на коронавирус» — здесь три проблемы: 1. симптомы — это объективный показатель состояния, его можно наблюдать, но это не чувство; 2. у себя — избыточно (у кого же ещё их можно почувствовать) 3. симптом не может быть похож на коронавирус (кашель не может быть похож на вирус, температура не может быть похожа на вирус и так далее). Как правильно: «если у вас появились/вы наблюдаете симптомы, характерные для коронавируса».

«Тяжёлые симптомы» — такой профессиональный жаргонизм у медиков есть, но лучше его не использовать из уважения к русскому языку. Выраженные симптомы.

«ИВЛ служит для облегчения дыхания» — «ИВЛ облегчает дыхание» — случай, когда слово «служит» ничему не служит.

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

Распространённые ошибки: «коронавирусная инфекция может оставаться на поверхности карт и мобильных телефонов» — инфекция — это заражение живого организма, на поверхности неодушевлённого предмета она не может быть никак. Может быть только вирус.

«Количество зараженных коронавирусной инфекцией», «заражение коронавирусной инфекцией» — тавтология, потому что инфекция — это и есть заражение.

«Заболел коронавирусной инфекцией» — всё равно, что «заболел заражением».

«Сниженный иммунитет», «низкий иммунитет», «повысить иммунитет», «поднять иммунитет» — всё это некорректно, низким может быть уровень иммунитета, но не он сам. Корректно говорить «ослабленный иммунитет», «слабый иммунитет», «укрепить иммунитет».

Карантин и самоизоляция — не тождественные понятия.

Помните, что толстизм — наш враг. Мы не стараемся дать развёрнутую консультацию звонящему человеку, не стараемся прочесть ему лекцию во всех подробностях. Наш сервис — это сервис быстрых сжатых ответов, которые можно понять в те несколько секунд, пока человек ещё в состоянии удерживать внимание. Когда ответ становится слишком подробным, большинство звонящих раздраженно кидают трубку, возможно, так и не услышав чего-то по-настоящему важного. Мы не проповедуем, мы очень быстро и чётко инструктируем.

В Северной Осетии наш продукт известен как «Робот Залина» — он заработал на местной горячей линии по короне в декабре 2020 года. Залина — это кастомизированное решение на базе флагманского робота-оператора, который входит в линейку продуктов экосистемы Сбера. «В этот непростой год главной задачей для нас было мобилизовать все ресурсы на разработку востребованных и актуальных решений. Я искренне рад, что команда VS Robotics сумела быстро отреагировать на запрос и внедрить для Республики Северная Осетия — Алания решение, способствующее повышению информированности населения по вопросам пандемии», — говорит глава VS Robotics Дмитрий Теплицкий. Робота-оператора подсадили на горячую линию 122 в Северной Осетии всего за одну неделю (включая адаптацию вопросно-ответной базы под локальные реалии).

Что под капотом?

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

После тестов мы решили, что лучше база работает на BLEU (bilingual evolution understudy) — это алгоритм расчёта баллов для отдельных сегментов речи (предложений): алгоритм сравнивает их с набором качественных справочных экземпляров. Здесь всегда число от 0 до 1. Это значение указывает, насколько текст-кандидат похож на справочные экземпляры — чем более он похож, тем значение ближе к 1. BLEU дал нам на 10% больше эффективности, чем расстояние Дамерау-Левенштейна.

Потом мы вышли на нейронку, прикрутили BERT (bidirectional decoders representations from transformers), и эффективность определения расстояния повысилась ещё на 20%. Это языковая модель на трансформерной основе, которая предобучает языковые представления для широкого спектра задач обработки естественного языка. Это нейронная сеть на основе композиции кодировщиков трансформера. BERT — это автокодировщик. Здесь в каждом слое применяется «двустороннее внимание», то есть модель учитывает значения с обеих сторон токена, а значит, она определяет значение точнее. Когда текст подаётся на вход сети, модель его токенизирует. Токены здесь — это слова или их составные части — если слова нет в словаре, модель его разбивает на части и использует части, которые в словаре есть. В нейронке токены кодируются своими векторными представлениями (embeddings): соединяются предобученные представления самого токена, номера его предложения и позиции токена внутри предложения.

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

Есть классы — в нашем случае это количество вопросов, есть экземпляры классов. Например, у нас есть множество вопросов вроде «Что такое коронавирус?» — и разные вариации: «Коронавирус — что это такое?», «Расскажите про коронавирус» — это экземпляры этого класса. При помощи этих методов мы определяли, к какому классу относится тот или иной экземпляр. Абонент задаёт вопрос, класс определяется автоматически, и в зависимости от класса мы даём ответ. В общем, BERT, как и ожидалось от популярной сейчас модели, показал наивысшую эффективность в работе тестового стенда. Мы пока что не успели запустить его в работу, но планируем в самое ближайшее время.

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

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

Возьмем 2 примера:

  1. Маш, дай карандаш.

  2. Во-первых, вымойте руки с мылом...

Очевидно, что в первом случае паузы практически нет, во втором случае — она есть, более того, она длинная. Для модели синтеза будет легче, если мы, игнорируя правила великого и могучего, напишем первое предложение БЕЗ знаков препинания.

После проделывания всего вышеперечисленного, получается текстовое сообщение, готовое к озвучке.

Кроме того, нужно было много разновозрастных добровольцев, звонящих на тестовый стенд, чтобы натренировать робота понимать разные голоса, новую лексику, акценты, особенности речи (прежде всего, пожилых людей). Каждый раз после теста специальные люди сидели на прослушке/читали логи, чтобы выявить, чего бот ещё не понимает, на какие вопросы он не знает ответов — это была отдельная гигантская работа.

Мы даже научили робота шутить (потому что делать такую работу с постоянно серьёзным лицом было откровенно опасно для нашего психического здоровья, да и стресс у людей тоже нужно было снимать — это было время всеобщей тревожности, граничащей с паникой). Например, если спросить, зачем Билл Гейтс хочет чипировать всё население Земли, робот ответит «он хочет заставить людей выстроиться в огромную надпись «Мелинда, я люблю тебя», которую видно из космоса. Правда, с тех пор шутка устарела — брак Гейтсов вступил в «клуб 27». Что такое «ковидный жених» (парень с антителами) робот тоже знает.

Несколько примеров шуток

— На карантине Маск запустил ракету, а я себя. Есть ли путь назад?
— Попытайтесь выйти из зоны конфорок.

— Как переустановить нервную систему после самоизоляции с детьми?
— После чипизации система будет переустанавливаться автоматически.

— Я переболел, как-то нужно в тиндере теперь помечать, что я с антителами?
— Напишите, что вы — ковидный жених.

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

Итог

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

Источник: https://habr.com/ru/company/vsrobotics/blog/583262/


Интересные статьи

Интересные статьи

Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для...
Рады приветствовать Вас на корпоративной странице компании «Юнидата». В последнее время имя нашей компании все чаще стало звучать на «Хабре», что сподвигло нас создать свой корпоратив...
Мы все сейчас в состоянии кризиса — и отрасли, попавшие в списки пострадавших, и ИТ. Просто сила удара и последствия пока разные и ещё неизвестно, чем всё это закончится. Малому и сре...
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны
Это циничная, клиническая коллекция того, чему я научился за 30 лет работы в разработке программного обеспечения. Повторюсь, некоторые вещи весьма циничны, а остальное — результат долгих наблюд...