Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import pandas as pd | |
import streamlit as st | |
from transformers import pipeline | |
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, balanced_accuracy_score | |
from PIL import Image | |
from transformers import AutoTokenizer, AutoModelForSequenceClassification,pipeline | |
# Charger le modèle pré-entraîné | |
classifier_model = "morit/french_xlm_xnli" | |
classifier_model ="MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7" | |
tokenizer=AutoTokenizer.from_pretrained(classifier_model) | |
classifier=pipeline("zero-shot-classification",model=classifier_model,tokenizer=tokenizer) | |
# Charger les données depuis le fichier CSV | |
df = pd.read_csv("fic.csv",sep=";") | |
# Récupérer les commentaires en liste | |
comments = df["text"].tolist() | |
# Afficher l'entête | |
st.header("Analyse de Texte") | |
st.subheader("Choisir les etiquettes a considerer") | |
col1, col2,col3,col4= st.columns(4) # Crée deux colonnes | |
with col1: | |
# Case à cocher dans la première colonne | |
joie_au_travail = st.checkbox("joie_au_travail", value=True) # Pré-cochée | |
with col2: | |
# Case à cocher dans la deuxième colonne | |
harcelement_moral = st.checkbox("harcelement_moral", value=True) # Pré-cochée | |
with col3: | |
# Case à cocher dans la deuxième colonne | |
epuisement_professionel = st.checkbox("epuisement_professionnel", value=True) # Pré-cochée | |
with col4: | |
# Case à cocher dans la deuxième colonne | |
neutre = st.checkbox("neutre", value=True) # Pré-cochée | |
# Collecter les labels choisis dans une liste | |
candidate_labels = [] | |
if joie_au_travail: | |
candidate_labels.append("joie_au_travail") # Remplacer par le label exact pour "positif" | |
if harcelement_moral: | |
candidate_labels.append("harcelement_moral") # Remplacer par le label exact pour "négatif" | |
if epuisement_professionel: | |
candidate_labels.append("epuisement_professionel") # Remplacer par le label exact pour "négatif" | |
if neutre: | |
candidate_labels.append("neutre") # Remplacer par le label exact pour "négatif" | |
# Créer une selectbox pour choisir un commentaire | |
# Afficher le commentaire sélectionné dans l'input text | |
text = st.text_area('Entrer le texte à analyser') | |
# Modèle de phrase pour la formation de l'hypothèse | |
hypothesis_template = "Cet exemple est un {}." | |
#sil ya du texte et les etiquettes sont choisies on affiche un histogramme avec les etiquettes(joie,tristesse,surcharge) et leur probabilité | |
if text: | |
result = classifier(text, candidate_labels, hypothesis_template=hypothesis_template,truncation=True,max_length=1000) | |
#st.info(f"Résultat: {result['labels'][0]} avec une confiance de {result['scores'][0]*100:.2f}%") | |
# if result['labels'][0]==1: | |
# st.info(f"Résultat: commentaire positive avec une confiance de {result['scores'][0]*100:.2f}%") | |
# if result['labels'][0]==0: | |
# st.info(f"Résultat: commentaire negative avec une confiance de {result['scores'][0]*100:.2f}%") | |
# if result['labels'][0]==2: | |
# st.info(f"Résultat: commentaire neutre avec une confiance de {result['scores'][0]*100:.2f}%") | |
# Créer un dataframe pour l'affichage des résultats | |
df_result = pd.DataFrame({ | |
"Etiquette": result["labels"], | |
"Probabilité": result["scores"] | |
}) | |
#bouton pour geerer le texte saisi | |
if st.button("Analyser") : | |
# Afficher les résultats sous forme de tableau | |
st.header("Résultats") | |
#st.table(df_result) | |
# représenter les résultats sous forme d'histogramme | |
#taille de la figure | |
# fig, ax = plt.subplots(figsize=(4, 2)) | |
# ax.bar(df_result["Etiquette"], df_result["Probabilité"]) | |
# ax.set_xticklabels(["A", "B", "C","D"]) | |
# ax.set_ylabel("Probabilité") | |
# ax.set_title("Probabilité de chaque étiquette") | |
# ax.legend(["Probabilité"]) | |
fig, ax = plt.subplots(figsize=(8, 4)) | |
bars = ax.bar(df_result["Etiquette"], df_result["Probabilité"]) | |
# Ajouter des annotations de texte pour chaque barre | |
for bar in bars: | |
yval = bar.get_height() | |
ax.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 2), ha='center', va='bottom') | |
ax.set_xlabel("Etiquette") | |
ax.set_ylabel("Probabilité") | |
ax.set_title("Probabilité de chaque étiquette") | |
# Afficher la légende | |
ax.legend(['Probabilité'], loc='upper right') | |
st.pyplot(fig) | |
#traitement ded données:train_test_split | |
st.header("Decoupage de notre dataset") | |
image=Image.open("train_test.PNG") | |
st.image(image, caption='Train_test_Split', use_column_width=True) | |
# Faire un tableau explicatives de metriques de performance(accuarcy,precision,recall,f1-score,balanced accuracy) | |
st.header("Métriques de Performance") | |
metrics_df = pd.DataFrame({ | |
"Métrique": ["Accuracy", "Precision", "Recall", "F1-score", "Balanced Accuracy"], | |
"Valeur": ['Pourcentage de prédictions correctes', 'Pourcentage de prédictions positives correctes', 'Pourcentage de vrais positifs prédits', 'Moyenne pondérée de la précision et du rappel', 'Moyenne du rappel pour chaque classe'] | |
}) | |
st.table(metrics_df) | |
#Ce matin, j'ai été submergé de joie en recevant la promotion tant attendue, un moment vraiment heureux. Cependant, l'annonce du départ soudain de mon collègue préféré a apporté une vague de tristesse. Face à ces nouvelles responsabilités, je me sens déjà surchargé, me demandant comment je vais gérer tout cela |