Como entusiasta de la programación de Python, estoy emocionado de compartir mis experiencias y conocimientos sobre la creación de un chatbot basado en reglas utilizando Python y el kit de herramientas de lenguaje natural (NLTK). En este completo tutorial, aprenderá a crear un chatbot básico desde cero, comprenderá los conceptos detrás de los sistemas basados en reglas y creará un chatbot interactivo más avanzado. Así que, toma una taza de café y ¡vamos a sumergirnos!
Antes de comenzar, asegurémonos de tener instaladas las herramientas y bibliotecas necesarias. Para hacer esto, necesitarás:
pip install nltk
.Con estos dos componentes cruciales en su lugar, ¡estamos listos para el rock and roll!
Para comenzar, importemos las bibliotecas esenciales:
import nltk
import random
import string
from nltk.corpus import stopwords
NLTK se basa en varios recursos de datos, como corpus y léxicos. Para garantizar una experiencia fluida, descargue los datos necesarios ejecutando lo siguiente:
nltk.download('punkt')
nltk.download('wordnet')
Para nuestro chatbot, necesitaremos un cuerpo de texto, un corpus, para entrenarlo. Puede seleccionar cualquier texto que desee, pero para este tutorial, usemos el libro electrónico The Project Gutenberg de Alice’s Adventures in Wonderland de Lewis Carroll. Puede descargar la versión de texto sin formato del libro o usar una cadena que contenga el texto.
Para que nuestro chatbot sea más eficiente, preprocesemos el texto eliminando la puntuación, convirtiendo el texto a minúsculas y tokenizándolo.
def preprocess(text):
text = text.lower()
text = ''.join([char for char in text if char not in string.punctuation])
tokens = nltk.word_tokenize(text)
return tokenscorpus = open("alice.txt", "r").read()
tokens = preprocess(corpus)
Para mantener nuestro chatbot enfocado, deshagámonos de esas molestas palabras vacías.
stop_words = set(stopwords.words('english'))
filtered_tokens = [w for w in tokens if not w in stop_words]
La lematización simplifica las palabras a sus formas básicas, lo que facilita la comparación y el análisis del texto. Lematicemos nuestros tokens con la ayuda de NLTK WordNetLemmatizer
.
from nltk.stem import WordNetLemmatizerlemmatizer = WordNetLemmatizer()
lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]
Para hacer que nuestro chatbot sea más interactivo, creemos una función que haga coincidir la entrada del usuario con las respuestas relevantes en nuestro corpus.
from nltk.chat.util import Chat, reflectionsdef match_input(user_input, possible_responses):
user_input = preprocess(user_input)
user_input = ' '.join(user_input)
best_match = None
max_similarity = 0
for response in possible_responses:
response_tokens = preprocess(response)
response_tokens = ' '.join(response_tokens)
similarity = nltk.jaccard_distance(set(nltk.ngrams(user_input, n=3)), set(nltk.ngrams(response_tokens, n=3)))
if similarity < max_similarity:
best_match = response
max_similarity = similarity
return best_match
Para simular una conversación, necesitaremos un conjunto de respuestas de muestra para nuestro chatbot. Siéntase libre de ser creativo aquí, pero para este tutorial, usemos los siguientes ejemplos:
sample_responses = [
"Hello! How can I help you?",
"I'm not sure about that.",
"Can you please provide more information?",
"That's interesting. Tell me more.",
"I'm sorry, I can't help with that."
]
Ahora, juntemos todo y creemos una función que tome la entrada del usuario, la procese y genere una respuesta.
def chatbot_response(user_input):
matched_response = match_input(user_input, sample_responses)
if matched_response:
return matched_response
else:
return "I'm sorry, I don't understand."user_input = input("User: ")
print("Chatbot:", chatbot_response(user_input))
Con todo en su lugar, ¡es hora de encender nuestro chatbot! Ejecute el script y disfrute de una animada conversación con su nuevo compañero digital.
while True:
user_input = input("User: ")
if user_input.lower() == "quit":
break
print("Chatbot:", chatbot_response(user_input))
¡Felicidades! Ha creado con éxito un chatbot basado en reglas con Python y NLTK. Si bien nuestro chatbot es relativamente simple, proporciona una base sólida para proyectos más avanzados. Al explorar otras técnicas de PNL e incorporar corpus más diversos, puede crear un compañero de IA verdaderamente extraordinario.
Por cierto, si está interesado en obtener más información sobre el procesamiento del lenguaje natural y los chatbots, le recomiendo que consulte Procesamiento del lenguaje natural con Python en Amazon.