AlejandraFlorezM commited on
Commit
becdb4a
·
verified ·
1 Parent(s): 236fd6a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Importar librerías necesarias
2
+ import streamlit as st
3
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
4
+ import torch
5
+ import numpy as np
6
+
7
+ # Cargar el modelo BERT preentrenado y el tokenizador
8
+ # Este modelo está entrenado para analizar sentimientos en textos breves como comentarios o frases
9
+ MODEL_NAME = "bert-base-uncased"
10
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
11
+ model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=3)
12
+
13
+ # Función para predecir el sentimiento de un texto
14
+ def predecir_sentimiento(texto):
15
+ """
16
+ Toma un texto de entrada y devuelve la clasificación del sentimiento.
17
+ Sentimientos posibles: Negativo, Neutral, Positivo.
18
+ """
19
+ # Convertir el texto en tokens utilizando el tokenizador de BERT
20
+ entradas = tokenizer(texto, return_tensors="pt", truncation=True, padding=True, max_length=128)
21
+
22
+ # Hacer la predicción sin calcular gradientes
23
+ with torch.no_grad():
24
+ salidas = model(**entradas)
25
+ # Obtener el índice de la predicción más probable
26
+ prediccion = np.argmax(salidas.logits.numpy(), axis=1)
27
+
28
+ # Etiquetas de sentimientos
29
+ etiquetas = ["Negativo", "Neutral", "Positivo"]
30
+ return etiquetas[prediccion[0]]
31
+
32
+ # Configuración de la interfaz en Streamlit
33
+ # Título y descripción de la aplicación
34
+ st.title("Análisis de Sentimientos con BERT")
35
+ st.write("Esta aplicación utiliza un modelo preentrenado de BERT para clasificar el sentimiento de un texto en **Negativo**, **Neutral** o **Positivo**.\n\nPuedes escribir cualquier comentario, pensamiento o frase y te ayudaré a entender su tono general. 😊")
36
+
37
+ # Entrada del usuario
38
+ texto_usuario = st.text_area("¿Qué te gustaría compartir hoy?", "Cuéntame cómo te sientes...")
39
+
40
+ # Botón para analizar el sentimiento
41
+ if st.button("Analizar Sentimiento"):
42
+ if texto_usuario.strip(): # Verificar que la entrada no esté vacía
43
+ # Predecir el sentimiento del texto
44
+ sentimiento = predecir_sentimiento(texto_usuario)
45
+
46
+ # Mostrar el resultado con una respuesta más empática
47
+ st.subheader(f"El sentimiento del texto es: {sentimiento}")
48
+
49
+ # Personalización de la respuesta según el sentimiento
50
+ if sentimiento == "Negativo":
51
+ st.write("Parece que no estás del todo contento con esto, y está bien no saber cómo sentirse a veces. 😊")
52
+ elif sentimiento == "Neutral":
53
+ st.write("Hmm, el tono del texto parece neutro. Si necesitas hablar más sobre esto, ¡aquí estoy para escuchar! 🤗")
54
+ elif sentimiento == "Positivo":
55
+ st.write("¡Qué bien que te sientes positivo! 🌟 Sigue disfrutando esa energía.")
56
+
57
+ # Detección de ambigüedad en el texto
58
+ if "no sé" in texto_usuario.lower() or "confundido" in texto_usuario.lower():
59
+ st.write("Parece que estás un poco indeciso, ¡y eso está bien! A veces los sentimientos son difíciles de descifrar. 😊")
60
+ else:
61
+ st.warning("Por favor ingresa un texto válido para analizar.")