0% encontró este documento útil (0 votos)
16 vistas4 páginas

Explicacion Chatbor

El documento describe la creación de un chatbot en Python utilizando la biblioteca NLTK y el modelo TF-IDF para evaluar la similitud entre las entradas del usuario y un conjunto de preguntas predefinidas. Incluye funciones para preprocesar texto, evaluar similitud y obtener respuestas basadas en un umbral de similitud. El código permite una interacción continua con el usuario, proporcionando respuestas o indicando falta de comprensión según la similitud encontrada.

Cargado por

Jorfel Adonay
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas4 páginas

Explicacion Chatbor

El documento describe la creación de un chatbot en Python utilizando la biblioteca NLTK y el modelo TF-IDF para evaluar la similitud entre las entradas del usuario y un conjunto de preguntas predefinidas. Incluye funciones para preprocesar texto, evaluar similitud y obtener respuestas basadas en un umbral de similitud. El código permite una interacción continua con el usuario, proporcionando respuestas o indicando falta de comprensión según la similitud encontrada.

Cargado por

Jorfel Adonay
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

.

Preparación y Descarga de Recursos


Python

import nltk
nltk.download('punkt_tab')

corpus = {
"Hola": "Hola, ¿cómo estás?",
"¿Cuál es tu nombre?": "Me llamo Responsibile Bias.",
"¿Qué puedes hacer?": "Puedo responder preguntas simples y mantener una
conversación básica.",
"Adiós": "¡Hasta luego!"
}

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import string
from nltk.chat.util import Chat, reflections

nltk.download('punkt')
nltk.download('stopwords')
import nltk: Importa la biblioteca nltk (Natural Language Toolkit), esencial para
el procesamiento de lenguaje natural.

nltk.download('punkt_tab'): Descarga un modelo específico de NLTK (punkt_tab), que


ayuda a la tokenización de texto (dividirlo en palabras u oraciones).

corpus = {...}: Define el conocimiento base del chatbot. Es un diccionario donde


las claves son las preguntas que el bot "conoce" (las que puede reconocer) y los
valores son las respuestas asociadas.

Las siguientes líneas (import nltk, from nltk.tokenize..., nltk.download('punkt'),


nltk.download('stopwords')) son importaciones y descargas duplicadas. Las librerías
y modelos se pueden importar/descargar solo una vez.

word_tokenize: Se usará para dividir texto en palabras.

stopwords: Contiene listas de palabras comunes (como "el", "la") que a menudo se
ignoran.

string: Proporciona acceso a constantes de cadenas, como la puntuación.

Chat, reflections: Son partes de NLTK para crear chatbots más tradicionales basados
en reglas, pero en este código no se usan realmente estas clases de nltk.chat.util.

2. Función de Preprocesamiento de Texto


Python

def preprocesar_texto(texto):
tokens = word_tokenize(texto.lower())
tokens = [t for t in tokens if t not in string.punctuation]
tokens = [t for t in tokens if t not in stopwords.words('spanish')]
return tokens
def preprocesar_texto(texto):: Define una función para limpiar el texto (tanto las
preguntas del corpus como las entradas del usuario).

tokens = word_tokenize(texto.lower()): Convierte el texto a minúsculas y lo divide


en palabras individuales (tokens).
tokens = [t for t in tokens if t not in string.punctuation]: Elimina los signos de
puntuación de la lista de tokens.

tokens = [t for t in tokens if t not in stopwords.words('spanish')]: Elimina las


"stop words" en español (palabras muy comunes que no suelen aportar mucho
significado) de la lista de tokens.

return tokens: Devuelve la lista de palabras limpias.

3. Función para Evaluar Similitud


Python

from sklearn.feature_extraction.text import TfidfVectorizer


from sklearn.metrics.pairwise import cosine_similarity

def evaluar_similitud(entrada, corpus):


corpus_keys = list(corpus.keys())
vectorizer = TfidfVectorizer(tokenizer=preprocesar_texto)
tfidf_matrix = vectorizer.fit_transform(corpus_keys + [entrada])
similitudes = cosine_similarity(tfidf_matrix[-1], tfidf_matrix[:-1])
indice_max_similitud = similitudes.argmax()
return corpus_keys[indice_max_similitud], similitudes[0, indice_max_similitud]
from sklearn.feature_extraction.text import TfidfVectorizer: Importa
TfidfVectorizer de scikit-learn. Esta herramienta convierte texto en vectores
numéricos basándose en la importancia de las palabras (TF-IDF).

