Creación de un chatbot usando Python y la librería (NLP) NLTK

En este tutorial aprenderás cómo construir un chatbot utilizando Python y la librería Natural Language Processing Toolkit (NLTK). Un chatbot es un programa que puede comunicarse con los usuarios y responder a sus preguntas de manera automática. En este caso, utilizaremos NLTK para procesar el lenguaje natural y comprender las preguntas y respuestas del usuario.

Instalación de Python y NLTK

Para comenzar, debemos instalar Python y NLTK. Python es un lenguaje de programación de código abierto y multiplataforma que se utiliza ampliamente para el desarrollo de aplicaciones y herramientas. NLTK es una librería de procesamiento de lenguaje natural que proporciona una amplia variedad de herramientas para el análisis y la comprensión del lenguaje natural.

Instalación de Python

Para instalar Python, visite el sitio web oficial de Python y descargue la última versión estable. Siga las instrucciones de instalación para su sistema operativo específico. Una vez instalado Python, puede verificar si está correctamente instalado ejecutando el siguiente comando en la línea de comandos:

$ python --version

Instalación de NLTK

Para instalar NLTK, puede utilizar el administrador de paquetes de Python, pip. Ejecute el siguiente comando en la línea de comandos:

$ pip install nltk

Una vez instalado NLTK, debe descargar los datos necesarios para su uso. Ejecute el siguiente comando en la línea de comandos:

$ python
>>> import nltk
>>> nltk.download()

Esto abrirá una ventana de descarga de NLTK. Seleccione los paquetes que desea descargar y haga clic en el botón "Descargar".

Preprocesamiento de texto

Antes de que podamos comenzar a construir nuestro chatbot, debemos preprocesar el texto que se utilizará para entrenar nuestro modelo. El preprocesamiento de texto implica la limpieza y el formateo del texto para que pueda ser utilizado para el análisis de lenguaje natural.

Limpieza de texto

La limpieza de texto implica la eliminación de caracteres no deseados, como signos de puntuación y caracteres especiales. También podemos convertir todas las letras a minúsculas para evitar problemas de capitalización. Podemos utilizar expresiones regulares para realizar estas tareas. Aquí hay un ejemplo de una función que realiza la limpieza de texto:

import re

def limpiar_texto(texto):
    texto = texto.lower()
    texto = re.sub(r'\W+', ' ', texto)
    texto = re.sub(r'\s+', ' ', texto)
    return texto

Tokenización

La tokenización implica la separación del texto en palabras o tokens individuales. Podemos utilizar la función word_tokenize de NLTK para realizar la tokenización. Aquí hay un ejemplo de cómo utilizar la función:

from nltk.tokenize import word_tokenize

texto = "Hola, ¿cómo estás?"
tokens = word_tokenize(texto)

print(tokens)

Esto producirá la siguiente salida:

['Hola', ',', '¿', 'cómo', 'estás', '?']

Eliminación de palabras vacías

Las palabras vacías son palabras comunes que no aportan significado al texto, como "el", "la", "de", etc. Podemos eliminar estas palabras vacías utilizando la lista de palabras vacías proporcionada por NLTK. Aquí hay un ejemplo de cómo utilizar la lista de palabras vacías:

from nltk.corpus import stopwords

palabras_vacias = set(stopwords.words('spanish'))

texto = "Hola, ¿cómo estás?"
tokens = word_tokenize(texto)

tokens_sin_vacias = [token for token in tokens if token.lower() not in palabras_vacias]

print(tokens_sin_vacias)

Esto producirá la siguiente salida:

['Hola', ',', 'estás', '?']

Entrenamiento del modelo

Antes de que podamos comenzar a construir nuestro chatbot, debemos entrenar nuestro modelo utilizando algún tipo de algoritmo de aprendizaje automático. En este caso, utilizaremos el algoritmo de clasificación Naive Bayes, que es un algoritmo de aprendizaje supervisado.

Representación del texto

Para poder utilizar el algoritmo Naive Bayes, debemos representar nuestro texto en una forma numérica que pueda ser utilizada por el algoritmo. Podemos hacer esto utilizando una matriz de términos de documentos (DTM). En una DTM, las filas representan los documentos y las columnas representan las palabras individuales en el corpus. Cada celda de la matriz representa la frecuencia de esa palabra en ese documento en particular.

NLTK proporciona una clase CountVectorizer que puede ser utilizada para crear una DTM. Aquí hay un ejemplo de cómo utilizar CountVectorizer:

