Spaces:
Sleeping
Sleeping
File size: 6,042 Bytes
995cf05 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import gradio as gr
from transformers import pipeline
import logging
# Configurar logging para ver información de Transformers (opcional, pero útil para depuración)
logging.basicConfig(level=logging.INFO)
# --- Funciones para las Pipelines de Transformers ---
def sentiment_analysis(text):
try:
classifier = pipeline("sentiment-analysis")
result = classifier(text)
return result
except Exception as e:
return str(e)
def text_generation(prompt, max_length=50):
try:
generator = pipeline("text-generation")
result = generator(prompt, max_length=int(max_length), num_return_sequences=1)
return result[0]['generated_text'] if result else "No text generated."
except Exception as e:
return str(e)
def zero_shot_classification(text, candidate_labels_str):
try:
candidate_labels = [label.strip() for label in candidate_labels_str.split(',')]
if not candidate_labels or all(not label for label in candidate_labels):
return "Por favor, ingresa etiquetas candidatas válidas separadas por comas."
classifier = pipeline("zero-shot-classification")
result = classifier(text, candidate_labels=candidate_labels)
return result
except Exception as e:
return str(e)
def fill_mask(text_with_mask, top_k=2):
try:
unmasker = pipeline("fill-mask")
result = unmasker(text_with_mask, top_k=int(top_k))
return result
except Exception as e:
return str(e)
def named_entity_recognition(text):
try:
ner_pipeline = pipeline("ner", grouped_entities=True)
result = ner_pipeline(text)
return result
except Exception as e:
return str(e)
def summarization(text, min_length=30, max_length=130):
try:
summarizer = pipeline("summarization")
result = summarizer(text, min_length=int(min_length), max_length=int(max_length), do_sample=False)
return result[0]['summary_text'] if result else "No summary generated."
except Exception as e:
return str(e)
def translation_fr_en(text):
try:
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
result = translator(text)
return result[0]['translation_text'] if result else "No translation."
except Exception as e:
return str(e)
# --- Creación de la Interfaz Gradio ---
with gr.Blocks(title="Demo de Transformers con Gradio") as demo:
gr.Markdown("# Prueba varios modelos de Hugging Face Transformers")
gr.Markdown("Recuerda: La primera vez que ejecutes una tarea, el modelo se descargará y puede tardar.")
with gr.Tabs():
with gr.TabItem("Análisis de Sentimiento"):
with gr.Row():
sa_input = gr.Textbox(label="Ingresa texto para análisis de sentimiento")
sa_button = gr.Button("Analizar Sentimiento")
sa_output = gr.JSON(label="Resultado del Análisis")
sa_button.click(sentiment_analysis, inputs=sa_input, outputs=sa_output)
with gr.TabItem("Generación de Texto"):
with gr.Row():
tg_input_prompt = gr.Textbox(label="Ingresa un prompt para iniciar la generación")
tg_max_length = gr.Number(label="Longitud Máxima", value=50)
tg_button = gr.Button("Generar Texto")
tg_output = gr.Textbox(label="Texto Generado", lines=5)
tg_button.click(text_generation, inputs=[tg_input_prompt, tg_max_length], outputs=tg_output)
with gr.TabItem("Clasificación Zero-Shot"):
with gr.Row():
zsc_input_text = gr.Textbox(label="Texto a clasificar")
zsc_input_labels = gr.Textbox(label="Etiquetas candidatas (separadas por comas)", placeholder="ej: educación, política, negocios")
zsc_button = gr.Button("Clasificar (Zero-Shot)")
zsc_output = gr.JSON(label="Resultado de la Clasificación")
zsc_button.click(zero_shot_classification, inputs=[zsc_input_text, zsc_input_labels], outputs=zsc_output)
with gr.TabItem("Rellenar Máscara (Fill-Mask)"):
with gr.Row():
fm_input_text = gr.Textbox(label="Texto con <mask> para rellenar", placeholder="This course will teach you all about <mask> models.")
fm_top_k = gr.Number(label="Top K resultados", value=2)
fm_button = gr.Button("Rellenar Máscara")
fm_output = gr.JSON(label="Posibles Rellenos")
fm_button.click(fill_mask, inputs=[fm_input_text, fm_top_k], outputs=fm_output)
with gr.TabItem("Reconocimiento de Entidades Nombradas (NER)"):
ner_input = gr.Textbox(label="Texto para NER")
ner_button = gr.Button("Reconocer Entidades")
ner_output = gr.JSON(label="Entidades Reconocidas")
ner_button.click(named_entity_recognition, inputs=ner_input, outputs=ner_output)
with gr.TabItem("Resumen de Texto (Summarization)"):
with gr.Row():
summ_input_text = gr.TextArea(label="Texto largo para resumir", lines=7)
with gr.Row():
summ_min_len = gr.Number(label="Longitud Mínima del Resumen", value=30)
summ_max_len = gr.Number(label="Longitud Máxima del Resumen", value=130)
summ_button = gr.Button("Generar Resumen")
summ_output = gr.Textbox(label="Resumen Generado", lines=5)
summ_button.click(summarization, inputs=[summ_input_text, summ_min_len, summ_max_len], outputs=summ_output)
with gr.TabItem("Traducción (Francés a Inglés)"):
tr_input_text = gr.Textbox(label="Texto en Francés para traducir a Inglés", placeholder="Ce cours est produit par Hugging Face.")
tr_button = gr.Button("Traducir")
tr_output = gr.Textbox(label="Texto Traducido (Inglés)")
tr_button.click(translation_fr_en, inputs=tr_input_text, outputs=tr_output)
if __name__ == "__main__":
demo.launch()
|