이 프로젝트는 A Diversity-Promoting Objective Function for Neural Conversation Models에 설명된 MMI-anti 모델에 대한 파이토치 구현입니다.
이 코드는 OpenNMT-py 및 word_언어_모델을 기반으로 합니다.
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
이 train 명령은 언어 모델을 lm/model.pt
에 저장합니다.
CPU에서 이 코드를 실행하려면 24th Feb 2018
이후에 pytorch를 모든 버전으로 업데이트하고 이 코드 조각이 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