Compito
📝 **Domanda:** **Scrivi la funzione** \`rrf(rankings, k=60)\` — Reciprocal Rank Fusion. Prende un elenco di classifiche (ogni classifica è un elenco ordinato di ID di documenti dal migliore al peggiore, da un singolo retriever) e restituisce la top-K fusa come un elenco di ID di documenti ordinati in base al punteggio RRF totale, dal più alto per primo.
Formula per un documento in una classifica in posizione indicizzata a zero \`rank\`:
\`\`\`
punteggio = 1 / (k + rango)
\`\`\`
Somma i punteggi di tutte le classifiche per ciascun documento; ordinare i documenti in base al punteggio totale decrescente.
Quindi unisci un vettore e un retriever BM25 per una query "SKU-4471":
\`\`\`
vettore = ["doc-A", "doc-B", "doc-C", "doc-D"] # vettore pensa che A sia il migliore
bm25 = ["doc-D", "doc-A", "doc-E", "doc-F"] # bm25 mette D per primo (corrisponde allo SKU)
\`\`\`
Stampa i primi 4 fusi come elenco Python:
\`\`\`
['doc-A', 'doc-D', 'doc-B', 'doc-C']
\`\`\`
A appare in entrambe le liste ai gradi più alti → vince. D era il numero 1 in BM25 → batte B e C anche se il vettore non lo favoriva. Questo è RRF: documenti classificati in alto da QUALSIASI superficie retriever.
📋 Scegli la risposta giusta.
💡 **Suggerimento:** Rileggi la teoria sopra se non sei sicuro.