Sarcină
📝 **Întrebare:** **Scrieți funcția** \`rrf(clasamente, k=60)\` — Fuziune de rang reciproc. Preia o listă de clasamente (fiecare clasare este o listă ordonată de ID-uri de documente de la cel mai bun la cel mai rău, de la un singur retriever) și returnează top-K fuzionat ca o listă de ID-uri de documente sortate după scorul total RRF, primul cel mai mare.
Formula pentru un document într-un singur clasament la poziția zero-indexată \`rank\`:
\`\`\`
scor = 1 / (k + rang)
\`\`\`
Suma scorurile din toate clasamentele pentru fiecare document; sortați documentele după scorul total descendent.
Apoi fuzionați un vector și un retriever BM25 pentru o interogare „SKU-4471”:
\`\`\`
vector = ["doc-A", "doc-B", "doc-C", "doc-D"] # vectorul consideră că A este cel mai bun
bm25 = ["doc-D", "doc-A", "doc-E", "doc-F"] # bm25 pune D pe primul loc (se potrivește cu SKU)
\`\`\`
Imprimați top-4 fuzionat ca o listă Python:
\`\`\`
[„doc-A”, „doc-D”, „doc-B”, „doc-C”]
\`\`\`
A apare în ambele liste la ranguri înalte → victorii. D a fost #1 în BM25 → învinge B și C, chiar dacă vectorul nu l-a favorizat. Acesta este RRF: documentele clasate foarte bine de ORICE suprafață retriever.
📋 Alegeți răspunsul potrivit.
💡 **Sugestie:** Recitiți teoria de mai sus dacă nu sunteți sigur.