Этот проект представляет собой реализацию pytorch для модели MMI-anti, описанной в разделе «Целевая функция содействия разнообразию для моделей нейронного диалога».
Этот код основан на OpenNMT-py и word_language_model.
python preprocess.py
Мы будем работать с некоторыми примерами данных в папке data/
. Данные состоят из контекста параллельного диалога ( .en
) и данных его ответа ( .vi
), содержащих одно предложение в строке с токенами, разделенными пробелом:
train.en
train.vi
dev.en
dev.vi
После запуска предварительной обработки в папке data/
создаются следующие файлы:
dialogue.train.1.pt
: сериализованный файл PyTorch, содержащий данные обучения.dialogue.valid.1.pt
: сериализованный файл PyTorch, содержащий данные проверки.dialogue.vocab.pt
: сериализованный файл PyTorch, содержащий словарные данные, которые будут использоваться в процессе обучения языковой модели. cd lm/tool/
На этом этапе мы обучим языковую модель на основе ответов модели MMI-anti (пример data data/*.vi
). Поскольку эта языковая модель будет использоваться в модели MMI-anti, она будет использовать словарь ( data/*.vocab.pt
), созданный на Step1
.
python preprocess.py
Эта предварительная обработка превратит все ответы для модели MMI-anti (пример data data/*.vi
) в параллельные данные для языковой модели.
После запуска предварительной обработки в папке lm/data/
создаются следующие файлы:
train.en
train.de
dev.en
dev.de
Например, ответ "they just want a story"
в файле data/train.vi
будет предварительно обработан до "<s> they just want a story"
в файле lm/data/train.en
и "they just want a story </s>"
в файле lm/data/train.de
.
cd ../
python lm.py
Эта команда поезда сохранит языковую модель в lm/model.pt
.
Чтобы запустить этот код на ЦП, вам необходимо обновить pytorch до любой версии после 24th Feb 2018
и убедиться, что этот фрагмент кода можно найти в вашем torchtext/data/iterator.py
:
if not torch.cuda.is_available() and self.device is None:
self.device = -1
python generate.py
Этот инструмент случайным образом сгенерирует 1000 высказываний, используя языковую модель lm/model.pt
, и сохранит их в файл lm/generated.txt
.
cd ../
python train.py
python translate.py -model model_name
Результаты генерации будут сохранены в файле pred.txt
.
cat pred.txt | python diversity.py