DébutantCas Pratiques
25 min de lecture24 vues

Analyser les Préférences Humaines du Chatbot Arena

Explorez le dataset officiel du Chatbot Arena (33 000 conversations) pour comprendre quels modèles d'IA gagnent le plus souvent et pourquoi.

Objectif du TP

Dans ce cas pratique, vous allez explorer le dataset officiel du Chatbot Arena, la plateforme qui produit le classement Elo de référence pour les LLMs. Ce dataset contient 33 000 conversations réelles entre des utilisateurs et des modèles d''IA, avec le vote de préférence humaine.

Vous apprendrez à manipuler des données réelles avec Pandas et à en tirer des insights concrets sur les performances des modèles.

Prérequis

  • Python 3.8+
  • Connaissances basiques de Pandas
  • Un compte Kaggle (gratuit) pour télécharger le dataset

Dataset

Chatbot Arena Conversations – Kaggle

Ce dataset contient pour chaque conversation :

  • Les noms des deux modèles comparés (model_a, model_b)
  • Le contenu complet de la conversation
  • Le vote du juge humain (winner : model_a, model_b ou tie)
  • La langue détectée

C''est le même dataset que celui utilisé par LMSYS pour calculer le classement Elo que vous voyez sur lmarena.ai.

Exercice 1 : Chargement et Exploration

Commencez par charger le dataset et comprendre sa structure.

import pandas as pd

# Charger le dataset (téléchargez-le depuis Kaggle)
df = pd.read_json("chatbot_arena_conversations.json")

# 1. Dimensions
print(f"Nombre de conversations : {len(df)}")
print(f"Colonnes : {df.columns.tolist()}")

# 2. Aperçu
print(df.head())

# 3. Types de données
print(df.dtypes)

# 4. Valeurs manquantes
print(df.isnull().sum())

Questions à vous poser :

  • Combien de conversations y a-t-il ?
  • Quelles colonnes sont disponibles ?
  • Y a-t-il des données manquantes ?

Exercice 2 : Quels Modèles sont les Plus Testés ?

Identifiez les modèles qui apparaissent le plus souvent dans les comparaisons.

# Combiner les deux colonnes de modèles
all_models = pd.concat([df["model_a"], df["model_b"]])

# Top 15 des modèles les plus testés
top15 = all_models.value_counts().head(15)
print("Top 15 des modèles les plus testés :")
print(top15)

# Visualisation
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10, 6))
top15.plot(kind="barh", ax=ax, color="#6366f1")
ax.set_xlabel("Nombre de matchs")
ax.set_title("Modèles les plus testés dans le Chatbot Arena")
ax.invert_yaxis()
plt.tight_layout()
plt.savefig("modeles_populaires.png", dpi=150)
plt.show()

Observation : Les modèles les plus récents et les plus médiatisés sont testés beaucoup plus souvent. Cela peut créer un biais dans les scores Elo.

Exercice 3 : Taux de Victoire par Modèle

Calculez le pourcentage de victoires de chaque modèle.

# Victoires en tant que model_a
wins_a = df[df["winner"] == "model_a"]["model_a"].value_counts()

# Victoires en tant que model_b
wins_b = df[df["winner"] == "model_b"]["model_b"].value_counts()

# Total des victoires
wins = wins_a.add(wins_b, fill_value=0)

# Total des matchs joués
total_a = df["model_a"].value_counts()
total_b = df["model_b"].value_counts()
total = total_a.add(total_b, fill_value=0)

# Taux de victoire (%)
winrate = (wins / total * 100).sort_values(ascending=False)

# Filtrer les modèles avec au moins 100 matchs (pour la fiabilité)
reliable = total[total >= 100].index
winrate_reliable = winrate[winrate.index.isin(reliable)]

print("Taux de victoire (modèles avec 100+ matchs) :")
print(winrate_reliable.head(20).round(1))

Question : Le classement que vous obtenez correspond-il au leaderboard officiel de LM Arena ? Pourquoi pourrait-il y avoir des différences ?

Exercice 4 : Analyse des Égalités

Les matchs nuls sont révélateurs : quand les humains ne savent pas choisir, cela signifie que les modèles sont proches en qualité.

# Taux global d''égalité
tie_rate = (df["winner"] == "tie").mean() * 100
print(f"Taux d''égalité global : {tie_rate:.1f}%")

# Taux d''égalité par paire de modèles (top 10 paires)
df["pair"] = df.apply(lambda r: tuple(sorted([r["model_a"], r["model_b"]])), axis=1)
pair_stats = df.groupby("pair").agg(
    total=("winner", "count"),
    ties=("winner", lambda x: (x == "tie").sum())
)
pair_stats["tie_rate"] = (pair_stats["ties"] / pair_stats["total"] * 100).round(1)

# Paires avec le plus d''égalités (minimum 20 matchs)
close_pairs = pair_stats[pair_stats["total"] >= 20].nlargest(10, "tie_rate")
print("\nPaires les plus serrées :")
print(close_pairs[["total", "tie_rate"]])

Ce que vous découvrirez : Certaines paires de modèles sont quasi-indistinguables pour les humains. Cela signifie que pour votre usage, le prix ou la vitesse devrait départager.

Exercice 5 : Analyse par Langue

Les modèles performent-ils différemment selon la langue ?

# Distribution des langues
if "language" in df.columns:
    print("Top 10 langues :")
    print(df["language"].value_counts().head(10))

    # Taux de victoire pour les conversations en français vs anglais
    for lang in ["English", "French"]:
        subset = df[df["language"] == lang]
        if len(subset) > 0:
            print(f"\n--- {lang} ({len(subset)} conversations) ---")
            wins_lang = subset[subset["winner"] == "model_a"]["model_a"].value_counts()
            wins_lang = wins_lang.add(
                subset[subset["winner"] == "model_b"]["model_b"].value_counts(),
                fill_value=0
            )
            total_lang = subset["model_a"].value_counts().add(
                subset["model_b"].value_counts(), fill_value=0
            )
            wr = (wins_lang / total_lang * 100).sort_values(ascending=False)
            reliable_lang = total_lang[total_lang >= 10].index
            print(wr[wr.index.isin(reliable_lang)].head(10).round(1))

Attention : Le nombre de conversations en français est beaucoup plus faible qu''en anglais. Les résultats sont donc moins fiables statistiquement.

Pour Aller Plus Loin

  • Essayez de recalculer un score Elo simplifié à partir des résultats des matchs
  • Analysez si certains modèles sont meilleurs sur des types de tâches spécifiques (code, créativité, raisonnement)
  • Comparez vos résultats avec le leaderboard officiel de LM Arena

Specialiste IA — Master Intelligence Artificielle

Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.