Spaces:
Sleeping
Sleeping
# Para Spaces de Hugging Face, la app principal debe llamarse app.py | |
# Este archivo es una copia de ejemplo_2_.py | |
import streamlit as st | |
from transformers import ( | |
AutoTokenizer, | |
AutoModelForSeq2SeqLM, | |
AutoModelForSequenceClassification, | |
pipeline | |
) | |
import torch | |
st.set_page_config(page_title="SLM Demo: QA + Sentiment", page_icon="🧠") | |
st.title("🧠 Small Language Models Demo") | |
st.markdown(""" | |
Esta app compara tres Small Language Models: | |
- `flan-t5-small` para responder preguntas. | |
- `distilBERT` para análisis de sentimiento. | |
- `distilBERT` fine-tuned para análisis de sentimiento. | |
""") | |
# Cargar modelos y tokenizers | |
def load_models(): | |
# FLAN-T5 para QA | |
flan_name = "google/flan-t5-small" | |
flan_tokenizer = AutoTokenizer.from_pretrained(flan_name) | |
flan_model = AutoModelForSeq2SeqLM.from_pretrained(flan_name) | |
# DistilBERT para clasificación (modelo base) | |
distil_name = "distilbert-base-uncased-finetuned-sst-2-english" | |
sentiment_analyzer = pipeline("sentiment-analysis", model=distil_name) | |
# DistilBERT fine-tuned propio | |
custom_name = "juancmamacias/jd-jcms" | |
custom_analyzer = pipeline("sentiment-analysis", model=custom_name) | |
return flan_tokenizer, flan_model, sentiment_analyzer, custom_analyzer | |
flan_tokenizer, flan_model, sentiment_analyzer, custom_analyzer = load_models() | |
# Historial de preguntas | |
if "history" not in st.session_state: | |
st.session_state.history = [] | |
# Entrada del usuario | |
question = st.text_input("💬 Escribe una pregunta o frase para analizar:") | |
if st.button("Procesar") and question: | |
with st.spinner("Procesando..."): | |
# ➤ Respuesta con FLAN-T5 | |
input_ids = flan_tokenizer(question, return_tensors="pt").input_ids | |
outputs = flan_model.generate(input_ids, max_length=50) | |
flan_answer = flan_tokenizer.decode(outputs[0], skip_special_tokens=True) | |
# ➤ Clasificación con DistilBERT base | |
sentiment = sentiment_analyzer(question)[0] | |
sentiment_label = sentiment['label'] | |
sentiment_score = round(sentiment['score'], 3) | |
# ➤ Clasificación con DistilBERT fine-tuned propio | |
custom_sentiment = custom_analyzer(question)[0] | |
custom_label = custom_sentiment['label'] | |
custom_score = round(custom_sentiment['score'], 3) | |
# Guardar en historial | |
st.session_state.history.append({ | |
"question": question, | |
"answer": flan_answer, | |
"sentiment": f"{sentiment_label} ({sentiment_score})", | |
"custom_sentiment": f"{custom_label} ({custom_score})" | |
}) | |
# Mostrar historial | |
if st.session_state.history: | |
st.markdown("### 📜 Historial") | |
for i, item in enumerate(reversed(st.session_state.history), 1): | |
st.markdown(f""" | |
**{i}. Entrada:** {item['question']} | |
🧠 **Respuesta (FLAN):** {item['answer']} | |
❤️ **Sentimiento (base):** {item['sentiment']} | |
💙 **Sentimiento (propio):** {item['custom_sentiment']} | |
---""") | |