Este repositorio contiene un nuevo método de entrenamiento adversario para nuestro Agente Conversacional Generativo (GCA).
Se pueden encontrar más detalles sobre este nuevo método de capacitación en el artículo de Oswaldo Ludwig, "End-to-end Adversarial Learning for Generative Conversational Agents", arXiv:1711.10122 cs.CL, noviembre de 2017. En el caso de una publicación que utilice ideas o fragmentos de código de este repositorio, por favor cite este documento.
Nuestro método asume el GCA como un generador que apunta a engañar a un discriminador que etiqueta los diálogos como generados por humanos o por máquinas. En nuestro enfoque, el discriminador realiza una clasificación a nivel de token, es decir, indica si el token actual fue generado por humanos o por máquinas. Para hacerlo, el discriminador también recibe como entrada las expresiones de contexto (el historial de diálogo) y la respuesta incompleta hasta el token actual. Este nuevo enfoque hace posible el entrenamiento de un extremo a otro mediante retropropagación. Un proceso de autoconversación permite producir un conjunto de datos generados con mayor diversidad para el entrenamiento adversario. Este enfoque mejora el rendimiento en preguntas no relacionadas con los datos de entrenamiento.
El modelo entrenado disponible aquí utilizó un conjunto de datos recopilados de diálogos de cursos de inglés en línea, disponibles aquí.
Nuestro modelo GCA se puede explicar mediante el siguiente diagrama de flujo:
mientras que el siguiente pseudocódigo explica nuestro algoritmo GCA:
Nuestro nuevo entrenamiento adversario de un extremo a otro se puede explicar mediante el siguiente modelo de Keras (implementado en el archivo train_bot_GAN.py), que está compuesto por el generador y el discriminador. Los bloques amarillos pertenecen al GCA (el generador), mientras que los bloques verdes pertenecen al discriminador. Los bloques blancos se comparten entre generador y discriminador:
mientras que el siguiente pseudocódigo explica el nuevo algoritmo (consulte el artículo para conocer la definición de las variables):
Para charlar con los modelos previamente entrenados:
Para evaluar líneas de diálogo utilizando el discriminador previamente entrenado:
Para entrenar de un extremo a otro utilizando el nuevo método adversarial:
Si desea comenzar el entrenamiento adversario desde cero, haga que el archivo de peso my_model_weights.h5 (preentrenado con el nuevo método adversarial) sea igual a my_model_weights20.h5 (preentrenado por el profesor forzado) y ejecute train_script.py.