該項目是 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