Wir stellen eine TensorFlow-Implementierung des CVAE-basierten Dialogmodells bereit, das in „Learning Discourse-level Diversity for Neural Dialog Models using Conditional Variational Autoencoders“ beschrieben ist, das als Langpapier in ACL 2017 veröffentlicht wurde. Weitere Einzelheiten finden Sie im Papier.
Wenn Sie in Ihrer Arbeit Quellcodes oder Datensätze aus diesem Toolkit verwenden, zitieren Sie bitte das folgende Dokument. Die Bibtex sind unten aufgeführt:
[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}
}
Die Basismethode HRED, die denselben SwitchBoard-Datensatz verwendet, ist auch auf Texar implementiert, einem Allzweck-Toolkit zur Textgenerierung. Hier zur Kasse gehen.
python kgcvae_swda.py
führt das Standardtraining aus und speichert das Modell unter ./working
Ändern Sie die TF-Flags oben in kgcvae_swda.py wie folgt, um ein vorhandenes Modell auszuführen
forward_only: False -> True
test_path: set to the folder contains the model. E.g. runxxxx
Dann können Sie das Modell folgendermaßen ausführen:
python kgcvae_swda.py
Die Ausgaben werden auf stdout ausgegeben und die generierten Antworten werden in test.txt im test_path gespeichert.
Laden Sie Glove-Worteinbettungen von https://nlp.stanford.edu/projects/glove/ herunter. Die Standardeinstellung verwendet auf Twitter trainierte Worteinbettungen mit 200 Dimensionen.
Zum Schluss setzen Sie word2vec_path in Zeile 15 von kgcvae_swda.py.
Wir veröffentlichen zwei Datensätze:
Wenn Sie das Modell anhand Ihrer eigenen Daten trainieren möchten. Bitte erstellen Sie eine Pickle-Datei im folgenden Format:
# 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'])
Legen Sie die resultierende Datei in ./data ab und legen Sie das Datenverzeichnis in kgcvae_swda.py fest