Basado en el repositorio de código TC-Bot y en los sistemas de diálogo neuronal de finalización de tareas de un extremo a otro en papel. Este repositorio es una versión simplificada de TC-Bot, funciona con un nivel similar de precisión, aunque no es directamente comparable.
Esto muestra cómo entrenar a un agente DQN simple con aprendizaje por refuerzo profundo como un chatbot orientado a objetivos utilizando un simulador de usuario simple. El código es una versión simplificada de TC-Bot de MiuLab con la principal diferencia de que este código no incluye componentes NLG o NLU, sino que simplemente entrena al administrador de diálogo. Los componentes de NL no son necesarios para comprender cómo se entrena un chatbot GO con DRL y, por lo tanto, no se implementan.
Aquí hay un diagrama del documento para TC-Bot, y es similar al flujo de diálogo utilizado en este proyecto, aparte de los componentes LU y NLG:
Además de eliminar NL, hay cambios en las condiciones de éxito, el optimizador del agente DQN y algunos otros cambios menores. Por lo tanto, la precisión no se debe comparar directamente entre TC-Bot y este repositorio.
La base de datos es de entradas de cine, la misma base de datos que se utiliza en TC-Bot. Tanto la versión de texto como la de texto de los datos se pueden ver en el directorio de datos.
¡Puede encontrar una serie de tutoriales de 5 partes que describe y analiza este código en detalle en medium aquí!
Puedes entrenar a un agente desde cero con python train.py
.
En constantes.json puede cambiar los hiperparámetros, incluidos "save_weights_file_path" y "load_weights_file_path" (ambas rutas relativas) para guardar y cargar pesos respectivamente. Por ejemplo, para utilizar los pesos previamente entrenados en la carpeta de pesos, establezca el valor de "load_weights_file_path" en "weights/model.h5". Los pesos de los modelos keras objetivo (tar) y de comportamiento (beh) se guardan cada vez que la tasa de éxito actual alcanza un nuevo máximo.
También puedes probar un agente con python test.py
Pero asegúrese de cargar pesos configurando "load_weights_file_path" en constantes.json en una ruta relativa con comportamiento y pesos objetivo.
Todas las constantes se explican por sí mismas, excepto "vainilla" bajo agente, que significa DQN (verdadero) o Doble DQN (falso). El valor predeterminado es DQN vainilla.
Nota: Si recibe un error de deseleccionado durante el entrenamiento o la prueba, ejecute python pickle_converter.py
y eso debería solucionarlo.
Puede probar el agente ingresando sus propias acciones como usuario (en lugar de usar un sim de usuario) configurando "usersim" en ejecución en constantes.json en falso. Usted ingresa una acción y un indicador de éxito en cada paso de un episodio/conversación en la consola. El formato para la entrada de acción es: intención/espacios de información/espacios de solicitud.
Entradas de acción de ejemplo:
Además, la consola solicitará un indicador sobre si el agente tuvo éxito todavía (aparte de después de la acción inicial de un episodio). Las entradas permitidas son -1 para pérdida, 0 para ningún resultado aún, 1 para éxito.
Hiperparámetros usados de constantes.json.
Tabla de episodios (cada 2000 de 40000) por tasa máxima de éxito de un período/frecuencia del tren (cada 100 episodios) hasta ese episodio: