dev_NLP / app.py
ahmadouna's picture
Update app.py
e19d90e verified
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