Google+ Seguidores

viernes, 15 de junio de 2018

Creando ChatBots con ChatterBot y Python

Introducción:

Actualmente existe una gran cantidad de tecnologías para la creación de Chat Bots. Y es que a quien no le gustan los Bots? Estos pequeños software que al decirles "Hola" nos responden y nos hacen sentir como un Tony Stark creando nuestro Jarvis.

¿Que te parece si en el articulo de hoy creamos a nuestro propio Jarvis?

En el día de hoy, les mostrare un ,modulo llamado "ChatterBot", el cual es un software para la creación de Chat Bots. Todo de una manera muy sencilla. Realizaremos una ejemplos muy entretenidos y muy interesantes. 

Puedes descargar el modulo ChatterBot Ingresando Aquí
O puedes descargarlo utilizando PyPi: pip install chatterbot.

Resultado de imagen para chatbot

ChatBots con ChatterBot:

Comencemos con un ejemplo sencillo. Entrenaremos a un Bot con un serie de datos de diferentes temas (conversaciones ,deporte, comida, política, etc). Luego le hablaremos a nuestro Bot para ver su respuesta:

from chatterbot import ChatBot # Importamos la clase ChatBot

# Creamos una instancia de ChatBot para la creación de un Bot.
# Le pasamos como arcumneto el nombre que le daremos al Bot: "PythonBot"
# Y los datos que se utilizaran para entrenar al Bot
chatbot = ChatBot(
    'PythonBot',
    trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
)

# Entrenamos al Bot
chatbot.train("chatterbot.corpus.english")

# Respuesta para "Hello, how are you?"
chatbot.get_response("Hello, how are you?")

ai.yml Training: [####################] 100%
botprofile.yml Training: [####################] 100%
computers.yml Training: [####################] 100%
conversations.yml Training: [####################] 100%
emotion.yml Training: [####################] 100%
food.yml Training: [####################] 100%
gossip.yml Training: [####################] 100%
greetings.yml Training: [####################] 100%
history.yml Training: [####################] 100%
humor.yml Training: [####################] 100%
literature.yml Training: [####################] 100%
money.yml Training: [####################] 100%
movies.yml Training: [####################] 100%
politics.yml Training: [####################] 100%
psychology.yml Training: [####################] 100%
science.yml Training: [####################] 100%
sports.yml Training: [####################] 100%
trivia.yml Training: [####################] 100%
Out[1]:
<Statement text:I am doing well.>

Este es un ejemplo básico sobre una respuesta simple del Bot. Como pueden observar, lo primero que hara el script sera entrenar al Bot con cada uno de los temas. Luego le decimos algo al Bot: "Hello, how are you?" - "Hola, como estas?". Por lo que este a respondió: "I am doing well." - "Estoy bien" 
Y con esto ya hemos creado a nuestro primer Bot. Todo esto de manera muy sencilla con ChatterBot.

¿Que pasa se le hablamos sobre un tema en especifico? Podemos probarlo. Lo que haré sera mencionar la palabra "Dollar" y veremos que sucede.

chatbot.get_response("Dollar")

<Statement text:you can't buy much for a dollar anymore.>

Como pueden observar, la respuesta fue: "You can´t buy much a dollar anymore" - "Ya no puedes comprar mucho por un dolar". Es increíble, ¿No es así?.
Prueba con tus propios temas.

Muy bien, es hora de convertir nuestro Bot hablador, en algo más funcional. Lo que haremos sera crear un Jarvis pueda realizar operaciones arimeticas y que nos pueda dar la hora:

from chatterbot import ChatBot

# Creamos a jarvis y definimos sus caracteristicas
bot = ChatBot(
    "jarvis",
    logic_adapters=[ # Importamos los adaptadores
        "chatterbot.logic.MathematicalEvaluation",
        "chatterbot.logic.TimeLogicAdapter"
    ],
    input_adapter="chatterbot.input.VariableInputTypeAdapter",
    output_adapter="chatterbot.output.OutputAdapter"
)

# Le preguntamos a Jarvis cuanto es 30 * 4
response = bot.get_response("What is 30 * 4?")
print(response) # mostramos la respuesta de Jarvis

# Le preguntamos a jarvis ¿que hora es?
response = bot.get_response("What time is it?")
print(response) # Mostramos la respuesta de jarvis

30 * 4 = 120
The current time is 08:45 PM

Como pueden observar, el resultado es satisfactorio. Recuerden que pueden utilizar cualquier operación aritméticas con el bot (+, -, *, /).


Muy bien, hasta ahora lo hemos hecho bien. ¿Que pasa sí queremos re-programar las repuestas de jarvis? Para ello existe un adaptador que nos permite darle respuestas especificas al bot:

from chatterbot import ChatBot

# Creamos una instancia de jarvis
bot = ChatBot(
    'jarvis',
    storage_adapter='chatterbot.storage.SQLStorageAdapter', # Importamos el adaptador de almacenamiento
    logic_adapters=[
        {
            'import_path': 'chatterbot.logic.BestMatch' # importaos el adaptador para las respuestas
        },
        {
            'import_path': 'chatterbot.logic.SpecificResponseAdapter', # Adaptador para respuestas especificas
            'input_text': 'Quien eres?', # Entrada del usuario
            'output_text': 'Mi nombre es Jarvis, estoy para servirle' # Respuesta de jarvis
        }
    ],
    trainer='chatterbot.trainers.ListTrainer' # Entrenamos al bot
)

# Preguntamos al Bot ¿Quien eres?
response = bot.get_response('Quien eres?')
print(response) # Mostramos la respuesta

Mi nombre es Jarvis, estoy para servirle

Y como resultado, obtenemos la respuesta que nosotros mismos hemos especificado.


Este modulo esta para que lo uses de la manera que tu quieras, creer los bots que quieras, como quieras.

¿Alguna duda? No olvides dejar tu comentario.

Puedes descargar un buen PDF con información acerca del Procesamiento del Lenguaje Natural Ingresando Aquí.

Descarga todos los ejemplos mostrados en este articulo Ingresando Aquí.

Recuerda que en nuestro blog puedes encontrar mucha información util sobre Pyhton. Puedes Aprender Python de manera cómoda, aquí, en Mi Diario Python.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

3 comentarios :
Write comentarios
  1. Hola Luis, gracias por tus explicaciones. Consulta, le estoy editando los "corpus" en español. Lo entreno, pero me sigue trayendo respuestas viejas como "hace calor?" cuando le pregunto el nombre...esta respuesta ya no está en los archivos yml...como reseteo lo que sabe el bot? Como para empezar desde cero.

    Muchas gracias!!!

    ResponderEliminar
    Respuestas
    1. hola,tuve un problema similar. Tendrias que volver a entrenar el chatbot, y pues las preguntas y respuestas se tendria que resetear. Espero poder ayudarte.

      Eliminar
  2. Hola me manda error de librería de chatterbot

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .