Proporcionamos una implementación de TensorFlow del modelo de diálogo basado en CVAE descrito en Aprendizaje de la diversidad a nivel de discurso para modelos de diálogo neuronal utilizando codificadores automáticos variacionales condicionales , publicado como un artículo extenso en ACL 2017. Consulte el artículo para obtener más detalles.
Si utiliza algún código fuente o conjunto de datos incluidos en este kit de herramientas en su trabajo, cite el siguiente documento. Los bibtex se enumeran a continuación:
[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}
}
El método de referencia HRED que utiliza el mismo conjunto de datos SwitchBoard también se implementa en Texar , un conjunto de herramientas de generación de texto de uso general. Pague aquí.
python kgcvae_swda.py
ejecutará el entrenamiento predeterminado y guardará el modelo en ./working
Modifique los indicadores TF en la parte superior de kgcvae_swda.py de la siguiente manera para ejecutar un modelo existente
forward_only: False -> True
test_path: set to the folder contains the model. E.g. runxxxx
Luego puedes ejecutar el modelo mediante:
python kgcvae_swda.py
Los resultados se imprimirán en stdout y las respuestas generadas se guardarán en test.txt en test_path.
Descargue incrustaciones de palabras de Glove desde https://nlp.stanford.edu/projects/glove/ La configuración predeterminada utiliza incrustaciones de palabras de 200 dimensiones entrenadas en Twitter.
Por último, configure word2vec_path en la línea 15 de kgcvae_swda.py.
Lanzamos dos conjuntos de datos:
Si desea entrenar el modelo con sus propios datos. Cree un archivo pickle que tenga el siguiente formato:
# 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'])
Coloque el archivo resultante en ./data y configure data_dir en kgcvae_swda.py