Actualmente estoy trabajando como desarrollador de Machine Learning en Elth.ai, donde hago chatbots para heatlhcare en Python. Los chatbots, hoy en día, son bastante fáciles de construir con API como API-AI, Wit.ai, etc. Proporcionan el motor NLP para sus chatbots. Pero, si desea hacer un chatbot sin ninguna API externa, puede llevarle mucho tiempo (principalmente en la recopilación de datos), pero estos son los conceptos básicos para construir chatbots:
Existen principalmente dos tipos de chatbots basados en la generación de respuestas:
(i) Quién puede generar la respuesta por su cuenta. ( Modelos generativos )
(ii) Quién responde del conjunto predefinido de respuestas. ( Modelos basados en recuperación )
Hablemos primero de los modelos generativos :
Para la generación de texto, existe un modelo bien conocido en aprendizaje automático conocido como LSTM (memoria a corto plazo) RNN (red neuronal recursiva). Los modelos generativos no se basan en respuestas predefinidas. Generan nuevas respuestas desde cero. Los modelos generativos generalmente se basan en técnicas de traducción automática, pero en lugar de traducir de un idioma a otro, “traducimos” de una entrada a una salida (respuesta).
Puede entrenar un LSTM con sus datos de conversación y, basándose en las oraciones anteriores, puede generar una respuesta propia.
Puede encontrar documentos e implementaciones en python usando Theano o Tensorflow aquí
[1506.05869] Un modelo de conversación neuronal
saltypaul / Seq2Seq-Chatbot Usando el marco seq2seq de Theano
Generación de texto con redes neuronales recurrentes LSTM en Python con Keras – Dominio del aprendizaje automático con la biblioteca de Keras (Keras usa Tensorflow)
Conjunto de datos:
Cornell Movie-Dialogs Corpus (Solo para darle una idea de cómo deberían ser sus datos)
Donde como basado en recuperación son más fáciles de hacer:
Los modelos basados en la recuperación utilizan un repositorio de respuestas predefinidas y algún tipo de heurística para elegir una respuesta adecuada basada en la entrada y el contexto. La heurística podría ser tan simple como una coincidencia de expresión basada en reglas, o tan compleja como un conjunto de clasificadores de Machine Learning. Estos sistemas no generan ningún texto nuevo, simplemente seleccionan una respuesta de un conjunto fijo. Esto es más de IA basada en reglas y actualmente cada chatbot presente en línea utiliza modelos basados en recuperación, incluido Mitsuku (actualmente el mejor chatbot presente en línea). Aquí, en Elth.ai también utilizamos modelos basados en recuperación.
Aquí hay un algoritmo que puede seguir para hacer su chatbot:
(i) Clasificación
Reúna un conjunto de respuestas y divídalas en las clases que desee. Por ejemplo, en caso de banca:
Texto: “¿Cuál es la tasa de interés para el préstamo de vivienda en su banco? ”
Clase: “préstamo de vivienda”
Texto: “¿Cuál es la cantidad máxima que puedo obtener para un préstamo educativo?”
Clase: “préstamo educativo”
Texto: “Quiero abrir una cuenta en su banco. ¿Cuál es el procedimiento?”
Clase: “cuenta abierta” ……………………….
Y así..
Ahora, creo que está familiarizado con la clasificación de texto básica usando Tf-Idf o el modelo de Bolsa de palabras, por lo que no voy a detallar cómo hacer la clasificación de texto.
Qué modelo usar para la clasificación de texto depende de su conjunto de datos:
- Si el número de oraciones está entre 10 ^ 4 y 10 ^ 6, entonces elija SVM porque la complejidad de tiempo para entrenar SVM es O (n ^ 3). Por lo tanto, puede llevarle mucho tiempo entrenar sus datos si tiene un gran conjunto de datos.
- Si el número de oraciones es mayor de 10 ^ 6, entonces le sugiero que elija Neural Networks (MLP Classifier).
- Si el conjunto de datos tiene menos de 10 ^ 4 oraciones, busque el clasificador Naive Bayes o Nearest Neighbour.
(ii) Reconocimiento de entidad con nombre (NER)
Hay 2 pasos que debe seguir para hacer su conjunto de datos para NER.
- Etiquetado de parte del discurso:
El etiquetado de POS se puede hacer mediante el etiquetado basado en reglas, el etiquetado utilizando el modelo de Markov oculto y el algoritmo de Viterbi o el etiquetador de campos aleatorios condicionales. También puede usar la función pos_tag de NLTK que ya está entrenada, pero deberá descargarla usando nltk.download (). También puede usar StanfordPOSTagger preformado de NLTK. Puede descargar los archivos necesarios para Stanford POS Tagger aquí: The Stanford Natural Language Processing Group
- Trozo de texto:
En las oraciones etiquetadas necesita un fragmento de texto para definir sus propias entidades en una oración. Este es un ejemplo de muestra:
La primera línea es la oración, la segunda línea es la etiqueta POS para cada palabra en la oración y la tercera línea son las entidades fragmentadas para cada palabra. Por ejemplo, Chang-NN-Person, Washington-NNP-Location.
TENIS – CHANG, WASHINGTON ADVANCE, OTOÑO DE DOS SEMILLAS DE MUJERES
NNS: NN, NNP NNP, CD VBP VBZ NNP NN
O O PERSONA O UBICACIÓN O O O O O O O
Una vez que obtenga estos datos, puede usarlos para entrenar su NER Tagger. Para el etiquetado NER, puede utilizar el mismo algoritmo que utilizó para el etiquetado POS, es decir, el modelo de Markov oculto utilizando el algoritmo de Viterbi, el etiquetador basado en CRF, etc. Pero para el etiquetado NER no puede utilizar un modelo previamente entrenado porque necesitará su propio entidades como aquí en elth usamos especialistas y parte del día, etc., como nuestras entidades. Puede nombrar sus entidades como:
Préstamo educativo – tipo de préstamo.
(iii) Aplicación de reglas sobre la clase y las entidades que obtiene para un texto del usuario
Esta es la parte en la que puede definir sus propias reglas y respuestas, etc. El tipo de préstamo del usuario consultado.
Esa es la descripción general de cómo funcionan principalmente los chatbots. El resto depende de usted, como diseñar la memoria y mantener datos específicos del usuario, etc. Puede mantener los datos de cada usuario específico que pueden ayudarlo con conversaciones largas with
Si tiene alguna duda, no dude en enviarme un mensaje de texto 🙂