Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: virtchat

virtchat 1 год 10 мес. назад #1

В 2016 году на пике популярности чат-ботов наш сайт делала кнопочных помощников для виртуальный анонимный чат бизнеса. Еще не пришла мысль поинтереснее: «скажем автоматизировать клиентскую поддержку нейронными сетями?». Нам хотелось, чтобы роботы в чатах наконец научились понимать естественный язык и стали удобными.
Потребовалось четыре математика, шесть месяцев запойной работы, один новый для себя язык программирования и множество погрешностей и нам удалось создать конструктор, в котором каждый может собрать виртуального ассистента с ии.
В статье мы расскажем
- Чем виртуальный ассистент различается от обычного чат-бота- верно ли, что виртуальные ассистенты понимают язык- как люди научили робота понимать контекст и написали язык lialang- проверка кейсами: как мы автоматизировали поддержку в трёх банках- создание lia platform и движка для интерфейсов- три этапа: как работает платформа для сборки виртуальных ассистентов (где собрать робота способен всякий, и вовсе не-программист)
Чат-бот vs виртуальный ассистент
Продвинутые чат-боты умели выделять ключевые слова и имитировать человеческий диалог ещё в 60-х. Хиппи закидывались лсд, the beatles собирали стадионы, а джозеф вейценбаум создал eliza - собеседника-психотерапевта, который обеспечит фору многим современным ботам, а иногда психологам. Известно, что в предложении «мой отец меня ненавидит» элиза реагировала на ключевое слово «отец и спрашивала: «кто ещё из семьи вас ненавидит?». Но суть вопросов робо-психотерапевт не уяснял. Помимо прочего функционируют современные чат-боты: ключи-термины, линейные сюжеты и пародия на живой диалог.
Но с 60-х что-то поменялось: нынче, в связи с технологиям машинного учебы и nlp мы способны научить чат-ботов понимать естественный язык и контекст. Предложения как и раньше имитация, но более осмысленная.
Чтобы увидеть разницу, сравним чат-бота и ассистента - представим, что многим надо сделать виртуального сомелье, который помогает покупателям с подбором нужной вина.
Этап 1
Первый этап у чат-бота и виртуального ассистента один: мы прикидываем всецело удовлетворять все требования читателей и придумываем фразы, что они могут написать. И после прописываем, как робот будет действовать в ответ.
Базовый запрос понятен - подобрать вино. Однако у данного запроса может быть множество параметров: повод, цена, страна, цвет, сорт винограда. Возможно, пользователь сразу напишет название вина, которое требуется найти. Или уточнит нюансы: «а где оно сделано?». Или, из любопытства начнёт закидывать бота вопросами: «какая бутылка самая дорогая на свете?» И не только. При том кроме запросов по бизнесу есть «привет», «пока», «как делишки» и прочие small talk фразы, которые следует задать.
Фантазировать можно бесконечно, при этом по прежнему мы не сможем предугадать все вопросы читателей. Когда людям на первый взгляд описанных ситуаций будет много для устройства 98% запросов, мы останавливаемся (хотя потом суровая реальность обломает и мы узнаем, что покрыто будет как минимум 80%).
Затем раскидываем наши предположения о нуждах пользователей по определенным запросам - намерениям. Намерения обозначают что захочет пользователь, но отбрасывают данные о том, как он об этом факте написал. Этот стадия у чат-ботов и ассистентов одинаковый.
Список намерений
Намерение 1 - хочу любое вино фразы:
- Помоги выбрать вино - какое вино посоветуешь? - Хочу наилучшее вино - … что с этим делать: случайно выбрать в списке самыхнаиболеевостребованных популярных вин и сообщить пользователю.
Намерение 2 - вино подешевле
Фразы:
- Есть ли хорошие вина до тысяча рублей? - А не имеется ничего дешевле? - Очень дорого для меня - … как поступить: додать к запросу фильтр на стоимость и выбрать в списке самыхнаиболеезнаменитых популярных вин.
Намерение 3 - хочу вино под мясо фразы:
- Посоветуй вино к стейку - на моем ужин будет гуляш. Что выпить? - … Что с этим осуществлять заказ в архив по критерию «к мясу», выбрать просто самых популярных вин и сообщить пользователю.
… (И без того ещё сотни разных намерений)
Намерение 290 - наша компания не решили пользователя фразы: любые другие
Что делать: выдать фразу-заглушку: «не знаю, что вы имели ввиду, но пинотаж barista восхитителен во всякое время года».
Этап 2
На самом раннем этапе мы приступаем к созданию алгоритма, по которому будет работать робот. Здесь сходство чат-бота и виртуального ассистента заканчивается.
При кодинге чат-бота программист вручную определяет ключевые слова для всякого пожелания и, когда пользователь напишет - бот будет искать во фразе эти ключи-термины.
При разработке ассистента программист обучает алгоритм сравнивать реплики клиента по лексическому смыслу. Это дает возможность подыскать наиболее близкое намерение.
Выбор вина с чат-ботом выбор вина с виртуальным ai-ассистентом что случилось user: привет! Хочу выбрать вино на ужин до 2000р bot: здравствуйте! Bot: в каком прайсовом диапазоне ищем? User: до 2000р bot: могу порекомендовать ramirez de la piscina. В меру терпкий красавец из испании годится, и к ужину, и на приглянувшийся сериал. 1240₽ за бутылку user: привет! Хочу выбрать вино завалялись до 2000р assistant: здравствуйте! Могу порекомендовать ramirez de la piscina. Сдержанно терпкий красавец из испании давно нравится и к ужину, и на любимый многосерийную картину. 1240₽ за бутылку бот - пошел по ключевым словам выбрать вино. Не уразумел ценовой диапазон и переспросил. Ассистент - пошел по максимально близкому желанию и извлек ценовой диапазон. User: не обожаю терпкое bot: ваш кандидат - «casillero del diablo» cabernet sauvignon reserva bot: чилийский терпкий совиньон конкретно вас согреет. Всего 872₽ user: не люблю терпкое assistant: ваш кандидат - antigal, «uno» malbec. Assistant: мягкий аргентинец прямиком из 2015. Цена за бутылку - 1101₽ чат-бот ориентировался на ключевое слово «терпкое» и ошибся. А ассистент понял, что ближайшее к «не обожаю терпкое» намерение - мягкие вина. User: впрочем это такое недорогое. Пожалуй, возьму его. Bot: тогда попробуйте «fyi» red blend bot: несмотря на отличную репутацию, его цена всего 557₽ bot: самый большой выбор user: впрочем оно такое недорогое. Пожалуй, возьму его. Assistant: хороший выбор роботы обрабатывают заявки по одному. Господин чат-бот поглядел на слово «недорогое», ответил по шаблону - так или иначе не угадал и запутался. Ассистент просто проигнорировал первое объявление, потому, что понял второе.
Как это работает: таблица-сравнение чат-ботов и виртуальных ассистентов чат-бот виртуальный ассистент на то, чтоб изучить пользователя, мы берём ключи-термины. При создании чат-бота технологии машинного занятий и nlu не применяются. Дабы уразуметь пользователя, мы проводим «умное» сравнение и отдаем предпочтение ближайшее намерение (со временем поясним, как все функционирует). Машинное образование, и алгоритмы nlu позволяют нам измерить расстояние между репликами. Например, фраза «космический корабль» ближе к «самолету», чем «самокату». А от «продажи почки» - совсем далеко. Подготовка: для каждого намерения выписываем ключевые слова (вино_под_мясо: стейк, мясо, гуляш, вино мясо)
Алгоритм: - берём слова из реплики пользователя («посоветуй вино к стейку» → советовать, вино, стейк).- Выбираем намерение, где в наибольшей степени ключевых слов из реплики пользователя (вино_под_мясо).- Если бот не нашёл пересечений по основным словам - выбираем намерение «наша компания не решили пользователя».- Выполняем действие, коие соответствует намерению.
Подготовка: обучаем девушку для «умного» сравнения
Алгоритм: - сравниваем фразу пользователя с фразами из намерений при помощи «умного» сравнения.- Выбираем намерение с максимально близкими фразами- если выбранное намерение недостаточно около реплике игрока не пролетело установленный порог) - выбираем намерение «мы не поняли пользователя».- Выполняем действие, коие отвечает намерению.
Как улучшить: чтобы сократить ошибки, нужно добавить подразделения и кнопки. Тогда пользователи вообще перестанут общаться на языке, а окажутся просто нажимать на клавиши. Такие обновления ведут к деградации разговорного интеллекта. Как подтянуть: после того как пользователи пообщаются с роботом, у нас станут возникать новые примеры фраз и мы распределим их по намерениям. Однажды процент покрытия будет увеличиваться, ассистент начнёт лучше справляться с общением. Подобные улучшения ведут к совершенствованию разговорного интеллекта.
Правда ли, что виртуальные ассистенты понимают язык?
Алгоритмы умеют отличать одни фразы от других - но возможно ли заметить, что роботы действительно понимают язык?
Чтобы ответить на этот вопрос, вернемся к сравнению лексического смысла фраз. Смысл для рабочего стола - это понятные типы таких: строки, числа что комбинации. В связи с этим, перед программистом встаёт задача превратить исходный текст в вид, подходящий для математических операций сравнения - вектор.
Vectorize("хочу вино") = (0.004, 17.43, -0.021, ... 18.68) vectorize("хочу белое вино") = (0.004, 19.73, -0.001, ... 25.28) vectorize("не хочу вино") = (-8.203, 15.22, -9.253, ... 10.11) vectorize("марс атакует") = (89.23, -68.99, -10.62, ... -0.982)
Для наших задач вектора лексически близких фраз обязаны быть математически близки друг к другу, лексически отдаленные - подальше, вектора фраз из другой оперы - совсем далеко.Например, «хочу вино» скорей «хочу белое вино», чем к «не хочу вино». А от «марс атакует» далеко.
Правильно обученная нейросеть сможет заключить в подобных векторах лексический смысл. Получается, чтобы сравнить смысл двух фраз, потребуется сравнить их вектора.
Поэтому убирает вопрос «понимают ли роботы язык?» Будет таким: вредители не понимают как гражданин, просто умеют сравнивать лексические смыслы и не путать теплое с мягким. Но когда алгоритмы смогут предложить наводящие уточнения и аккумулировать мнения экспертов, мы честно скажем: да, понимание настало. А пока «понимать язык» - это лишь красивое маркетинговое словосочетание.
По сути робот сотрудничает лишь с аналогиями, как трехлетнее дитя. Но ежели дать ребенку множество примеров, он может притворяться интеллектуалом и постепенно уводить дискуссию. «Реальный оператор первой линии сопровождения функционирует таким же образом - ему обрисовывают набор ситуаций и говорят, и свои силы в них вести. Поэтому виртуальные ассистенты отлично то что надо для автоматизации саппорта.
Как мы научили робота понимать контекст: lialang
Для нормального саппорта роботам мало «понимать» естественный язык - нужно, чтобы вы смогли давать ответы на проблему и оставаться в плане. С этой целью мы написали lialang - язык разметки диалогов, где доступно описывать сюжеты и передавать их роботу.
Основная задача lialang-программиста - описать все ситуации, что в состоянии случится в беседе человека с транспортным средством. Для этого в нашем языке можно связывать названия намерений и деятельность.
Рассмотрим простой пример - приветствие:
If intent(привет) reaction(сказать_привет)
Выглядит как простой код, но за конструкцией intent(…) работает нейросетка - lialang описывает диалог общими паттернами (“если тебя попросили то-этап, с использованием обычных программистских конструкций. Конечно: для того, чтобы данное сработало, пристало применить машинное обучение и технологии nlu, ведь пользователь может оставить персональный запрос как угодно.
А вот как можно охарактеризовать контекстные ситуации.Мы ввели конструкцию «was», чтобы ловить неуместные приветствия в каком угодно точке диалога:
If intent(привет) if was_reaction(сказать_привет) reaction(сказать_что_уже_здоровались) else reaction(сказать_привет)
Здесь написано: lia, если тебе сказали «привет» - скажи в отповедь привет. В случае, когда потом вновь сказали «привет» - скажи, что уже здоровались.
Реакция - это дело, которое lia должна сделать в ответ на намерение. В 95% случаев это комфортно текст. Но также робот может вызывать функцию в коде, переключить общение на оператора или выполнить другие сложные действия.
Сам код отправки контекста и функций существует отдельно от языка - язык максимально безопасно описывает ситуации.
Теперь попробуем написать штуку посложнее - в чате с банком клиенты зачастую запрашивают свои реквизиты. Давайте научимся отправлять их в чат даже по сети, с помощью lialang.
If intent(отправь_реквизиты) or intent(отправь_реквизиты_в_чат) reaction(отправить_реквизиты_в_чат) if intent(отправь_на_почту) reaction(отправить_реквизиты_на_почту) if intent(отправь_реквизиты_на_почту) reaction(отправить_реквизиты_на_почту)
Здесь описаны две ситуации:
1. Lia, если тебя попросили отправить реквизиты - отправь ролики на сайт. Если после попросили «надо: на почту», то отправь их на почту.2. Lia, если сразу попросили отправить реквизиты по сети - отправь реквизиты на почту.
Так lialang выполняет свою работу - осуществляет свою работу в контексте. Даже ежели человек напишет «на почту, пожалуйста», робот поймёт, что речь про реквизиты.
Lia научилась поддерживать сложные сценарии - в необходимый для посетителя момент достанет/положит данные из/в crm, отправит sms, окажет помощь в оплатой или поговорит о современной.
Постепенно мы улучшали язык: добавили переменные, функции, сущности (даты, адреса, телефоны, имена, итп.), Состояния и другие полезные конструкции. Так писать на нём стало ещё удобнее.
Проверка кейсами: как представители человечества автоматизировали помощь в трёх банках
Как лишь мы сделали технологию, ее пришлось в экстренном порядке дорабатывать - здесь появился первый заказчик. «Втб» нужно было автоматизировать поддержку в новом интернет-банке для предпринимателей.
Мы запустились весьма с успехом - особенно для изделия, каковой был сформирован за 4 месяца. Наш гибридный робот для «втб» базировался на нейросетях и не медля был эффективным: отвечал более, чем на 800 вопросов, поддерживал несколько сложных сценариев (выписки, смена тарифа, настройка пользователей и говорил как кто-то. В результате за пару месяцев наша lia на 74% снизила вес на саппорт. Стало понятно: идея с автоматизацией поддержки работает.
Дальше мы созданная из lia автоматизировали faq в «рокетбанке» и «делобанке» - так за 14 дней закрыли 32% заявок без операторов.
Казалось бы находились в гору пацаны. Но после первых заказчиков стало логично, что концепцию надобно менять. Это был ад - хозяйкам приходилось вручную дорабатывать сценарии, вносить правки, развивать ветки. Та же ситуация, что с простыми ботами, только сложнее, и заслуживает больше сил. При подобном положении дел масштабироваться было трудно.
Тогда мы решили сделать инструмент, в котором клиент сам сможет собрать даже сложного ассистента. А мы будем только помогать туториалами и обучать пользователей.
Lia platform и движок для интерфейсов
Итак, мы решили сделать площадку для тех, кто не в курсе в разработке. Хотя lialang содержит меньше десяти различных конструкций, учить его для гарантирования персонального бота будет не каждый менеджер. Менеджеры любят мышкой.
Поэтому мы начали размышлять над таким интерфейсом, который будет уметь единственное, что умеет lialang. У него никаких неудобств с вложенными ветками, переходами из исходного сценария в другой, а также - создавать сценарии смогут не только наши компьютерщики, а все, кто захочет.
Смотрите, как это выглядит:
Диалоги штука нелинейная и оставить универсальный движок для разных схем разговора очень сложно. Но прежде чем люди задумались про схемы, здесь уже был lialang - он и превратился в движком.
Какой бы интерфейс ни придумали дизайнеры, наша компания не кодим под него мозги, а пишем всего лишь малый транслятор разметки из интерфейса в код на lialang. Если интерфейс переделают, нам нужно будет поменять только транслятор - благодаря этому команда интерфейса и core-команда имеют возможность существовать отдельно.
Как работает платформа для сотворения виртуальных ассистентов
Чтобы собрать собственного виртуального ассистента в lia, пользователю приходится пройти через три шага.
Шаг 1. Загружаем историю переписок с посетителями, чтобы робот понял и выделил основные сценарии
Если у покупателя есть история бесед с пользователями, он может загрузить пакета туда и получите кластеры из максимальнонаиболеевостребованных распространенных запросов. Из барышень станет очень удобно создать намерения.
Со временем эффективность lia будет расти. Уведомления где робот не смог ответить, вновь имеют отличия по кластерам: например, «кто ты?», «Ты кто?», «Как тебя зовут?» И вы робот?» Попадут в одну группу. Так платформа полуавтоматически самообучается: пользователь видит, где пробел и закрывает его, добавляя новые сценарии - в результате процент покрытых запросов вырастает с тридцати до семидесяти% за полгода.
Если истории переписок нет, пропускаем такой этап и сразу начинаем со второго шага: предугадываем, с какими запросами пользователи обратятся к ассистенту.
Шаг 2. Прописываем намерения: 10-15 вариантов популярнейших запросов пользователя
На втором этапе прописываем намерения на основе 10-15 самых популярных запросов: такого количества вариантов очень и очень благодаря нейронным сетям. Так фраза вроде «моя задача заказать вино» обучает бота распознавать аналогичные которая будет полностью: например, получить вино» или заказать вино».
Ещё ассистент понимает и извлекает сущности: наименования городков, телефоны, адреса, временные отметки, периоды, даты и ругательства - в случае если писать в строчку «устал, привезите завтра ящик вина».
Кроме того, пользователи могут добавить собственные объекты и вручную разметить тренировочные фразы, чтобы ассистент учился быстрее. Она одна из наиболее глобальных функций платформы, по которой она в силах создавать роботов, работающих так же, как человека-оператора.
Шаг 3. Создаем сценарий: прописываем пара объектов ответов или действий
Здесь гемблер может придумать толкования на пользователей, предоставлять. 95% от среднестатического проекта обычно занимает простой сценарий question-answer - толкования на популярные темы.
Кстати, ассистент умеет отвечать картинками, роликах и аудиофайлами, а ежели необходимо отправит геолокацию.
Особую пользу несет конструкция jump to - благодаря ей lia умеет переходить из одного сценария в другой, и после возвращаться обратно, решая несколько задач. Это полезно, если в разговоре нужно отойти в сторону, но потом вернуться в нужное русло: например, задать уточняющий вопрос.
Пример диалога jump to:
Assistant: нам необходимо уточнить адрес транспортировки, потому как получатель не подходит. Client: а по поводу чего? Какой заказ? (Jumpto на уточнение заказа) assistant: заказ от 21 августа, antigal, «uno» malbec. Assistant: так сможем уточнить актуальный адрес доставки?(Возврат в главный сценарий)
Когда создатель заинтересован в том, для того, чтобы его ассистент не только лишь отвечал текстом, а совершал действия, он может позвать программиста, чтобы спец прописал js-сниппеты. Мы позволяем запускать javascript прямо в процессе сценариев: прибегнуть к обратиться за внешнему api, послать е-мейла или сделать другое сложное действие.
4. Итог
Ассистент может объединяться с любыми неприятностями: вести диалог с лицом, по телефону, в социальных сетях или виджете, который клиент разместит на нашем сайте.
Сборка умного ассистента в платформе занимает от считанных часов до месяца. Затем робот учится реалистично понимать запросы и узнавать паттерны - на обработку уходит до 6 месяцев (все это время его курирует живой оператор). На робо-девочку lia бизнес призван скинуть большинство рутинных целей – от согласования транспортировки и заказа такси до консультации клиентов.
Кстати, уже реализованные проекты с банками мы перенесли в платформу. Они предлагают взлом не менее надежно, но намного удобнее модерируются.
В ближайшем будущем мы планируем добавить экстракторы, что позволит нашим клиентам извлекать другие показатели - например, робот поймёт фразу «послезавтра после обеда»). Доработаем и контроль версионности - чтобы клиенты имели возможность быстро накатывать и откатывать версии проектов. И зарелизим систему ролей организации.
Мы рассчитываем, что прогнозы gartner верны - и в 2022 году до 70 %% всех взаимодействий с вами будет проходить через какую-то разновидность ии. Программы собственной задумке конструкторы вроде lia помогут перекинуть клиентский услугу на роботов ещё быстрее.
Администратор запретил публиковать записи гостям.
Работает на Kunena форум