Aufgabe
📝 **Frage:** **Schreiben Sie die Funktion** \`rrf(rankings, k=60)\` – Reziproke Rangfusion. Nimmt eine Liste von Rankings (jede Ranking ist eine geordnete Liste von Dokument-IDs vom besten zum schlechtesten von einem einzelnen Retriever) und gibt den zusammengeführten Top-K als Liste von Dokument-IDs zurück, sortiert nach der RRF-Gesamtpunktzahl, die höchste zuerst.
Formel für ein Dokument in einem Ranking an der nullindizierten Position „Rang“:
\`\`\`
Punktzahl = 1 / (k + Rang)
\`\`\`
Summe der Punkte aller Rankings für jedes Dokument; Sortieren Sie die Dokumente absteigend nach der Gesamtpunktzahl.
Verschmelzen Sie dann einen Vektor und einen BM25-Retriever für eine „SKU-4471“-Abfrage:
\`\`\`
vector = ["doc-A", "doc-B", "doc-C", "doc-D"] # vector hält A für das Beste
bm25 = ["doc-D", "doc-A", "doc-E", "doc-F"] # bm25 setzt D an die erste Stelle (entspricht der SKU)
\`\`\`
Drucken Sie die zusammengeführten Top-4 als Python-Liste aus:
\`\`\`
['doc-A', 'doc-D', 'doc-B', 'doc-C']
\`\`\`
A taucht in beiden Listen auf hohen Rängen auf → gewinnt. D war die Nummer 1 in BM25 → schlägt B und C, obwohl Vector es nicht favorisierte. Das ist RRF: Dokumente werden von JEDER Retriever-Oberfläche hoch bewertet.
📋 Wählen Sie die richtige Antwort.
💡 **Hinweis:** Lesen Sie die obige Theorie noch einmal, wenn Sie sich nicht sicher sind.