from sklearn.metrics.pairwise import cosine_similarity: Importa cosine_similarity,


que calcula la similitud del coseno entre dos vectores. Una similitud de coseno
alta (cercana a 1) indica que los vectores son muy parecidos.

def evaluar_similitud(entrada, corpus):: Define una función que compara la entrada


del usuario con las preguntas del corpus.

corpus_keys = list(corpus.keys()): Obtiene una lista de todas las preguntas


conocidas del chatbot.

vectorizer = TfidfVectorizer(tokenizer=preprocesar_texto): Crea una instancia de


TfidfVectorizer. Le indica que use la función preprocesar_texto para procesar el
texto antes de crear los vectores TF-IDF.

tfidf_matrix = vectorizer.fit_transform(corpus_keys + [entrada]):

Crea una lista que contiene todas las preguntas del corpus más la entrada del
usuario.

fit_transform: Aprende el vocabulario de estos textos y luego los convierte a su


representación numérica TF-IDF. El resultado es una matriz donde cada fila es el
vector TF-IDF de una pregunta o la entrada del usuario.

similitudes = cosine_similarity(tfidf_matrix[-1], tfidf_matrix[:-1]):

tfidf_matrix[-1]: Es el vector TF-IDF de la entrada del usuario.

tfidf_matrix[:-1]: Son los vectores TF-IDF de todas las preguntas del corpus.

Esta línea calcula la similitud del coseno entre la entrada del usuario y cada una
de las preguntas del corpus.
indice_max_similitud = similitudes.argmax(): Encuentra el índice de la pregunta del
corpus que tiene la mayor similitud con la entrada del usuario.

return corpus_keys[indice_max_similitud], similitudes[0, indice_max_similitud]:


Devuelve la pregunta del corpus más similar y el valor de esa similitud.

4. Función para Obtener Respuesta


Python

def obtener_respuesta(entrada, corpus, umbral=0.5):


pregunta, similitud = evaluar_similitud(entrada, corpus)
if similitud >= umbral:
return corpus[pregunta]
else:
return "Lo siento, no entendí eso. ¿Puedes repetirlo?"
def obtener_respuesta(entrada, corpus, umbral=0.5):: Define la función principal
para obtener una respuesta del chatbot.

pregunta, similitud = evaluar_similitud(entrada, corpus): Llama a la función


anterior para obtener la pregunta más similar y su puntuación de similitud.

if similitud >= umbral:: Comprueba si la similitud encontrada es mayor o igual a un


umbral (por defecto 0.5). Este umbral determina qué tan parecida debe ser una
pregunta para que el bot la considere "conocida".

return corpus[pregunta]: Si la similitud supera el umbral, el bot devuelve la


respuesta asociada a esa pregunta conocida desde el corpus.

else: return "Lo siento, no entendí eso. ¿Puedes repetirlo?": Si la similitud es


menor que el umbral, el bot indica que no entendió la pregunta.

5. Bucle de Interacción y Ejemplo de Uso


Python

while True:
entrada_usuario = input()
respuesta = obtener_respuesta(entrada_usuario, corpus)
print(f"respuesta: {respuesta}")

def obtener_respuesta(entrada, corpus, umbral=0.5):


pregunta, similitud = evaluar_similitud(entrada, corpus)
if similitud >= umbral:
return corpus[pregunta]
else:
return "Lo siento, no entendí eso. ¿Puedes repetirlo?"

# Ejemplo de uso
entrada_usuario = "Hola"
respuesta = obtener_respuesta(entrada_usuario, corpus)
print(respuesta)
while True:: Inicia un bucle infinito, lo que permite que el chatbot interactúe
continuamente con el usuario.

entrada_usuario = input(): Le pide al usuario que escriba su pregunta.

respuesta = obtener_respuesta(entrada_usuario, corpus): Llama a la función para


obtener la respuesta del bot.

print(f"respuesta: {respuesta}"): Imprime la respuesta del chatbot.


La segunda definición de obtener_respuesta y el "Ejemplo de uso" al final del
código son duplicados e innecesarios. La función ya se definió y se usa en el bucle
while.

En resumen, el código crea un chatbot que usa el modelo TF-IDF para medir la
similitud semántica entre lo que el usuario escribe y un conjunto de preguntas
predefinidas. Si encuentra una pregunta suficientemente parecida, da la respuesta
asociada; de lo contrario, dice que no entendió.

También podría gustarte