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 |