Tâche
📝 **Question :** **Écrivez la fonction** \`rrf(rankings, k=60)\` — Fusion de rangs réciproques. Prend une liste de classements (chaque classement est une liste ordonnée d'identifiants de documents du meilleur au pire, provenant d'un seul récupérateur) et renvoie le top-K fusionné sous la forme d'une liste d'identifiants de documents triés par score RRF total, le plus élevé en premier.
Formule pour un document dans un classement à la position d'indexation zéro \`rank\` :
\`\`\`
score = 1 / (k + rang)
\`\`\`
Additionner les scores de tous les classements pour chaque document ; trier les documents par score total décroissant.
Fusionnez ensuite un vecteur et un récupérateur BM25 pour une requête "SKU-4471":
\`\`\`
vecteur = ["doc-A", "doc-B", "doc-C", "doc-D"] # le vecteur pense que A est le meilleur
bm25 = ["doc-D", "doc-A", "doc-E", "doc-F"] # bm25 met D en premier (correspond au SKU)
\`\`\`
Imprimez le top 4 fusionné sous forme de liste Python :
\`\`\`
['doc-A', 'doc-D', 'doc-B', 'doc-C']
\`\`\`
A apparaît dans les deux listes aux rangs élevés → gagne. D était n°1 dans BM25 → bat B et C même si le vecteur ne le favorisait pas. C'est RRF : des documents classés en tête par N'IMPORTE QUELLE surface de retriever.
📋 Choisissez la bonne réponse.
💡 **Indice :** Relisez la théorie ci-dessus en cas de doute.