Nous fournissons une implémentation TensorFlow du modèle de dialogue basé sur CVAE décrit dans Learning Discourse-level Diversity for Neural Dialog Models using Conditional Variational Autoencoders , publié sous la forme d'un long article dans ACL 2017. Voir l'article pour plus de détails.
Si vous utilisez des codes sources ou des ensembles de données inclus dans cette boîte à outils dans votre travail, veuillez citer l'article suivant. Les bibtex sont listés ci-dessous :
[Zhao et al, 2017]:
@inproceedings{zhao2017learning,
title={Learning Discourse-level Diversity for Neural Dialog Models using Conditional Variational Autoencoders},
author={Zhao, Tiancheng and Zhao, Ran and Eskenazi, Maxine},
booktitle={Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
volume={1},
pages={654--664},
year={2017}
}
La méthode de base HRED utilisant le même ensemble de données SwitchBoard est également implémentée sur Texar , une boîte à outils de génération de texte à usage général. Commander ici.
python kgcvae_swda.py
exécutera la formation par défaut et enregistrera le modèle dans ./working
Modifiez les indicateurs TF en haut de kgcvae_swda.py comme suit pour exécuter un modèle existant
forward_only: False -> True
test_path: set to the folder contains the model. E.g. runxxxx
Ensuite, vous pouvez exécuter le modèle en :
python kgcvae_swda.py
Les sorties seront imprimées sur la sortie standard et les réponses générées seront enregistrées dans test.txt dans test_path.
Téléchargez les intégrations de mots Glove à partir de https://nlp.stanford.edu/projects/glove/ Le paramètre par défaut utilise l'intégration de mots à 200 dimensions formée sur Twitter.
Enfin, définissez word2vec_path à la ligne 15 de kgcvae_swda.py.
Nous publions deux ensembles de données :
Si vous souhaitez entraîner le modèle sur vos propres données. Veuillez créer un fichier pickle au format suivant :
# The top directory is a python dictionary
type(data) = dict
data.keys() = ['train', 'valid', 'test']
# Train/valid/test is a list, each element is one dialog
train = data['train']
type(train) = list
# Each dialog is a dict
dialog = train[0]
type(dialog)= dict
dialog.keys() = ['A', 'B', 'topic', 'utts']
# A, B contain meta info about speaker A and B.
# topic defines the dialog prompt topic in Switchboard Corpus.
# utts is a list, each element is a tuple that contain info about an utterance
utts = dialog['utts']
type(utts) = list
utts[0] = ("A" or "B", "utterance in string", [dialog_act, other_meta_info])
# For example, a utterance look like this:
('B','especially your foreign cars',['statement-non-opinion'])
Mettez le fichier résultant dans ./data et définissez le data_dir dans kgcvae_swda.py