Всем привет и добро пожаловать в новую серию обучающих статей про создание чат-бота на языке Python. В этой серии мы расскажем, как создали довольно неплохого бота при помощи библиотеки TensorFlow. Вот несколько примеров его работы:
Нашей целью было создание чат-бота, который мог бы в режиме реального времени разговаривать с людьми в Twitch Stream и не выглядеть при этом полным идиотом.
Для того, чтобы создать чат-бота или вообще решить любую задачу машинного обучения, нужно для начала получить сами данные для этого обучения. Затем их нужно структурировать и отформатировать по принципу «вход» и «выход», чтобы алгоритм машинного обучения мог бы их переварить. Возможно именно в этом и состоит наиболее трудоемкая работа при решении практически любых задач машинного обучения. Построение модели, а также этапы обучения и тестирования гораздо проще!
Где взять данные для обучения
Чтобы получить данные для обучения бота, можно исследовать достаточно много разных ресурсов. Например, есть сборник диалогов из фильмов от Корнеллского университета (Cornell movie dialogue corpus) — он пользуется большой популярностью. Есть также и множество других источников, но нам бы хотелось найти что-то более сырое, что ли. Что-то менее изысканное, что-то с характером. Естественно, это сразу нас ведет на Reddit!
Сначала нам казалось, что мы сможем использовать Python Reddit API Wrapper, но ограничения, накладываемые Reddit на сканирование, не самые удобные. Чтобы собрать большие объемы данных, вам придется нарушить некоторые правила. Вместо этого мы нашли дамп данных из 1,7 миллиарда комментариев на Reddit. Что ж, это должно сработать!
Reddit имеет древовидную структуру в отличие от ряда других форумов, где все линейно. Родительские комментарии линейны, но ответы на них разветвляются. На всякий случай, если кто-то с этим незнаком:
-Top level reply 1 --Reply to top level reply 1 --Reply to top level reply 1 ---Reply to reply... -Top level reply 2 --Reply to top level reply 1 -Top level reply 3
Структура, которая нам нужна для глубокого обучения, это вход-выход. Так что нам нужно получить что-то большее, например пары комментарий-ответ. В приведенном выше примере мы могли бы использовать следующие пары комментарий-ответ:
-Top level reply 1 and --Reply to top level reply 1 --Reply to top level reply 1 and ---Reply to reply…[machinelearning_ad_block]
Таким образом, нам нужно взять этот дамп Reddit и создать такие пары. Следующее, что нам нужно учитывать, это то, что у нас, вероятно, должен быть только 1 ответ на комментарий. Несмотря на то, что на многие отдельные комментарии может приходиться много ответов, на самом деле нам стоит остановиться на одном.
Мы можем просто взять первый комментарий, либо выбрать лучший — набравший наибольшее количество голосов. Подробнее на этом мы остановимся позже. Наша первая задача — получить данные. Если у вас есть проблемы с хранением данных, вы можете взять данные только за один месяц, за январь 2015 года. В противном случае вы можете скачать весь дамп целиком:
magnet:?xt=urn:btih:7690f71ea949b868080401c749e878f98de34d3d&dn=reddit%5Fdata&tr=http%3A%2F%2Ftracker.pushshift.io%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80
Мы качали этот торрент два раза, но в зависимости от количества сидов и пиров время загрузки может сильно варьироваться.
Наконец, вы также можете получить доступ к данным через Google BigQuery: Google BigQuery of all Reddit comments. Таблицы BigQuery со временем обновляются, а торрент — нет, так что это тоже хороший вариант.
Мы будем использовать торрент, так как он абсолютно бесплатен, и если вы хотите в точности следовать инструкциям, он вам понадобится. Но никогда не надо стесняться идти своим путем, поэтому при желании вы всегда можете выбрать и другие варианты.
Поскольку загрузка данных может занять значительное время, мы пока прервемся на этом. А после загрузки данных перейдем к следующей статье. Для работы с нашими статьями вам вполне будет достаточно скачать только один файл 2015-01, все 1.7 миллиардов комментариев загружать совсем не обязательно. Комментариев за один месяц должно хватить.
Следующая статья — Чат-бот на Python (Deep Learning + TensorFlow). Часть II.