Код Senior RAG обновлено
Отбор контекста через MMR
Условие
Реализуйте mmr(query_sims, doc_sims, k, lam):
query_sims[i]: сходство документаiс запросом;doc_sims[i][j]: сходство документовiиj;- жадно выбирайте
kдокументов: на каждом шаге берите невыбранныйiс максимальнымlam * query_sims[i] - (1 - lam) * max(doc_sims[i][j] по выбранным j); для первого шага штраф 0; - при равенстве (сравнивайте значения, округлённые до 9 знаков) берите меньший индекс.
Верните индексы в порядке выбора. Если документов меньше k, выберите все.
Примеры
mmr([0.9, 0.88, 0.5], [[1, 0.95, 0.1], [0.95, 1, 0.1], [0.1, 0.1, 1]], 2, 0.5) // [0, 2]
mmr([0.9, 0.88, 0.5], [[1, 0.95, 0.1], [0.95, 1, 0.1], [0.1, 0.1, 1]], 2, 1) // [0, 1]
mmr([0.3, 0.7], [[1, 0], [0, 1]], 5, 0.7) // [1, 0]
Как подойти
Подсказки: 1
- Штраф кандидата: максимум сходства с уже выбранными,
max(..., default=0.0).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.