Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import ( | |
pipeline, | |
AutoModelForSequenceClassification, | |
AutoTokenizer | |
) | |
import torch | |
import numpy as np | |
# Configurar el dispositivo | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
# === CONFIGURACIÓN DEL CHATBOT === | |
chat_generator = pipeline( | |
'text-generation', | |
model='microsoft/DialoGPT-small', | |
device=device | |
) | |
# === CONFIGURACIÓN DEL ANALIZADOR DE SENTIMIENTOS === | |
model_name = "nlptown/bert-base-multilingual-uncased-sentiment" | |
sentiment_tokenizer = AutoTokenizer.from_pretrained(model_name) | |
sentiment_model = AutoModelForSequenceClassification.from_pretrained(model_name) | |
sentiment_model.to(device) | |
def chatbot(mensaje): | |
if not mensaje.strip(): | |
return "Por favor, escribe un mensaje.", None, None | |
try: | |
# Generar respuesta del chatbot | |
respuesta = chat_generator( | |
mensaje, | |
max_length=100, | |
temperature=0.7, | |
do_sample=True, | |
top_p=0.95, | |
num_return_sequences=1 | |
)[0]['generated_text'] | |
respuesta = respuesta.replace(mensaje, "").strip() | |
# Analizar sentimiento del mensaje del usuario | |
inputs = sentiment_tokenizer(mensaje, return_tensors="pt", truncation=True, | |
max_length=512, padding=True) | |
inputs = {k: v.to(device) for k, v in inputs.items()} | |
outputs = sentiment_model(**inputs) | |
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) | |
rating = torch.argmax(predictions).item() + 1 | |
confidence = predictions[0][rating-1].item() | |
if rating <= 2: | |
sentimiento = "Muy Negativo" | |
elif rating == 3: | |
sentimiento = "Neutral" | |
elif rating == 4: | |
sentimiento = "Positivo" | |
else: | |
sentimiento = "Muy Positivo" | |
sentimiento_completo = f"{sentimiento} ({rating} estrellas)" | |
confianza = round(confidence * 100, 2) | |
return respuesta, sentimiento_completo, confianza | |
except Exception as e: | |
return f"Error: {str(e)}", "Error en el análisis", 0.0 | |
# Crear la interfaz | |
demo = gr.Interface( | |
fn=chatbot, | |
inputs=[ | |
gr.Textbox( | |
placeholder="Escribe tu mensaje...", | |
label="Mensaje", | |
lines=3 | |
) | |
], | |
outputs=[ | |
gr.Textbox(label="Respuesta del Chatbot"), | |
gr.Label(label="Sentimiento de tu mensaje"), | |
gr.Number(label="Confianza del análisis (%)") | |
], | |
title="Chatbot con Análisis de Sentimientos", | |
description="Un chatbot que responde a tus mensajes y analiza el sentimiento de lo que escribes", | |
examples=[ | |
["¡Estoy muy feliz hoy!"], | |
["No me gusta nada este servicio, es terrible."], | |
["El día está normal, nada especial que contar."], | |
["¡Me encanta hablar contigo!"], | |
["Estoy un poco decepcionado con los resultados."] | |
], | |
allow_flagging="never", | |
cache_examples=True | |
) | |
# Lanzar la interfaz | |
demo.launch(share=True, debug=True) |