Cómo entrenar a un chatbot

10

Quería comenzar a experimentar con la red neuronal y, como problema de juguete, quería entrenar a uno para chatear, es decir, implementar un bot de chat como cleverbot. No es tan inteligente de todos modos.

Busqué documentación y encontré muchos tutoriales sobre tareas generales, pero pocos sobre este tema específico. El que encontré acaba de exponer los resultados sin dar una idea de la implementación. Los que lo hicieron, lo hicieron bastante superficialmente (la página de documentación de tensorflow en seq2seq carece de imho).

Ahora, creo haber entendido el principio más o menos, pero no estoy seguro y ni siquiera estoy seguro de cómo comenzar. Por lo tanto, explicaré cómo abordaría el problema y me gustaría recibir comentarios sobre esta solución, que me diga dónde me equivoco y posiblemente tenga algún vínculo con explicaciones detalladas y conocimientos prácticos sobre el proceso.

  1. El conjunto de datos que usaré para la tarea es el volcado de todo mi historial de chat de Facebook y WhatsApp. No sé qué tan grande será, pero posiblemente aún no lo suficientemente grande. El idioma de destino no es el inglés, por lo tanto, no sé dónde reunir rápidamente muestras de conversación significativas.

  2. Voy a generar un vector de pensamiento de cada oración. Todavía no sé cómo; Encontré un buen ejemplo para word2vec en el sitio web deeplearning4j, pero ninguno para oraciones. Comprendí cómo se construyen los vectores de palabras y por qué, pero no pude encontrar una explicación exhaustiva para los vectores de oraciones.

  3. Usando vectores de pensamiento como entrada y salida, voy a entrenar la red neuronal. No sé cuántas capas debería tener, y cuáles tienen que ser capas lstm.

  4. Entonces debería haber otra red neuronal que sea capaz de transformar un vector de pensamiento en una secuencia de caracteres que componga una oración. Leí que debería usar relleno para compensar diferentes longitudes de oración, pero extraño cómo codificar caracteres (¿son suficientes los puntos de código?).

Tótem
fuente

Respuestas:

7

Recomendaría comenzar leyendo este blog . Probablemente pueda canibalizar el código para crear un RNN que tome una declaración de un diálogo y luego proceda a generar la respuesta a esa declaración.

Esa sería la versión fácil de su proyecto, todo sin vectores de palabras y vectores de pensamiento. Solo está ingresando caracteres, por lo que los errores tipográficos no deben preocuparle.

El siguiente paso más complejo sería ingresar vectores de palabras en lugar de caracteres. Eso le permitiría generalizar a palabras que no son parte de sus datos de entrenamiento. Y probablemente todavía sea solo una modificación menor del código.

Si insiste en usar vectores de pensamiento, debe comenzar a leer sobre la traducción NN . Y probablemente intente obtener una red de codificadores previamente capacitada. O pre-capacítelo usted mismo en un corpus de traducción grande para su idioma.

Con su pequeño conjunto de entrenamiento, lo mejor que puede hacer es probablemente un sobreajuste masivo hasta que su sistema recrea sus datos de entrenamiento al pie de la letra. El uso de vectores de palabras permitirá que su sistema dé la misma respuesta a "Hoy le gané al gato". como dijiste en los datos de entrenamiento para "Pateé al perro ayer".

No estoy seguro de que los vectores de pensamiento hagan una gran diferencia. Si consigues que el decodificador aprenda.

BlindKungFuMaster
fuente
Ya leí el primer artículo hace algún tiempo y siento que los personajes no tienen el nivel correcto de abstracción. No pensé en usar los vectores de palabras de uno en uno, pero supongo que también es una forma interesante y menos compleja. Leeré el periódico, que probablemente es lo que buscaba ...
Tótem
Encontré un núcleo de bot para usar ... Pero estoy atascado en la generación de texto. ai.stackexchange.com/questions/5963/… Lo que me pregunto es que a pesar de los vectores y la tasa de aprendizaje, todavía no funciona como debería ... Me preocupa que esto pueda ser una deficiencia de la Biblioteca que soy usando, pero no creo que eso sea posible para un tamaño de capa de 300 ... ¿O la cantidad de capacitación requerida está relacionada con el tamaño de la capa? Cualquier ayuda sería apreciada. Tenga en cuenta la biblioteca que se está utilizando.
FreezePhoenix
0

De acuerdo con el concepto de su proyecto, para empezar, le pediría que aplique algunas técnicas de desarrollo basadas en pruebas. Primero, intente crear una base de datos de menor tamaño que pueda usar para manejar una pequeña cantidad de conjunto de datos, lo que puede proporcionar la mejora deseada.

Dicho esto, use esa base de datos para crear un árbol organizado en línea con sus datos, como nodos. Por lo tanto, si un bot comienza a generar comentarios, desde la base de datos, marcados con puntos de datos de su conjunto de datos especificado. al siguiente nodo en el árbol.

nota : para empezar, no use su gran historial de chat como un todo, porque esta es una tarea simple ... es decir, demasiadas entradas == Sobreajuste.

quintumnia
fuente