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