Este proyecto es una implementación de pytorch para el modelo MMI-anti descrito en Una función objetiva de promoción de la diversidad para modelos de conversación neuronal.
Este código está basado en OpenNMT-py y word_language_model
python preprocess.py
Trabajaremos con algunos datos de ejemplo en la carpeta data/
. Los datos constan de un contexto de diálogo paralelo ( .en
) y sus datos de respuesta ( .vi
) que contienen una oración por línea con tokens separados por un espacio:
train.en
train.vi
dev.en
dev.vi
Después de ejecutar el preprocesamiento, se generan los siguientes archivos en la carpeta data/
:
dialogue.train.1.pt
: archivo PyTorch serializado que contiene datos de entrenamientodialogue.valid.1.pt
: archivo PyTorch serializado que contiene datos de validacióndialogue.vocab.pt
: archivo PyTorch serializado que contiene datos de vocabulario, que se utilizarán en el proceso de entrenamiento del modelo de lenguaje. cd lm/tool/
En este paso, entrenaremos un modelo de lenguaje basado en las respuestas del modelo MMI-anti ( data/*.vi
). Dado que este modelo de lenguaje se utilizará en el modelo MMI-anti, compartirá el diccionario ( data/*.vocab.pt
) generado en Step1
.
python preprocess.py
Este preprocesamiento convertirá todas las respuestas para el modelo MMI-anti ( data/*.vi
) en datos paralelos para el modelo de lenguaje.
Después de ejecutar el preprocesamiento, se generan los siguientes archivos en la carpeta lm/data/
:
train.en
train.de
dev.en
dev.de
Por ejemplo, la respuesta "they just want a story"
en el archivo data/train.vi
será preprocesada en "<s> they just want a story"
en el archivo lm/data/train.en
y "they just want a story </s>"
en el archivo lm/data/train.de
.
cd ../
python lm.py
Este comando de tren guardará el modelo de lenguaje en lm/model.pt
.
Para ejecutar este código en la CPU, debe actualizar su pytorch a cualquier versión posterior 24th Feb 2018
y asegurarse de que este fragmento de código se pueda encontrar en su torchtext/data/iterator.py
:
if not torch.cuda.is_available() and self.device is None:
self.device = -1
python generate.py
Esta herramienta generará 1000 expresiones aleatoriamente utilizando el modelo de lenguaje lm/model.pt
y las guardará en el archivo lm/generated.txt
.
cd ../
python train.py
python translate.py -model model_name
Los resultados de la generación se guardarán en el archivo pred.txt
.
cat pred.txt | python diversity.py