Este es un chatbot entrenado por seq2seq y aprendizaje por refuerzo .
seq2seq
Seq2seq es un modelo clásico para el aprendizaje estructurado, su entrada y salida son secuenciales.
El modelo vanilla seq2seq se describe en un artículo de NIPS '14 Sequence to Sequence Learning with Neural Networks, el codificador y el decodificador están separados.
El modelo seq2seq en este repositorio está construido con 2 LSTM, similar al descrito en un artículo de ICCV '15 Sequence to Sequence - Video to Text, el codificador y el decodificador comparten los mismos pesos.
rl
Después de entrenar al chatbot con suficientes épocas, utilizo una técnica de RL llamada gradiente de políticas para mejorar aún más el chatbot.
Al hacer esto, el chatbot puede generar respuestas más interesantes con respecto a la función de recompensa.
Mi función de recompensa es similar a la descrita en un artículo de EMNLP '16 Aprendizaje por refuerzo profundo para la generación de diálogos.
Déjame mostrarte algunos resultados de chatbot:
Resultado 1 (A y B son ambos un chatbot capacitado)
R: ¿Puedes hacerme un favor?
B: Cualquier cosa.
R: Quiero que doblegues a un padre.
B: Por supuesto.
R: Lo siento mucho, no quise ser grosero, pero.
B: No lo entiendo al menos es todo lo que puedo.
Resultado 2 (A y B son ambos un chatbot capacitado)
R: ¡Yo no lo hice! ¡No tengo un arma!
B: Mentiroso. Aún desea recuperar su dinero.
R: Algo anda mal con la verdad.
B: No quiero dinero, sólo un poco que no pueda sacar de esto.
R: ¿Qué pasa?
B: Escúchame. Tengo miedo ahora.
R: Ah, necesitarás todo el dinero. Necesito tu ayuda.
Resultado 3 (A y B son ambos chatbots capacitados)
R: Olvidé coger la Coca-Cola.
B: Tengo algo atascado en la cabeza.
R: Está bien, supongo que es bastante común en mucha mierda.
B: Quiero decir que hemos estado juntos desde que éramos niños.
R: Con mayor razón.
B: No es él, es su culpa y está ciego por culpa de Dios.
R: Y es una historia extraña.
Puedes encontrar más resultados de chatbot en este directorio.
Las configuraciones de las redes neuronales de esos resultados se describen en el nombre del archivo.
¿Te sorprende el resultado del chatbot? :D
¡Puedes generar esos increíbles diálogos por tu cuenta!
Simplemente siga las instrucciones a continuación:
instalación de pip -r requisitos.txt
./script/descargar.sh
./script/simulate.sh <RUTA AL MODELO> <TIPO DE SIMULACIÓN> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
<RUTA AL MODELO>
para generar el cuadro de diálogo seq2seq, escriba " model/Seq2Seq/model-77 "
para generar el cuadro de diálogo RL, escriba " model/RL/model-56-3000 "
<TIPO DE SIMULACIÓN>
puede ser 1 o 2
el número representa el número de frases anteriores que el chatbot considera
si eliges 1, el chatbot solo considera la última oración
si elige 2, el chatbot considerará las dos últimas oraciones (una del usuario y otra del propio chatbot)
<INGRESAR ARCHIVO>
Eche un vistazo a result/sample_input_new.txt
Este es el formato de entrada del chatbot, cada línea es la oración inicial de un diálogo.
Puede utilizar el archivo de ejemplo por conveniencia.
<ARCHIVO DE SALIDA>
el archivo de salida, escriba el nombre de archivo que desee
Si desea que el chatbot genere solo una respuesta para cada pregunta
Siga las instrucciones a continuación:
instalación de pip -r requisitos.txt
./script/descargar.sh
./script/run.sh <TIPO> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
<TIPO>
para generar la respuesta seq2seq, escriba " S2S "
para generar una respuesta de aprendizaje por refuerzo, escriba " RL "
<INGRESAR ARCHIVO>
Eche un vistazo a result/sample_input_new.txt
Este es el formato de entrada del chatbot, cada línea es la oración inicial de un diálogo.
Puede utilizar el archivo de ejemplo por conveniencia.
<ARCHIVO DE SALIDA>
el archivo de salida, escriba el nombre de archivo que desee
Entrené mi chatbot con python2.7.
Si quieres entrenar el chatbot desde cero
Puede seguir las instrucciones a continuación:
Eche un vistazo a python/config.py, aquí se describen todas las configuraciones para la capacitación.
Puedes cambiar algunos hiperparámetros de entrenamiento o simplemente conservar los originales.
Yo uso Cornell Movie-Dialogs Corpus
Debe descargarlo, descomprimirlo y mover todos los archivos *.txt al directorio data/
Luego descargue algunas bibliotecas con pip:
instalación de pip -r requisitos.txt
./script/parse.sh
./script/train.sh
Mostremos algunos resultados del modelo seq2seq :)
./script/test.sh <RUTA AL MODELO> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
¡Y muestre algunos resultados de diálogo del modelo seq2seq!
./script/simulate.sh <RUTA AL MODELO> <TIPO DE SIMULACIÓN> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
<TIPO DE SIMULACIÓN>
puede ser 1 o 2
el número representa el número de frases anteriores que el chatbot considera
Si elige 1, el chatbot solo considerará la expresión del usuario.
Si elige 2, el chatbot considerará la expresión del usuario y la última expresión del chatbot.
necesitas cambiar el parámetro train_type en python/config.py
'normal' para entrenamiento seq2seq, 'pg' para gradiente de políticas
primero debes entrenar con 'normal' durante algunas épocas hasta que se estabilice (se recomienda encarecidamente al menos 30 épocas)
luego cambie el método a 'pg' para optimizar la función de recompensa
./script/train_RL.sh
Al entrenar con gradiente de políticas (pág.)
es posible que necesites un modelo invertido
El modelo invertido también está entrenado por el conjunto de datos de diálogos de películas de Cornell, pero con el origen y el destino invertidos.
puede descargar el modelo invertido previamente entrenado por
./script/download_reversed.sh
O puedes entrenarlo tú mismo.
no necesita cambiar ninguna configuración sobre el modelo invertido si usa un modelo invertido previamente entrenado
Generemos algunos resultados del modelo RL y encontremos las diferencias con el modelo seq2seq :)
./script/test_RL.sh <RUTA AL MODELO> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
¡Y muestre algunos resultados de diálogo del modelo RL!
./script/simulate.sh <RUTA AL MODELO> <TIPO DE SIMULACIÓN> <ARCHIVO DE ENTRADA> <ARCHIVO DE SALIDA>
<TIPO DE SIMULACIÓN>
puede ser 1 o 2
el número representa el número de frases anteriores que el chatbot considera
si eliges 1, el chatbot solo considera la última oración
si elige 2, el chatbot considerará las dos últimas oraciones (una del usuario y otra del propio chatbot)
SO: CentOS Linux versión 7.3.1611 (Núcleo)
CPU: CPU Intel(R) Xeon(R) E3-1230 v3 a 3,30 GHz
GPU: GeForce GTX 1070 8GB
Memoria: 16GB DDR3
Python3 (para data_parser.py) y Python2.7 (para otros)
Po-Chih Huang / @pochih