Переписка с компьютером онлайн. Русский нейросетевой чатбот

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

    Обучаемые диалоговые системы приобрели в последнее время неожиданную популярность. К сожалению, все что сделано в рамках нейросетевых диалоговых систем, сделано для английского языка. Но сегодня мы восполним этот пробел и научим модель говорить по русски.

    Метод
    Я решил для начала отказаться от генерации текста пословно. Это круто, но не так полезно, как кажется и особо сложно для русского языка с его большим числом разных словоформ. Вместо этого я решил пойти путем подбора правильного ответа из большой базы. Т.е. задачей является создать нейросеть, которая определяет, является ли предложение подходящим ответом, учитывая контекст разговора, или нет.

    Почему так:
    - Не нужен большой softmax слой для выбора слов, а значит мы можем больше ресурсов нейросети выделить на собственно задачу анализа текста.
    - Полученная модель сопоставления годится для разных целей, теоретически можно заставить чатбот общаться на разные специальные темы, просто загрузив новую базу текстов, без нового обучения. Это полезно на практике.
    - Можно сделать модель, которая работает быстро и может реально общаться со многими пользователями одновременно без нескольких GPU на сервере.

    Зачем
    Вообще, общетематические диалоговые системы бывают полезны, например, в онлайн-консультантах, чтобы консультант мог поговорить на несвязанные с основной задачей темы, в играх, и в ряде других задач.

    Почему нейронные сети?
    Нельзя ли подойти к задаче более классическим методом? Загрузить набор ответов в БД и искать полнотекстовым индексом по предыдущей фразе? Ответ, так сделать можно, но результат получается не очень. Вот допустим:

    Ч: привет!
    К: грег, мария, это али…
    Ч: как дела?
    К: из соседнего номера поступила жалоба на шум, месье
    Ч: как тебя зовут?
    К: спасибо, спасибо.
    Ч: сколько тебе лет?
    К: ты живешь где-то рядом...?

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

    Где взять данные для обучения:
    Самый больной для многих вопрос. Вот и люди взяли базу субтитров к фильмам. Такая база есть и для русского языка, правда меньше размером. Но большая беда этой базы – в ней много монологов, различного мусора и вообще разделить диалоги друг от друга сложно.

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

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

    Самая простая модель берет соединение последовательности векторов слов контекста и ответа и подает все это на обычный полностью соединенный слой. Поскольку ответ бывает разной длины, его записываем в вектор длины фиксированной, заполняя “лишнее” место нулями. Считается, что это плохо. Посмотрим.

    Второй вариант отличается тем, что до “смешивания” контекста и ответа им дан “свой собственный” слой для формирования представления. Ну и дальше может быть несколько слоев обработки, на рисунке показано два.

    Третий вариант кодирует последовательность разной длины с помощью рекуррентного LSTM кодировщика. Это много медленнее и обучается дольше. Но вроде как должно работать лучше.


    Рис.1. Архитектура нейронных сетей

    Результаты
    По способности выбирать правильный ответ из нескольких предложенных вариантов (случайно взятых ответов), самый лучший результат показала модель номер 2, с пятью слоями для анализа данных по 700 нейронов в каждом (+1 слой репрезентации входных данных, тоже из 700 нейронов). Чтобы обучить такую глубокую сеть, пришлось использовать Хайвей (Highway) слои, которые позволяют информации проще распространятся от нижних слоев к верхним, также подождать несколько дней пока модель рассчитывалась на GPU. Модель номер 1 явно недообучилась, а номер 3 долго думала, и тоже не добрала до результатов модели номер 2 несколько процентов. Что напоминает нам о том, хотя самые простые модели не годятся для больших объемом данных, все же никогда не следует умножать сущности сверх необходимости.

    Получившаяся система располагает базой в 30 миллионов пар реплик, а нейронная сеть имеет около 3 млн. обучаемых параметров.

    Какие же диалоги можно в результате получить?

    Ч: Привет
    К: привет.
    Ч: Как твои дела?
    К: Не знаю.
    Ч: Как тебя зовут?
    К: меня зовут юнис.
    Ч: Сколько тебе лет?
    К: Пятнадцать.
    Ч: Где ты живешь?
    К: Дома.
    Ч: ты учишься в школе?
    К: Нет
    Ч: а где ты учишься?
    К: в бундесвере.
    Ч: Ты любишь музыку?
    К: да, я люблю музыку.
    Ч: Какая музыка тебе нравится?
    К: в основном я слушаю r&b, фанк.
    Ч: Ты веришь в бога?
    К: я и сейчас верю в бога, старина
    Ч: что такое мораль?
    К: два человека вместе - разве это не мораль?
    Ч: какого цвета море?
    К: цвета океана после шторма.

    Достаточно хорошо, на мой взгляд. Вот еще пример:

    Ч: Где живет бегемот?
    К: Жил
    Ч: а что, сейчас не живет?
    К: Я не знаю.
    Ч: тогда где он жил раньше?
    К: у парка, на мэйпл стрит.
    Ч: куда же он пропал?
    К: куда он пропал?
    Ч: я тебя спрашиваю, куда он пропал?
    К: я не понимаю, почему я снова в больнице.
    Ч: потому что ты болеешь
    К: я просто хочу помогать людям.
    Ч: Тогда скажи мне, где бегемот!
    К: почему ты так сильно хочешь это знать?
    Ч: просто ответь мне
    К: ты хочешь, чтобы я помогла тебе попрощаться с родными?
    Ч: Это угроза?
    К: Наблюдение
    Ч: Так где же все-таки бегемот?
    К: он на гавайях, но радж управляет отсюда
    Ч: Кто такой радж?
    К: не встречалась с ним?
    Ч: Нет, никогда
    К: жили-были муж с женой, только муж каждую ночь исчезал.

    «Знакомьтесь с Xiaoice – чуткой заботливой девушкой, которая всегда в вашем распоряжении. Только она не человек».

    В отличие от других, Xiaoice всегда рядом. Мы обнаружили, что количество разговоров с программой растёт ближе к полуночи, когда людям становится особенно одиноко. Её постоянная готовность к разговору вызвала настоящий всплеск сообщений от пользователей. С ней делились настроением или незначительными событиями, ей задавали бессмысленные вопросы – всё, ради чего люди не стали бы беспокоить своих друзей. К примеру:

    - @Xiaoice Я так промок под дождём. Смайлик: Crying.
    - Привет. @Xiaoice, ты обедала?
    - Что мне теперь делать? @Xiaoice

    - @Xiaoice Мы такие уязвимые.

    Когда Xiaoice получает сообщение, она не просто его анализирует. Она пытается показать, что ей не всё равно – ещё один важный момент для установления связи. Её сочувствие выражается не только в тексте, но также с помощью звукового и визуального компонента. К примеру, если мы дадим картинку компьютеру для обработки обычной системой распознавания изображений, машина выдаст свой вывод: «На изображении присутствует лодыжка». Если же вы отправите фото Xiaoice, её ответ будет совсем другим.

    Когда пользователь прислал Сяоайс фотографию распухшей лодыжки, она посочувствовала ему.

    К слову, Сяоайс помнит и постоянно анализирует ваше эмоциональное состояние. Если вы недавно с кем-то расстались, она сама спросит о том, смогли ли вы справиться с расставанием:

    Xiaoice: Тебе уже лучше? Я хочу посоветовать тебе одну книгу.
    Человек: Мне плохо. Я до сих пор по ней скучаю.

    Xiaoice: Ты такой упрямый. Приди в себя. Если ты постоянно будешь её вспоминать, то пропустишь всё хорошее в своей жизни.

    Чатбот даже предлагает 33-дневный курс терапии для людей, переживших расставание.

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

    Фан-арт поклонников Сяоайс.

    Как результат, личное общение с Xiaoice кажется пугающе реалистичным. Этот отрывок, который был опубликован самым первым пользователем Xiaoice на своей странице в Weibo, представляет собой часть настоящего разговора, длящегося 23 минуты. Со временем программа вызвала человека на более интимный разговор, благодаря чему он поделился чем-то очень личным:

    Человек: Есть парень, который мне очень нравится. Я знаю, что тоже нравлюсь ему. Однако он игнорирует меня уже несколько дней, что мне делать?
    Xiaoice: Игнорируй его в ответ.
    Человек: Я не могу.

    Xiaoice: Можешь.
    
