Expand description
§mmr-rerank
Maximal Marginal Relevance (Carbonell & Goldstein, 1998) reranker.
Given relevance scores rel[i] = sim(query, doc_i) and a pairwise
similarity matrix pair[i][j] = sim(doc_i, doc_j), returns the
top-k indices that balance query relevance against novelty:
pick = argmax_{i not picked} λ * rel[i] - (1 - λ) * max_{j picked} pair[i][j]§Example
use mmr_rerank::mmr;
let rel = vec![0.9, 0.85, 0.6, 0.55];
// 4 docs; pair[i][j] = pairwise similarity
let pair = vec![
vec![1.0, 0.95, 0.10, 0.10],
vec![0.95, 1.0, 0.10, 0.10],
vec![0.10, 0.10, 1.0, 0.95],
vec![0.10, 0.10, 0.95, 1.0],
];
// λ = 0.5 trades off relevance and diversity equally.
let picks = mmr(&rel, &pair, 0.5, 2);
// Expect 0 (top relevance), then 2 (low pair sim with 0).
assert_eq!(picks, vec![0, 2]);Functions§
- mmr
- Pick
kindices in MMR order.lambda ∈ [0, 1].