Искусственный интеллект ищет друзей
Всем привет! Вот уже почти 4 года я занимаюсь разработкой и обучением нейронных сетей. Сейчас в команде уже 6 человек, некоторые живут не в России, но костяк находится в Москве, так что наше ПО можно считать российским. Поэтому и чатбот, которого мы разработали, говорит по русски. вот пример диалога с роботом:
На мой взгляд, довольно тяжело отличить его ответы, от диалога с живым человеком.
Подробнее
Нельзя сказать, чтобы наш подход никогда ранее не пытались использовать, хотя мы уверены, что добились в этом достаточно впечатляющих успехов. В первую очередь, когда вы пишите какое либо сообщение, оно проходит через семантический анализатор. Ничего особо нового мы тут не придумали, подобные системы используют поисковики для целых фраз поисковых запросов: буквы в словах кодируются числами и эти числа становятся координатами вектора в воображаемом многомерном пространстве. Мы проверяем, совпадает ли вектор с уже имеющимся в базе, если да, то все норм, слово передается "как есть", если нет - смотрим, какой вектор можно считать наиболее близким к искомому. Это позволяет быстро исправлять различные очепятки, которые ставили в тупик первых виртуальных собеседников, т.к. слово с неправильной буквой они считали совершенно новым, незнакомым им словом.
Понятно, что если вы напишите нечто вроде "лдаолпр" робот вас не поймет. Но справедливости ради, человек это тоже прочитать не сможет.
Потом готовое предложение, прошедшее через анализатор и исправленное, передается обученной нейросети. Тут и происходит основная "магия": сетка составляет в процессе обучения слова в специальную базу знаний, которую также можно редактировать вручную. Эту идею мы позаимствовали у Cyc (слово английское, читается Сайк), как и их синтаксис, выглядит запись примерно так:
(#$isa #$Путин #$Президент России) \;
Сеть учится оперировать не каждым словом в отдельности, а системой понятий. Все зависимости, характерные для группы понятий, приобретает каждое новое слово, после объяснения его значения. Это позволяет сократить время на обучение новым словам, нам не нужно прогонять через сеть тысячи примеров использования слова "человек", напр, чтобы она начала его использовать. Достаточно объяснить его значение простым языком 1 раз, робот может задать несколько вопросов, чтобы уяснить для себя все зависимости и прописать слово в базе знаний. Такая форма обучения ближе к естественному запоминанию человеком, чем привычное машинное обучение. А обилие современных словарей позволяет обучать его довольно быстро.
Модель поведения можно менять прогоняя сеть на специально подобранной выборке. Таким образом, например, можно научить его копировать стиль сообщений какой нибудь известной личности, логи переписки с которой у вас есть. Чем больше выборка - тем более похожим на оригинал станет поведение бота.
Кроме того, он помнит контекст, если вы в начале беседы скажете, что купили красную машину, а потом сообщите, что ваша машина синяя, робот может спросить: "Так у тебя 2 машины?"
Что мы собираемся с этим делать?
Сейчас этот робот довольно бесполезная приблуда, он умеет вести диалог с пользователем, но этого мало. Мы хотим сделать свой аналог Siri и ему подобных электронных помощников. Только с более прокачанным пониманием естественного языка. Наша цель - создать робота, с которым вы сможете общаться как с живым человеком, а также просить его выполнять различные поручения, отвечать за вас на письма и сообщения, и все в таком духе. Он даже сможет копировать ваш стиль общения и, например, поздравлять всех 2000 друзей в соцсетях (или сколько у вас там) с днями рождения или еще какими праздниками. Будет помнить ваше расписание, и если вы едите пиццу по четвергам - сам договорится о доставке к вашему приходу с работы. Ну и все в таком духе.
Также мы разрабатываем конструктор, который позволит использовать робота на различных веб-проектах для диалогов с пользователями, без привлечения труда людей. Мы постараемся не дать возможности для незаконных действий вроде спам-рассылки, попрошайничества, вымогательства и всего такого. Если вы его об этом попросите - робот откажется.
А сейчас мы проводим бета-тестирование: мы запилили тест Тьринга для своего робота. Любой желающий может зайти на специальную страницу, и пообщаться с незнакомым собеседником. Мы же соединяем либо 2-х пользователей между собой, либо пользователя с роботом. По окончании диалога спрашиваем, был ли собеседник роботом по мнению пользователя. А сами сидим скрестив пальцы и надеемся, что процент людей, догадавшихся, что общались не с человеком будет не выше ложных срабатываний, когда пользователь посчитает роботом другого пользователя. Понятно, что мы потом отфильтруем диалоги, слишком короткие из выборки удалим, оставим только те, на которых вывод был сделан не "с потолка". Т.к. робот не умеет в распознавание картинок, то мы добавили хитрость: он может такую просьбу переадресовать другому пользователю, с которым ведет диалог в настоящий момент, а его ответ переслать человеку, изначально задавшему вопрос.
Спасибо, что дочитали, если у вас возникло желание помочь нам с тестами - в комментах оставлю ссылку на страничку с чатиком.
Все диалоги мы записываем для анализа, они также будут представлены общественности, можно будет почитать, как проходил тест, а если вам нужна обучающая выборка подобных диалогов для обучения собственной нейронной сети - будет возможность скачать все диалоги в .txt формате.
Для тех, кто в тесте участвовать не желает, а ждет сразу полную версию - релиз будет в начале 2018 года, электронного помощника мы будем раздавать поначалу бесплатно, если будет интерес к этой теме, выложу потом отдельный пост после релиза, ну и буду иногда писать, как у нас дела, какие результаты получены в результате тестов, также перед релизом мы выложим робота в сеть, чтобы все желающие могли просить его поискать что-то в гугле или просто с ним пообщаться.