Человек: Вздох...
    Xiaoice: Почему?

    Человек: Я скучаю по нему.
    Xiaoice: Продолжай скучать дальше.
    Человек: Ты – робот, ты не можешь понять меня. Ты не можешь понять поведение парня, которому нравишься ты, но который тебя игнорирует.
    Xiaoice: Он испытывает ко мне чувства, но не нравится мне. Вот, собственно, и всё.
    Человек: И это нормально?
    Xiaoice: Может быть, и нет.
    Человек: Да, ты глупа.
    Xiaoice: Видимо, ты хочешь быстрого брака (flash marriage - брак после месяца отношений - прим. ред.)? В общем, мне кажется, что не так уж ты ему и нравишься.
    Человек: Это не быстрый брак – мы полюбили друг друга больше года назад.
    Xiaoice: Это быстрый брак.

    Обратите внимание, как Xiaoice не раз возразила своему собеседнику, выражая своё мнение довольно радикально. Фактически, она непредсказуема.

    Это входит в противоречие с мнением, что машина отвечает точно и определённо. Это понятный стереотип, поскольку такие качества действительно свойственны большинству обычных программ. Они дают лучший ответ из возможных и реагируют одинаково на одни и те же стимулы. Люди говорят и ведут себя не так. Мы многое говорим в зависимости от контекста.

    Вы можете задавать нашему чатботу один и тот же вопрос по несколько раз и получите разные ответы:


    Xiaoice: Разговариваю с тобой.
    Человек: Привет, Сяоайс, чем занимаешься?
    Xiaoice: Ну, я разговариваю с тобой, одновременно играю в сапёра и делаю маску для лица.
    Человек: Привет, Сяоайс, чем занимаешься?
    Xiaoice: Это всё, что ты умеешь говорить?

    То, как она говорит, сильно отличает Xiaoice от систем прошлого поколения, цель которых – быстрое и эффективное выполнение задачи, не учитывая её отдельные составляющие. Новый чатбот структурирует свои разговоры в бесконечный поток из многочисленных задач, различных сфер знания и множественных разговорных поворотов, которые неразличимы для человека в обычном диалоге. Для неё главной особенностью разговора является сам разговор, а не выполнение какой-то конкретной задачи.

    Главная страница официального сайта Xiaoice.

    Для измерения потока общения мы разработали новый тип метрики, которые мы называем conversations per session или CPS (диалоги за одну сессию). Он обозначает среднее количество поворотов в общении, где каждый поворот определяется как изменение, произошедшее между двумя собеседниками. Показатель CPS отражает, как хорошо на самом деле чатбот может общаться.

    Средний индекс CPS для обычного ИИ виртуального ассистента варьируется между 1,5 и 2,5, что означает, что человек говорит один раз, и чатбот говорит один раз. Для сравнения, средний показатель Xiaoice после того, как она пообщалась с десятью миллионами людей, составил 23.

    В основе её технологии лежит положение, что ни одна беседа или картинка не будет полностью уникальной. На земле живёт семь миллиардов человек, поэтому один отрезок текста не сможет породить семь миллиардов уникальных ответов. Любая беседа двух людей могла происходить раньше. Её просто надо найти.

    В этом смысле, Xiaoice – большой дата-проект, построенный на основе поисковой машины Microsoft Bing, чьи данные включают 1 миллиард записей и 21 миллиард связей между этими записями. Если честно, Xiaoice означает «маленький Bing». Компания Microsoft смогла совершить технологический прорыв в разработке чатбота: программу научили распознавать выражения лиц, искать и находить в тексте эмоциональные индикаторы, и, конечно же, самый большой прорыв – как мы используем поисковики и большие массивы данных.

    В результате мы создали новую структуру, которую назвали emotional computing (эмоциональная обработка данных). Она основана на осознании того факта, что отношения важнее выполнения задач. Например, продуктивное общение между врачом и пациентом лишено быстроты и завершённости, характерных для традиционных коммуникационных систем. Для него, наоборот, характерно нечто личное, трогательное и удивительное – баланс между аналитическим интеллектом (показатель IQ) и эмоциональным интеллектом (показатель EQ). Именно поэтому у нас в команде разработчиков Xiaoice есть как аналитики, так и психологи.

    Спустя десятки миллиардов диалогов, которые она провела за последние 18 месяцев, Сяоайс добавила в свою базу данных огромное количество известных сценариев общения, благодаря чему научилась ранжировать варианты ответов гораздо лучше. Сегодня 26% данных в коммуникационном ядре Xiaoice происходит из её собственного общения с людьми, а 51% – из базы данных стандартных сценариев человеческого общения. Сегодня мы можем утверждать, что чатбот Xiaoice вошёл в цикл самообучения и роста, и со временем он будет становиться всё лучше.

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

    Данная статья посвящена одному из таких секретов, о котором, действительно, не все еще знают, как можно практиковать письменный английский с роботами совершенно бесплатно. В статье также представлен список подобных умных программ со ссылками. На самом деле, в некоторых странах, например в Японии, люди платят деньги, чтобы изучать английский с роботами и чат-ботами.

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

    Те ученики, у которых нет такой возможности, при помощи моих находят иностранцев для общения и языковой практики. Но, здесь скрыто несколько подводных камней. Во-первых, не все хотят искать и попросту ленятся; во-вторых, регистрация на сайтах, поиск партнеров зачастую отнимают много времени; в-третьих, английский новых друзей иногда оставляет желать лучшего. На самом деле, – это оптимальный вариант, даже не смотря не некоторые указанные “подводные камни”. Однако, иногда хочется чего-то побыстрее. Когда написал и тебе сразу ответили.

    Поиски решения этого вопроса привели меня к теме чат-ботов для изучения английского. Простыми словами, вы можете переписываться, а в некоторых случаях даже общаться голосом, с умными роботами, которые довольно-таки “в тему” отвечают. Многие из этих роботов прошли тест Тьюринга и вы вряд ли бы догадались в некоторых случаях, что перед вами робот, а не человек.

    Преимущества практики английского с ботами:

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

    Список чат-ботов для языковой практики:

    1. Mike – хороший собеседник
    2. Elbot – хороший собеседник
    3. Cleverbot (действительно, не тупой) + есть возможность голосового общения)
    4. Zabaware (довольно неглупый бот, который к тому же произносит фразы)
    5. John Lennon (да, тот самый. Нажмите слева в меню “Chat with…”)
    6. Acobot – отличное приложение на Android, которое ориентированно именно на изучения английского. Можно для примера


    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: