Это чат-бот, обученный с помощью seq2seq и обучения с подкреплением .
сек2сек
Seq2seq — это классическая модель структурированного обучения, ее вход и выход представляют собой последовательность
Ванильная модель seq2seq описана в документе NIPS '14 «Последовательное обучение с помощью нейронных сетей», кодер и декодер разделены.
Модель seq2seq в этом репозитории построена с использованием двух LSTM, аналогичных модели, описанной в документе ICCV '15 «Последовательность в последовательность — видео в текст», кодер и декодер имеют одинаковые веса.
РЛ
После обучения чат-бота достаточному количеству эпох я использую технику RL, называемую градиентом политики, для дальнейшего улучшения чат-бота.
Благодаря этому чат-бот может генерировать более интересный ответ в отношении функции вознаграждения.
Моя функция вознаграждения аналогична описанной в статье EMNLP '16 «Глубокое обучение с подкреплением для генерации диалога».
Позвольте мне показать вам некоторые результаты работы чат-бота:
Результат 1 (A и B — обученные чат-боты)
А: Можете ли вы оказать мне услугу?
Б: Что угодно.
А: Я хочу, чтобы ты подчинил отца.
Б: Конечно.
А: Мне очень жаль, я не хотел показаться грубым, но.
Б: Не понимаю, по крайней мере, это примерно столько, сколько я могу.
Результат 2 (A и B — обученные чат-боты)
А: Я этого не делал! У меня нет пистолета!
Б: Ты лжец. Вы все равно хотите вернуть свои деньги.
A: Что-то не так с истиной.
Б: Мне не нужны деньги, просто я не могу их получить.
А: Что случилось.
Б: Послушай меня. Мне сейчас страшно.
A: Ах, тебе понадобятся все деньги, мне нужна твоя помощь.
Результат 3 (A и B — обученные чат-боты)
А: Я забыл купить кока-колу.
Б: У меня что-то застряло в голове.
A: Все в порядке, я думаю, это довольно распространенное явление среди этого дерьма.
Б: Я имею в виду, что мы были вместе с самого детства.
A: Тем более.
Б: Это не он, это его вина, и он слеп из-за бога.
А: И это странная история.
Больше результатов от чат-бота вы можете найти в этом каталоге
конфигурации нейронных сетей этих результатов описаны в имени файла
Вы поражены результатом чат-бота? :D
Вы можете создавать эти удивительные диалоги самостоятельно!
Просто следуйте инструкциям ниже:
pip install -r требования.txt
./script/download.sh
./script/simulate.sh <ПУТЬ К МОДЕЛИ> <ТИП МОДЕЛИРОВАНИЯ> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
<ПУТЬ К МОДЕЛИ>
чтобы создать диалоговое окно seq2seq, введите « model/Seq2Seq/model-77 ».
чтобы создать диалоговое окно RL, введите « model/RL/model-56-3000 ».
<ТИП МОДЕЛИРОВАНИЯ>
может быть 1 или 2
число представляет собой количество предыдущих предложений, которые рассматривает чат-бот.
если вы выберете 1, чат-бот будет учитывать только последнее предложение
если вы выберете 2, чат-бот рассмотрит два последних предложения (одно от пользователя и одно от самого чат-бота)
<ВХОДНОЙ ФАЙЛ>
Взгляните на result/sample_input_new.txt.
Это формат ввода чат-бота, каждая строка — это начало диалога.
Для удобства вы можете просто использовать файл примера.
<ВЫХОДНОЙ ФАЙЛ>
выходной файл, введите любое имя файла, которое вы хотите
Если вы хотите, чтобы чат-бот генерировал только один ответ на каждый вопрос
Следуйте инструкциям ниже:
pip install -r требования.txt
./script/download.sh
./script/run.sh <ТИП> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
<ТИП>
чтобы сгенерировать ответ seq2seq, введите « S2S »
чтобы сгенерировать ответ обучения с подкреплением, введите « RL »
<ВХОДНОЙ ФАЙЛ>
Взгляните на result/sample_input_new.txt.
Это формат ввода чат-бота, каждая строка — это начало диалога.
Для удобства вы можете просто использовать файл примера.
<ВЫХОДНОЙ ФАЙЛ>
выходной файл, введите любое имя файла, которое вы хотите
Я обучил своего чат-бота с помощью Python2.7.
Если вы хотите обучить чат-бота с нуля
Вы можете следовать этим инструкциям ниже:
Загляните в python/config.py, здесь описаны все конфиги для обучения.
Вы можете изменить некоторые гиперпараметры обучения или просто сохранить исходные.
Я использую Cornell Movie-Dialogs Corpus.
Вам необходимо скачать его, разархивировать и переместить все файлы *.txt в каталог data/.
Затем загрузите несколько библиотек с помощью pip:
pip install -r требования.txt
./script/parse.sh
./script/train.sh
Давайте покажем некоторые результаты модели seq2seq :)
./script/test.sh <ПУТЬ К МОДЕЛИ> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
И покажите некоторые результаты диалога из модели seq2seq!
./script/simulate.sh <ПУТЬ К МОДЕЛИ> <ТИП МОДЕЛИРОВАНИЯ> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
<ТИП МОДЕЛИРОВАНИЯ>
может быть 1 или 2
число представляет собой количество предыдущих предложений, которые рассматривает чат-бот.
если вы выберете 1, чат-бот будет учитывать только высказывания пользователя
если вы выберете 2, чат-бот будет учитывать высказывание пользователя и последнее высказывание чат-бота.
вам нужно изменить параметр Training_type в python/config.py
«нормальный» для обучения seq2seq, «pg» для градиента политики
вам нужно сначала тренироваться с «нормальным» режимом в течение некоторых эпох до стабилизации (настоятельно рекомендуется не менее 30 эпох)
затем измените метод на «pg», чтобы оптимизировать функцию вознаграждения.
./script/train_RL.sh
При обучении с градиентом политики (pg)
вам может понадобиться перевернутая модель
обратная модель также обучается на наборе данных Cornell Movie-Dialogs, но с обратным источником и целью.
вы можете скачать предварительно обученную обратную модель
./script/download_reversed.sh
или вы можете тренировать его самостоятельно
вам не нужно менять какие-либо настройки обратной модели, если вы используете предварительно обученную обратную модель
Давайте сгенерируем некоторые результаты модели RL и найдем отличия от модели seq2seq :)
./script/test_RL.sh <ПУТЬ К МОДЕЛИ> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
И покажите некоторые результаты диалога из модели RL!
./script/simulate.sh <ПУТЬ К МОДЕЛИ> <ТИП МОДЕЛИРОВАНИЯ> <ВХОДНОЙ ФАЙЛ> <ВЫХОДНОЙ ФАЙЛ>
<ТИП МОДЕЛИРОВАНИЯ>
может быть 1 или 2
число представляет собой количество предыдущих предложений, которые рассматривает чат-бот.
если вы выберете 1, чат-бот будет учитывать только последнее предложение
если вы выберете 2, чат-бот рассмотрит два последних предложения (одно от пользователя и одно от самого чат-бота)
ОС: CentOS Linux версии 7.3.1611 (ядро)
Процессор: Intel(R) Xeon(R) CPU E3-1230 v3 @ 3,30 ГГц
Графический процессор: GeForce GTX 1070 8 ГБ
Память: 16 ГБ DDR3
Python3 (для data_parser.py) и Python2.7 (для других)
По-Чи Хуан / @pochih