Ce projet est une implémentation pytorch pour le modèle MMI-anti décrit dans A Diversity-Promoting Objective Function for Neural Conversation Models
Ce code est basé sur OpenNMT-py et word_langage_model
python preprocess.py
Nous travaillerons avec quelques exemples de données dans le dossier data/
. Les données sont constituées d'un contexte de dialogue parallèle ( .en
) et de ses données de réponse ( .vi
) contenant une phrase par ligne avec des jetons séparés par un espace :
train.en
train.vi
dev.en
dev.vi
Après avoir exécuté le prétraitement, les fichiers suivants sont générés dans le dossier data/
:
dialogue.train.1.pt
: fichier PyTorch sérialisé contenant des données de formationdialogue.valid.1.pt
: fichier PyTorch sérialisé contenant les données de validationdialogue.vocab.pt
: fichier PyTorch sérialisé contenant des données de vocabulaire, qui seront utilisées dans le processus de formation du modèle de langage. cd lm/tool/
Dans cette étape, nous allons former un modèle de langage basé sur les réponses du modèle MMI-anti (exemple data data/*.vi
). Puisque ce modèle de langage sera utilisé dans le modèle MMI-anti, il partagera le dictionnaire ( data/*.vocab.pt
) généré à Step1
.
python preprocess.py
Ces prétraitements transformeront toutes les réponses du modèle MMI-anti (exemple data data data/*.vi
) en données parallèles pour le modèle de langage.
Après avoir exécuté le prétraitement, les fichiers suivants sont générés dans le dossier lm/data/
:
train.en
train.de
dev.en
dev.de
Par exemple, la réponse "they just want a story"
dans le fichier data/train.vi
sera prétraitée en "<s> they just want a story"
dans le fichier lm/data/train.en
et "they just want a story </s>"
dans le fichier lm/data/train.de
.
cd ../
python lm.py
Cette commande de train enregistrera le modèle de langage dans lm/model.pt
.
Pour exécuter ce code sur le CPU, vous devez mettre à jour votre pytorch vers n'importe quelle version après 24th Feb 2018
et vous assurer que ce morceau de code se trouve dans votre torchtext/data/iterator.py
:
if not torch.cuda.is_available() and self.device is None:
self.device = -1
python generate.py
Cet outil générera 1 000 énoncés de manière aléatoire en utilisant le modèle de langage lm/model.pt
et les enregistrera dans le fichier lm/generated.txt
.
cd ../
python train.py
python translate.py -model model_name
Les résultats de la génération seront enregistrés dans le fichier pred.txt
.
cat pred.txt | python diversity.py