File size: 3,056 Bytes
3767294
058b417
c162eaf
1fd0e40
183273b
2f92e03
35f0188
3e30ac6
2f92e03
 
 
3e30ac6
2f92e03
 
 
 
 
 
 
 
 
 
 
 
bf9ae69
b5c1947
d17bdaa
 
1681a58
 
d17bdaa
 
3e30ac6
 
 
d17bdaa
 
35f0188
bf9ae69
0745070
b2802d9
0745070
 
b5c1947
0745070
45c0de0
0745070
b5c1947
0745070
 
 
 
c73ec2c
b5c1947
02b6ab1
b5c1947
c73ec2c
 
c4b2c28
3e30ac6
45c0de0
0745070
3e30ac6
016a73d
0745070
 
 
c73ec2c
 
 
0745070
c73ec2c
 
 
10a0cf1
c73ec2c
 
 
 
 
2f92e03
 
0745070
 
 
 
79852cb
 
 
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
import streamlit as st
from transformers import pipeline
import time
import matplotlib.pyplot as plt

#######################creacion de funciones######################
@st.cache_resource
#funcion eleccion del modelo
def cargar_modelo(model_name):
    return pipeline("zero-shot-classification", model=model_name, device=0)

#funcion que grafica el resultado del modelo
def graficar(result):
    # Crear un gr谩fico de pastel
    fig, ax = plt.subplots()
    ax.pie(result["scores"], labels=result["labels"], autopct="%1.1f%%", startangle=90)
    ax.axis("equal")  # Hace que el gr谩fico sea un c铆rculo perfecto
    # Mostrar el gr谩fico en Streamlit
    st.pyplot(fig)    

#######################fin creacion de funciones######################




st.title("Ejercicio interfaz transformers pipeline con modelos Zero-shot")

model_options = [
    "MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7",
    "MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli",
    "facebook/bart-large-mnli",
]
#    "roberta-large-mnli",
#    "cross-encoder/nli-roberta-base"

# Seleccionar el modelo del pipeline
selected_model = st.selectbox("Selecciona un modelo", model_options)


#asignacion del modelo a usar
classifier = cargar_modelo(selected_model)

# Entrada de texto para la oraci贸n
nombre = st.text_input("Ingrese un nombre o una oraci贸n  a clasificar:")

etiquetas = st.text_area(
    "Ingresa las categor铆as separadas por comas:",
    placeholder="Ejemplo: masculino,femenino"
)

# Bot贸n para clasificar
if st.button("Clasificar"):
# Show a spinner during a process
    with st.spinner(text="Ejecutando el modelo"):
        time.sleep(3)
        st.success("Revisar el resultado obtenido en la parte inferior")    

    
    if nombre and etiquetas:
        # basado en el string crear array labels que pasan como clases al modelo
        labels = [label.strip() for label in etiquetas.split(",")]

        #Llamado del modelo y las clases elegidas por el usuario
        result = classifier(nombre, candidate_labels=labels)

        # Mostrar los resultados
        st.subheader("Resultados de Clasificaci贸n")
        #for label, score in zip(result["labels"], result["scores"]):
        #    st.write(f"**{label}**: {score:.2f}")
        
        for label, score in zip(result["labels"], result["scores"]):
            with st.container():
                st.markdown(
                    f"""
                    <div style="background-color: #283747;padding:10px;margin-bottom:10px;border-radius:5px;border: 1px solid #ddd;">
                        <h4 style="margin:0;">{label}</h4>
                        <p style="margin:0;">Confianza: <b>{score:.2f}</b></p>
                    </div>
                    """,
                    unsafe_allow_html=True,
                )
        graficar(result)
    else:
        st.warning("Por favor, ingresa una oraci贸n y categor铆as v谩lidas.")

        
#Clasificador =  pipeline('sentiment-analysis', model = Nombre_modelo,device='cuda')
#Res=Cla("sundays are good day for relaxing")
#print(Res)