Primero, necesitas entender el principio subyacente de los bots de chat. Incluso con el aprendizaje automático, no entienden realmente la conversación que tienen, sino que simplemente buscan patrones en el texto que el usuario les envía. No necesariamente necesitas aprendizaje automático para eso, volveré sobre ese punto en un momento, y de hecho, los bots de chat han existido desde los años 60, ver por ejemplo ELIZA.
¿Asique, como trabajan? El bot está programado para responder a algunos patrones. Por ejemplo, si el usuario pregunta al robot “¿Cuál es tu nombre?”, En esas palabras exactas, el robot puede devolver una respuesta predeterminada, como “Soy Sam-Bot”. Si el bot no puede encontrar un patrón en la entrada del usuario, puede devolver una respuesta predeterminada, por ejemplo, “Lo siento, no sé de qué está hablando”. Aquí hay un ejemplo de conversación que puede tener el bot si solo programa eso:
> usuario: como te llamas
> bot: soy Sam-bot
> usuario: ok, bonito nombre
> bot: Lo siento, no sé de qué estás hablando.
> usuario: no importa …
> bot: Lo siento, no sé de qué estás hablando.
> usuario: como te llamas
> bot: soy Sam-bot
> usuario: genial …
> bot: Lo siento, no sé de qué estás hablando.
* el usuario se cierra *
No es muy emocionante, ¿eh? Bueno, era de esperar ya que el bot solo sabe cómo responder a “¿Cómo te llamas?”, Por lo que tendríamos que enriquecer un poco sus habilidades de conversación. Para eso, podemos ver la segunda entrada del usuario, “ok, bonito nombre”. Está destinado a ser un cumplido, y lo sabemos por la palabra “agradable”. Así que podemos crear un nuevo patrón como “[ok,] * nice “, que se traduciría por: “una oración que comienza con ‘ok’ y tiene la palabra ‘nice’ justo después, o comienza con ‘nice’, y en ambos casos tiene otra palabra después de ‘nice’ ”. Podemos hacer que el bot responda “Gracias, estoy muy orgulloso de mi ” si escoge ese patrón, y la conversación se convertirá en:
> usuario: como te llamas
> bot: soy Sam-bot
> usuario: ok, bonito nombre
> bot: gracias, estoy muy orgulloso de mi nombre
…
Pero, ¿qué pasa si el usuario responde “ok, nombre encantador” en lugar de “ok, nombre bonito”? Esa respuesta no se cubrirá con el patrón que acabamos de agregar, por lo que el bot volverá a fallar a su respuesta predeterminada. Sin embargo, puede mejorar ese patrón para hacer que identifique otras palabras que no sean “nice”: en lugar de “[ok,] * nice “, puede tener “[ok,] * [nice | encantador | bien awesome] “y así tu bot podrá responder a” lovely name “. Puede enriquecer las habilidades de conversación de su bot añadiendo más y más patrones. También puede agregar un contador para algunas preguntas, por lo que si el usuario pregunta por segunda vez “¿Cuál es su nombre?”, El bot puede dar una respuesta diferente, “Ya le dije, es Sam-bot”, y si el usuario pregunta La misma pregunta por tercera vez, el bot puede responder “Ya te dije mi nombre dos veces, ¡ya deberías saberlo!”.
De hecho, existen lenguajes de programación que lo ayudan a hacer precisamente eso, uno de los más famosos es RiveScript (lenguaje de script de inteligencia artificial).
El problema con este enfoque es que tiene que escribir manualmente todos los patrones y, como en el ejemplo anterior de responder un cumplido, debe agregarse todos los adjetivos que se asociarían a un cumplido. Entonces, si quieres que tu bot tenga muchos patrones para responder, requerirá una gran cantidad de trabajo para hacerlo.
Ahí es donde el Aprendizaje Automático se vuelve útil, porque puede hacer esa tarea por usted. Si puede extraer una gran área de texto, un algoritmo ML puede, por ejemplo, encontrar todas las palabras que pueden asociarse con un cumplido y completar el patrón correspondiente para usted de una manera mejor de lo que lo haría manualmente. La compañía ingenio AI (Wit – landing) ha entrenado algunos algoritmos para hacer precisamente eso, pero si quieres hacerlo desde cero, te recomendaría los siguientes métodos:
Obtenga un gran corpus de texto (Wikipedia, por ejemplo), divídalo en oraciones y luego construya una matriz (enorme) de las tasas de aparición de las palabras en la misma oración. Eso le dará algún tipo de matriz de distancias entre palabras (por ejemplo, si la palabra “bonito” aparece en 1,000,000 de oraciones, la palabra “chaqueta” en 500,000 oraciones, y las palabras “bonito” y “chaqueta” aparecen juntas en 5,000) oraciones, la distancia entre las palabras “bonito” y “chaqueta” será [math] \ frac {5,000} {\ sqrt {1,000,000 \ times 500,000}} [/ math]). Podrá usar esa matriz para agrupar sus palabras usando un algoritmo de agrupamiento (análisis de agrupamiento) como K-means (k-significa agrupamiento) para tener algunos agrupamientos de palabras que corresponderán a los patrones que alimentará a su bot. .