Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM, BertForSequenceClassification, BertTokenizer | |
| # --- MODELO DE SENTIMIENTOS --- | |
| sentiment_tokenizer = BertTokenizer.from_pretrained("VerificadoProfesional/SaBERT-Spanish-Sentiment-Analysis") | |
| sentiment_model = BertForSequenceClassification.from_pretrained("VerificadoProfesional/SaBERT-Spanish-Sentiment-Analysis") | |
| sentiment_pipeline = pipeline("sentiment-analysis", model=sentiment_model, tokenizer=sentiment_tokenizer) | |
| # --- MODELO DE REESCRITURA GPT-2 --- | |
| rewrite_tokenizer = AutoTokenizer.from_pretrained("flax-community/gpt-2-spanish") | |
| rewrite_model = AutoModelForCausalLM.from_pretrained("flax-community/gpt-2-spanish") | |
| rewrite_pipeline = pipeline("text-generation", model=rewrite_model, tokenizer=rewrite_tokenizer) | |
| # --- FUNCIÓN PRINCIPAL --- | |
| def analizar_y_reescribir(tweet, max_retries=10): | |
| sentimiento = sentiment_pipeline(tweet)[0] | |
| etiqueta = sentimiento["label"] | |
| score = sentimiento["score"] | |
| reescritura = "" | |
| if etiqueta == "Negative": | |
| for intento in range(max_retries): | |
| prompt = f"Este es el tweet: {tweet}\nEscribe una respuesta positiva y motivadora:\n" | |
| resultado = rewrite_pipeline( | |
| prompt, | |
| max_new_tokens=60, | |
| do_sample=True, | |
| temperature=0.7, | |
| top_k=50, | |
| top_p=0.9, | |
| pad_token_id=rewrite_tokenizer.eos_token_id, | |
| return_full_text=False | |
| )[0]["generated_text"] | |
| reescritura = resultado.strip().split("\n")[0] | |
| # Revisar sentimiento de la propuesta | |
| senti2 = sentiment_pipeline(reescritura)[0] | |
| if senti2["label"] == "Positive": | |
| break | |
| # Si no salió positivo, sigue al siguiente intento | |
| return f"{etiqueta} ({score:.2f})", reescritura | |
| # --- INTERFAZ GRADIO --- | |
| gr.Interface( | |
| fn=analizar_y_reescribir, | |
| inputs=gr.Textbox(label="Introduce un tweet", placeholder="Por ejemplo: Este servicio es terrible y no lo recomiendo."), | |
| outputs=[ | |
| gr.Textbox(label="Sentimiento detectado en el tweet"), | |
| gr.Textbox(label="Frase positiva o motivadora") | |
| ], | |
| title="Análisis de Tweets Negativos", | |
| ).launch() | |