该项目是 A Diversity-Promoting Objective Function for Neural Conversation Models 中描述的 MMI-anti 模型的 pytorch 实现
该代码基于 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/*.vi
)。由于该语言模型将在 MMI-anti 模型中使用,因此它将共享Step1
中生成的字典( data/*.vocab.pt
)。
python preprocess.py
这些预处理会将 MMI-anti 模型的所有响应(示例数据data/*.vi
)转换为语言模型的并行数据。
运行预处理后,在lm/data/
文件夹中生成以下文件:
train.en
train.de
dev.en
dev.de
例如,文件data/train.vi
中的响应"they just want a story"
将被预处理为文件lm/data/train.en
中的"<s> they just want a story"
和"they just want a story </s>"
文件lm/data/train.de
中。
cd ../
python lm.py
此训练命令会将语言模型保存到lm/model.pt
。
要在 CPU 上运行此代码,您需要将 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
该工具将使用语言模型lm/model.pt
随机生成 1000 个话语,并将它们保存到文件lm/generated.txt
中。
cd ../
python train.py
python translate.py -model model_name
生成结果将保存在文件pred.txt
中。
cat pred.txt | python diversity.py