Botclasificador / app.py
CamiloVega's picture
Create app.py
4f6c2c4 verified
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)