from sklearn.feature_extraction.text import CountVectorizer

corpus = ['Hola, ¿cómo estás?', 'Estoy bien, ¿y tú?', 'Muy bien, gracias.']

vectorizer = CountVectorizer()
dtm = vectorizer.fit_transform(corpus)

print(dtm.toarray())

Esto producirá la siguiente salida:

[[1 1 0 1 0]
 [0 1 1 0 1]
 [0 0 1 0 1]]

Entrenamiento del modelo

Con la DTM creada, podemos entrenar nuestro modelo utilizando el algoritmo Naive Bayes. NLTK proporciona una clase NaiveBayesClassifier que puede ser utilizada para entrenar nuestro modelo. Aquí hay un ejemplo de cómo entrenar el modelo:

from nltk import NaiveBayesClassifier

entrenamiento = [('Hola', 'saludo'),
                 ('¿cómo estás?', 'pregunta'),
                 ('Estoy bien', 'respuesta'),
                 ('¿y tú?', 'pregunta'),
                 ('Muy bien, gracias', 'respuesta')]

vectorizer = CountVectorizer()
dtm_entrenamiento = vectorizer.fit_transform([x[0] for x in entrenamiento])

modelo = NaiveBayesClassifier.train(zip(dtm_entrenamiento.toarray(), [x[1] for x in entrenamiento]))

Interacción con el usuario

Con nuestro modelo entrenado, podemos comenzar a interactuar con el usuario y responder a sus preguntas. Podemos hacer esto utilizando un ciclo while que continuará preguntando al usuario hasta que decida salir del programa. Aquí hay un ejemplo de cómo interactuar con el usuario:

while True:
    entrada = input('Usuario: ')

    if entrada == 'salir':
        break

    tokens_entrada = word_tokenize(limpiar_texto(entrada))
    tokens_entrada_sin_vacias = [token for token in tokens_entrada if token.lower() not in palabras_vacias]

    dtm_entrada = vectorizer.transform([' '.join(tokens_entrada_sin_vacias)])
    clasificacion = modelo.classify(dtm_entrada.toarray()[0])

    print('Chatbot: ' + clasificacion)

Este código preguntará al usuario por su entrada y la procesará utilizando las funciones de preprocesamiento de texto que creamos anteriormente. Luego, utilizará nuestro modelo para clasificar la entrada del usuario en una de las categorías de entrenamiento (saludo, pregunta, respuesta). Finalmente, imprimirá la clasificación en la consola.

 

En este tutorial, aprendimos cómo construir un chatbot utilizando Python y la librería NLTK. Primero, instalamos Python y NLTK. Luego, preprocesamos el texto utilizando técnicas de limpieza, tokenización y eliminación de palabras vacías. Después, entrenamos nuestro modelo utilizando el algoritmo Naive Bayes y una DTM. Finalmente, interactuamos con el usuario y utilizamos nuestro modelo para clasificar las entradas del usuario.

No te pierdas los últimos artículos:

Web Scraping con Python y BeautifulSoup para Principiantes

Web Scraping con Python y BeautifulSoup para Principiantes

Bienvenido a esta guía sobre Web Scraping con Python y BeautifulSoup, diseñada especialmente para principiantes. Si estás buscando aprender a extraer datos de sitios web de manera eficiente, seguro que ...
Curso de Python Básico Gratis

Curso de Python Básico Gratis

Módulo 1: Introducción a Python Nuestra meta principal es que, al final de este curso, tengas una sólida comprensión de los fundamentos de Python y estés listo para crear tus ...
Sistemas Expertos: ¿Qué son y para qué sirven?

Sistemas Expertos: ¿Qué son y para qué sirven?

Los sistemas expertos representan una rama fascinante de la inteligencia artificial, diseñada para emular la toma de decisiones de un humano experto en un campo particular. Estas herramientas avanzadas combinan ...
La Historia de la Inteligencia Artificial contada en Años

La Historia de la Inteligencia Artificial contada en Años

¿Cómo comenzó todo? Echemos un ojo a la historia de la IA a lo largo del tiempo. Desde 1950 hasta 2024. El artículo es largo, usa la tabla de contenidos ...
¿Qué es el meta-aprendizaje?

¿Qué es el meta-aprendizaje?

El mundo de la Inteligencia Artificial (IA) está en constante evolución, y una de las áreas más intrigantes y prometedoras es el metaaprendizaje. Pero, ¿qué es exactamente el metaaprendizaje y ...