Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 3,269 Bytes
39acd70 |
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 |
import pandas as pd
import sys
import re
import difflib
from pprint import pprint
# Chemin vers le fichier parquet
parquet_file = "data/lighteval_results/details/Qwen/Qwen2.5-72B-Instruct/2025-04-01T13-30-41.628107/details_custom|yourbench|0_2025-04-01T13-30-41.628107.parquet"
# Fonction pour nettoyer les réponses (enlever balises XML, espaces, etc.)
def clean_response(response):
# Enlever les balises XML
response = re.sub(r'<answer>(.*?)</answer>', r'\1', response, flags=re.DOTALL)
# Normaliser les espaces
response = ' '.join(response.split())
return response.lower().strip()
# Charger le fichier parquet
df = pd.read_parquet(parquet_file)
# Afficher des informations de base
print(f"Nombre total d'exemples: {len(df)}")
print(f"Tous les scores: {[metric.get('accuracy', 'N/A') for metric in df['metrics']]}")
print("\n" + "="*80 + "\n")
# Analyser la similarité entre les réponses du modèle et les réponses de référence
print("ANALYSE DE SIMILARITÉ ENTRE RÉPONSES MODÈLE ET RÉPONSES DE RÉFÉRENCE\n")
total_correct_content = 0
for i in range(len(df)):
# Extraire les réponses
model_answer = df.iloc[i].predictions[0] if len(df.iloc[i].predictions) > 0 else "N/A"
reference_answer = df.iloc[i].choices[0] if len(df.iloc[i].choices) > 0 else "N/A"
question = df.iloc[i].specifics.get('question', 'N/A')
# Nettoyer les réponses pour comparaison
clean_model = clean_response(model_answer)
clean_reference = clean_response(reference_answer)
# Calculer la similarité
similarity = difflib.SequenceMatcher(None, clean_model, clean_reference).ratio()
# Vérifier si les éléments clés de la réponse de référence sont dans la réponse du modèle
key_terms = clean_reference.split()
important_terms = [term for term in key_terms if len(term) > 4] # Mots de plus de 4 lettres
terms_found = sum(1 for term in important_terms if term in clean_model)
term_coverage = terms_found / len(important_terms) if important_terms else 0
# Définir si le contenu de la réponse est correct (utiliser un seuil)
is_content_correct = term_coverage > 0.5 or similarity > 0.4
if is_content_correct:
total_correct_content += 1
# Afficher les résultats
print(f"EXEMPLE {i+1}:")
print(f"Question: {question}")
print(f"Réponse du modèle (nettoyée): {clean_model[:150]}..." if len(clean_model) > 150 else f"Réponse du modèle (nettoyée): {clean_model}")
print(f"Réponse de référence (nettoyée): {clean_reference}")
print(f"Ratio de similarité: {similarity:.2f}")
print(f"Couverture des termes importants: {term_coverage:.2f} ({terms_found}/{len(important_terms)})")
print(f"Contenu de la réponse jugé correct? {'OUI' if is_content_correct else 'NON'}")
# Quelques informations supplémentaires
print(f"Métrique LightEval: {df.iloc[i].metrics.get('accuracy', 'N/A')}")
print("-"*80 + "\n")
print(f"RÉSUMÉ: {total_correct_content}/{len(df)} réponses ({total_correct_content/len(df)*100:.1f}%) ont un contenu jugé correct selon notre analyse simple.")
print(f"Comparé à LightEval: {sum(metric.get('accuracy', 0) for metric in df['metrics'])}/{len(df)} réponses correctes.") |