Возможно, вы читали об искусственном интеллекте, прогрессе в машинном обучении и, возможно, даже глубоком обучении. Большой прогресс в распознавании объектов на фотографиях, игре в го и обработке текста. Теперь вы хотите использовать эту технологию для написания чат-бота.
Замечательно! Настолько велика, что мечта о взаимодействии с компьютером с помощью простого письма на естественном языке возникла еще до появления цифровых компьютеров. В 1950 году Алан Тьюринг предложил имитационную игру, в которой человек-судья и компьютерный чат через телетайп. Аргумент Тьюринга был немного более тонким, но теперь он известен как тест Тьюринга, и если компьютер может обмануть человека-судью, заставив его думать, что он тоже человек, он имеет прошел тест и официально умен. Давайте не будем слишком сильно задумываться о том, что чат-бот стал единственным настоящим испытанием для ИИ, и продолжим.
В 1966 году Йозеф Вайценбаум создал ЭЛИЗА, психолога-программиста. Люди могли общаться с ELIZA, и он использовал простые правила сопоставления с образцом для повторения частей утверждений (Мне не нравится моя работа, почему тебе не нравится твоя работа? ). Или, если это не помогло, использовались общие ответы (пожалуйста, продолжайте). Вот пример моего разговора с современной версией ELIZA, встроенной в emacs:
Вайценбаум создал ELIZA, чтобы «продемонстрировать, что общение между человеком и машиной было поверхностным», но это имело обратный эффект. Многие люди находили разговоры с ELIZA очень полезными и воображали глубокое понимание и сочувствие со стороны компьютера, хотя ничего подобного не происходило. Вайценбаум писал:
«Я не осознавал ... что чрезвычайно короткое воздействие относительно простой компьютерной программы может вызвать сильное бредовое мышление у вполне нормальных людей».
В то время как ELIZA была специально создана для использования дешевых уловок, дыма и зеркал для имитации интеллекта, исследователи вскоре обратились к более искренним усилиям.
В 1970 году Терри Виноград создал ШРДЛУ. SHRDLU мог говорить и выполнять действия в простом мире блоков, настольной сцене с набором блоков разных цветов и форм. Вот немного стандартного примера разговора:
SHRDLU был намного сложнее, чем ELIZA. Входящий текст был проанализирован и фактически понят, и стал возможен обширный диалог о вещах в мире блоков. SHRDLU мог рассуждать о классах вещей и правилах мира («может ли пирамида поддерживать пирамиду?»), А также об отдельных блоках («где красный куб?»). Он мог отслеживать контекст, о каких объектах вы говорили прямо сейчас («Где красный куб? Он находится на вершине синего куба. Поместите его в коробку»). Вы можете давать имена объектам, а также классам или коллекциям объектов. Вы могли задавать вопросы об истории мира или действиях компьютера («где раньше был красный прямоугольник?», «Сколько предметов вы коснулись»). Это было действительно потрясающе.
Теперь возникает вопрос - если это было так здорово в 1970 году - почему я сижу здесь и пишу о том, как создавать чат-ботов 47 лет спустя?
Почему это действительно сложно?
Сегодня я выполняю множество сложных задач вместе с компьютером - редактирую фотографии в Photoshop, создаю векторную графику в Inkscape, управляю своими файлами в Finder или даже пишу этот текст в текстовом редакторе. В каждом случае компьютер предлагает мне набор полезных абстракций. В Photoshop я думаю о корректирующих слоях, выделениях, масках и т. Д. Иногда эти абстракции нечеткие, и мне приходится беспокоиться о цветовых пространствах или разрешении изображения, но очень редко мне приходится опускаться до фактического « нижнее »представление, массивный одномерный массив значений цвета RGB для каждого пикселя.
В Finder я беспокоюсь о размерах файлов, расширениях, именах и папках, разрешениях и т. Д., Но, если что-то не пойдет серьезно, мне никогда не придется беспокоиться о том, как эти вещи на самом деле сохраняются на диск (опять же, по сути, массивный одномерный массив байтов ).
Все эти программы предлагают полезные абстракции, которые позволяют мне делать то, что я никогда не смог бы сделать на самом низком уровне. Однако общим для них является то, что вся работа выполняется на условиях компьютера. Мне нужно выучить компьютерный язык и выразить себя с помощью метафор, которые компьютер понимает, чтобы делать что-либо. И это нормально! Нужно научиться, но это приемлемый компромисс.
Чат-бот меняет ситуацию - взаимодействие происходит на том же уровне, что и человеческое общение. Вместо того, чтобы опускать себя до уровня Finder, я ожидаю, что чат-бот Finder будет работать с естественным языком, а это среда, которую я практиковал и использовал на протяжении десятилетий. .
Это сложно!
Естественный язык - это беспорядок
С точки зрения программистов, естественный язык - это полный хаос. В общении люди полагаются на слои и слои общих предположений и базовых знаний здравого смысла. Они говорят «какие места открыты для обеда» и имеют в виду обед как указание времени (примерно 11: 00–14: 00). Они имеют в виду обед как "еда", поэтому они хотят поесть, и, вероятно, в ресторане, а не в супермаркете. Они говорят «назначить встречу с моей сестрой на обед» и имеют в виду сестру из того же города, а не ту, которая работает в другой стране. Они используют синонимы только для того, чтобы возиться с вами: «Я люблю / обожаю / обожаю кофе», они перефразируют целые предложения, чтобы обозначать одно и то же, но не имеют общих слов: «Где я могу пообедать поблизости?»? "Есть ли здесь места, где можно перекусить?"
Даже если пользователь не пытается вас обмануть, естественный язык имеет слои и слои неоднозначности сами по себе (Джон поцеловал свою жену, и Сэм тоже - какую жену поцеловал Сэм?)
Конечно, многое из этого можно исправить. Мы можем закодировать информацию об обеде времени и обеде обедом. Мы можем предоставить списки синонимов, но все это вводит зависимость от предметной области. Наш бот для бронирования обедов ничего не будет знать о погоде, покемонах, политике и т. Д.
Это была основная причина, по которой успех SHRDLU не смог распространиться на другие домены. У SHRDLU был очень простой закрытый мир. В нем был список существительных, глаголов и прилагательных, имеющих смысл в этом мире, и синтаксический анализатор, который мог распознавать различные типы вопросов, запросов на выполнение действий и т. Д. Но, в конце концов, он не был надежным. Адаптация парсера к более крупным и сложным доменам быстро превратилась в неразбериху. Кроме того, мир блоков удивительно конкретен и прост: объект либо куб, либо нет, он либо красный, либо нет, и т. Д.
Реальный мир не такой.
Эффект Элизы
В ELIZA люди вкладывают в разговор уровни сложности, и люди просят Вейценбаума выйти из комнаты, чтобы они могли поговорить с ELIZA наедине. Язык глубоко пропитан смыслом для нас, и каждый человек имеет годы практики чтения очень тонких подсказок о том, как вещи формулируются и как используются слова. Даже если вы знаете лучше, очень сложно перестать это делать, когда вы разговариваете с компьютером. Даже если вы знаете, что слова для компьютера - это в основном пустые токены, трудно не наполнить их той же семантикой, что и при разговоре с другим человеком.
На первый взгляд это может показаться великолепным: людей легко обмануть простыми синтаксическими уловками! Вам даже не нужно делать сложных вещей, чтобы создать чат-бота!
Однако часто это настраивает себя на провал: если люди считают, что ваш бот похож на человека, они будут относиться к нему как к человеку и будут ожидать, что он понимает шутки, иронию и флирт (как только IKEA удалила своего виртуального помощника , Анна, через 10 лет они сказали, что 50% вопросов, которые ей задавали, были сексуального характера!). Они будут использовать двусмысленный, небрежный язык. Они предполагают наличие мира общих фоновых знаний, которыми делятся люди, но не ваш бот.
Столько веревок, на которых можно повеситься!
Часто это настраивает себя на провал: если люди верят, что ваш бот похож на человека, они будут относиться к нему как к человеку, они будут ожидать, что он понимает шутки, иронию и флирт.
Изящная неудача и восстановление
В человеческом общении хорошо то, что, если вы можете проглотить немного гордости, можно сказать: «Я не знаю» или «Я не понимаю» - это нормально. Для бота это хорошо: поскольку мы далеки от некоторых универсальных интеллектуальных технологий, всегда будут вещи, выходящие за рамки вашего бота. Однако это плохо, поскольку знать то, чего вы не знаете, часто бывает непросто. Это усугубляется тем, что люди отлично умеют динамически адаптироваться:
«Я не знаю, что это за тележка для гольфа, о которой вы говорите».
- «Это похоже на небольшой электромобиль, на котором ездят по полю для гольфа».
«Хорошо, хорошо».
Этот тип динамического получения новых концепций очень сложен для компьютера.
Так как же нам это сделать?
Как обычно, программисты ленивы. Святой Грааль - это как можно меньше работы - никаких жестко запрограммированных диалоговых деревьев, никакой адаптации предметной области, никаких правил. В идеале он работал бы как очень независимый, творческий и трудолюбивый помощник-человек: вот книга данных о клиентах, вот список бизнес-процессов, теперь поднимайте этот телефон, когда он звонит, и отвечайте на вопросы.
Мы называем это сквозной системой машинного обучения: исходные данные поступают, исходные данные выходят.
Для ясности - сегодня мы далеки от этого сценария. Но люди добиваются определенного прогресса в использовании машинного обучения, чтобы научиться выполнять три основных процесса в мозгу чат-бота: анализ и понимание входных данных, моделирование разговора и решение, что сказать дальше, и, наконец, собственно написание выходных предложений.
Если вы хотите сесть и реализовать чат-бота сегодня, вот несколько подходов.
Диалоговый интерфейс
Это просто, просто не выполняйте фактическую часть «чата», то есть вообще не допускайте ввода на естественном языке. Вместо этого вы можете предложить стандартные компоненты пользовательского интерфейса, раскрывающиеся списки, кнопки, ползунки и т. Д.
Система по-прежнему может визуально выглядеть как чат-бот. У вас могут быть пузыри и диалоговое взаимодействие, выбрать вариант, получить другой выбор, ввести что-то и т. Д. Вы должны сами написать код диалогового дерева, но как только это будет сделано, бот может разумно реагировать в зависимости от того, что выбрал пользователь.
Это может показаться обманом, но простая реализация и низкий риск того, что что-то пойдет не так, означают, что многие из развернутых сегодня диалоговых интерфейсов именно таковы! У авиакомпании KLM есть очень полезный бот в Facebook Messenger, который информирует вас о времени полета, отправляет вам QR-код посадочного талона и т. Д. И не принимает текстовый ввод. Точно так же Приложение Quartz News предлагает только кнопки для взаимодействия.
Плюсы:
- Избегайте всех проблем с обработкой естественного языка
- Здесь нет машинного обучения, поэтому нет черного ящика, с которым можно было бы бороться. Бот делает, как сказано, но не более того.
- Отсутствие опасности выхода пользователя за пределы целевого домена
- Обнаруживаемость: все варианты тут же
- По-прежнему обладает многими преимуществами диалоговых интерфейсов: он удобен, пользователь руководствуется процессом и никогда не забывает о своем выборе.
Минусы:
- Зачем вообще нужен чат-бот? Может быть, лучше продуманная форма / мастер?
- Объем (очевидно) ограничен тем, что вы кодируете
- Вы должны все жестко закодировать
Скриптовые намерения
На шаг выше мы разрешаем фактический свободный ввод текста. Обработка естественного языка (NLP) используется для классификации намерений и извлечения параметров. Например, «привет» можно сопоставить с намерением приветствия, а «пожалуйста, переведите 50 евро Бобу» сопоставляется с намерением перевода с параметрами сумма, равными 50 евро и получатель em. > установить на Боба.
Это то, что предлагают многие платформы чат-ботов, такие как init.ai или служба IBM Watson Conversation.
Pro:
- Настоящий чат, кажется сложным
- Относительно легко реализовать, многие поставщики технологий
- Требуется относительно небольшой объем обучающих данных
Против:
- Классификация - это не понимание естественного языка, которое все еще ограничено намерениями, которые вы поддерживаете программой.
- Обнаружение затруднено: если ваш бот поддерживает только отчеты о погоде, цены на акции и расписание автобусов, зачем открываться миру, в котором пользователь может спрашивать что угодно?
- Так много веревок, на которых можно повеситься: если вы позволите людям попросить все, что они пожелают, первоначальное чувство изысканности может быстро смениться разочарованием.
Вышеупомянутый подход можно обучить с относительно небольшим объемом обучающих данных. Настолько мало, что вы можете легко создать его вручную. Однако, если у вас есть большой корпус журналов от существующего (предположительно человеческого) чат-бота-оператора, вы можете сделать немного лучше!
Научитесь подбирать правильный ответ
Представьте себе чат-бота, который выполняет какую-то поддержку программного обеспечения. Вероятно, на подавляющее большинство вопросов вы уже ответили, и они не требуют особой обработки.
Вероятно, есть еще несколько более сложных вопросов, но если вы можете автоматизировать верхние 90% входящего объема, многое уже будет получено.
Именно так люди поступают с машинным обучением. Учитывая большой существующий журнал чата и ввод от пользователя, они пытаются найти наиболее похожий вопрос / ответ, который они уже видели. Это, например, подход, который Facebook хочет, чтобы люди использовали с их задачей bAbl Dialog.
Плюсы:
- Хорошо работает в местах с большим количеством повторяющихся вопросов, как способ автоматизации поиска в базе данных часто задаваемых вопросов.
Минусы:
- Неудобный режим отказа: бот ответит случайной ерундой
- Трудно обнаружить неудачу: если вопрос не соответствует тому, что мы видели раньше, как мы узнаем?
- Модель черного ящика (обычно), которую сложно настроить или приспособить к потребностям клиентов.
Подход, основанный на базе знаний
Базы знаний и явные представления формальных знаний имели несколько недостатков. От разочарования после первого ажиотажа SHRDLU до зимы 80-х в экспертной системе искусственного интеллекта. Но призрак семантической паутины бродит по коридорам современной паутины. Когда вы спрашиваете Google сколько лет Бараку Обаме, вы получаете не только хиты из Интернета, но и фактический ответ прямо здесь, прямо из Сети знаний Google.
Со времен SHRDLU люди добились большого прогресса в отображении вопросов на естественном языке в структурированные запросы. Подходы, основанные на машинном обучении, теперь стали гораздо более надежными и менее предметными. Встраивание реальных графов знаний в нейронные сети, где выводы могут сочетаться с нечеткими противоречивыми интерпретациями, является активной областью исследований.
Плюсы:
- На самом деле может предоставить систему, которая может ответить на вопросы, которые разработчики чат-ботов не ожидали
- Забавные режимы отказа:
Минусы:
- Вам нужна настоящая база знаний (да). Если ваша цель - создать интерфейс API на естественном языке, он менее полезен.
- Передовые исследования, возможно, слишком трудные / недостаточно понятные для вашей производственной среды
Заключение
Вышеупомянутое представляет собой попытку классифицировать возможные подходы к написанию чат-бота по количеству использованного машинного обучения или, наоборот, количеству ручного ручного кодирования.
Конечно, есть много других способов классифицировать чат-ботов. Мы также полностью проигнорировали различные проблемы, создаваемые разными типами ботов: бот для болтовни для развлечения предлагает очень разные решения для образовательного бота, отвечающего на вопросы о Второй мировой войне, или для бота службы поддержки, который, по сути, является интерфейсом на естественном языке для reset-password или change-email API.
Любая работающая развернутая система, вероятно, в конечном итоге станет гибридом всего этого. Возможно, как гибрид с человеческими операторами, которые вступают во владение, когда бот выходит из своей глубины, либо явно (я запутался, пожалуйста, подождите, пока мой коллега Боб возьмет на себя), или за кулисами, как Facebook М помощник.
Настоящий пирог в небе здесь заключается в том, что ваш чат-бот не должен ограничиваться ответами или вопросами, которые вы запрограммировали в него. Подобно тому, как Photoshop предоставляет мне корректирующие слои, но я могу использовать их способами, неожиданными для программистов, чат-бот должен предоставить вам язык, на котором можно что-то делать, но при этом предоставить вам новые комбинации и конструкции. , как сегодня разработчик, не может представить.
Мне немного кажется, что чат-боты - это скевоморфизм 2018 года: «Смотрите, система умеет разговаривать! Это все равно что болтать с человеком! " это все равно что сказать «смотри, это кожа! Он похож на ваш настольный календарь ». Хотя на самом деле это совсем другое. Я все еще думаю, что у них есть свое место. В частности, в тех случаях, когда пользователи могут быть перегружены выбором, чат-боты предлагают дружественный управляемый процесс. И если вы открыто заявляете о том, что вы ограниченный бот, вы можете управлять ожиданиями и избегать разочарований. Я считаю, что Google Now Assistant, который не претендует на роль более чем интеллектуального поля поиска, работает хорошо.
Еще одним преимуществом является то, что чат-боты не требуют от людей изучения нового (графического) интерфейса, они могут быть встроены в WhatsApp, Allo или Facebook Messenger, которые люди уже знают, как использовать (это не означает, что у чат-бота нет собственного ограничения на то, какой язык он понимает или какие действия он может выполнять. Это также образует своего рода интерфейс).
Наконец, в сочетании с распознаванием голоса интерфейсы на основе чата отлично подходят, если вы ведете машину или иным образом занимаетесь руками или визуальным вниманием.
Просто помните, что технологии для реализации данных Star Trek еще нет, и все будет в порядке!