Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
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.") |