Завдання
📝 **Питання:** **Напишіть функцію** \`rrf(rankings, k=60)\` — взаємне злиття рангів. Бере список рейтингів (кожен рейтинг — це впорядкований список ідентифікаторів документів від найкращого до найгіршого, від одного ретривера) і повертає об’єднаний top-K як список ідентифікаторів документів, відсортованих за загальним балом RRF, найвищий спочатку.
Формула для одного документа в одному рейтингу на позиції \`rank\` з нульовим індексом:
\`\`\`
оцінка = 1 / (k + ранг)
\`\`\`
Сума балів за всіма рейтингами для кожного документа; сортувати документи за загальною кількістю балів за спаданням.
Потім об’єднайте вектор і ретрівер BM25 для запиту «SKU-4471»:
\`\`\`
vector = ["doc-A", "doc-B", "doc-C", "doc-D"] # вектор вважає, що А найкраще
bm25 = ["doc-D", "doc-A", "doc-E", "doc-F"] # bm25 ставить D на перше місце (відповідає SKU)
\`\`\`
Надрукуйте злиті топ-4 як список Python:
\`\`\`
['doc-A', 'doc-D', 'doc-B', 'doc-C']
\`\`\`
A з’являється в обох списках на високих рангах → перемагає. D був №1 у BM25 → перевершує B і C, хоча вектор не сприяв цьому. Це RRF: документи високо оцінені БУДЬ-ЯКОЮ поверхнею ретриверів.
📋 Виберіть правильну відповідь.
💡 **Підказка:** Перечитайте наведену вище теорію, якщо не впевнені.