Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Évaluer un embedding fine-tuné
Quand tu fine-tunes un modèle d'embedding (comme text-embedding-3-small d'OpenAI), tu veux vérifier qu'il retrouve mieux les documents pertinents qu'avant. Pour ça, on utilise deux métriques standard du domaine du retrieval : le Hit Rate et le MRR (Mean Reciprocal Rank).
Imagine que tu as un moteur de recherche interne. Pour chaque question, il te renvoie une liste de documents classés par pertinence. Le Hit Rate te dit : "dans quel pourcentage des cas, le bon document apparaît dans le top K résultats ?" Le MRR va plus loin : "en moyenne, à quelle position se trouve le bon document ?"
Le Hit Rate est binaire : soit le bon document est dans le top K (1), soit il n'y est pas (0). On fait la moyenne sur toutes les questions.
Le MRR est plus nuancé. Si le bon document est en position 1, le score est 1/1 = 1.0. En position 2, c'est 1/2 = 0.5. En position 5, c'est 1/5 = 0.2. Si le bon document n'est pas trouvé, c'est 0. On fait la moyenne sur toutes les questions.
Écris une fonction evaluer_retrieval(questions, resultats, documents_pertinents, k=5) qui prend : 1. questions : une liste de chaînes (les requêtes) 2. resultats : une liste de listes de chaînes (les documents retournés pour chaque question, classés du plus au moins pertinent) 3. documents_pertinents : un dictionnaire qui associe chaque question au document correct 4. k : le nombre de résultats à considérer pour le Hit Rate
La fonction renvoie un dictionnaire avec : - "hit_rate" : le pourcentage de questions où le document pertinent est dans le top K, arrondi à 4 décimales - "mrr" : le Mean Reciprocal Rank, arrondi à 4 décimales - "details" : liste de dicts avec "question", "position" (position du bon doc, 0 si non trouvé), "hit" (True/False), "reciprocal_rank"
Exemple :
questions = ["Q1", "Q2"] resultats = [["doc_a", "doc_b", "doc_c"], ["doc_x", "doc_y"]] pertinents = {"Q1": "doc_b", "Q2": "doc_z"} r = evaluer_retrieval(questions, resultats, pertinents, k=3) r["hit_rate"] vaut 0.5 (Q1 trouvé en top 3, Q2 non trouvé) r["mrr"] vaut 0.25 (Q1 en position 2 donc 1/2 = 0.5, Q2 non trouvé donc 0, moyenne = 0.25)