E· Universitetrag-informationssokning· ca 60 min· utvecklande· verifierad 2026-09-20
Utvärdering av retrieval: recall@k, MRR, nDCG
Kunna bygga ett testset och mäta retrieval-kvalitet.
Förkunskaper
- DRetrieval — hitta rätt textkrävs
- EModellutvärderingkrävs
Intuition
RAG har två lager som kan fela. Mät dem var för sig — annars felsöker du i blindo.
Retrieval-mått:
| Mått | Frågar | Formel |
|---|---|---|
| recall@k | fanns rätt passage bland topp k? | träffar/frågor |
| precision@k | hur stor andel av topp k var relevanta? | relevanta/k |
| MRR | hur högt upp kom den första rätta? | medel av 1/rang |
| nDCG@k | belönar flera relevanta, högt upp | diskonterad vinst / ideal |
recall@k är viktigast i RAG: finns inte rätt passage bland det som skickas till modellen kan svaret aldrig bli rätt. MRR och nDCG spelar roll när ordningen påverkar (modellen läser de första bäst).
Kod
import numpy as np
def recall_at_k(resultat, facit, k):
return float(np.mean([any(d in f for d in r[:k]) for r, f in zip(resultat, facit)]))
def mrr(resultat, facit):
rr = []
for r, f in zip(resultat, facit):
rang = next((i + 1 for i, d in enumerate(r) if d in f), None)
rr.append(1 / rang if rang else 0.0)
return float(np.mean(rr))
def ndcg_at_k(resultat, facit, k):
def dcg(rel):
return sum(r / np.log2(i + 2) for i, r in enumerate(rel))
ut = []
for r, f in zip(resultat, facit):
rel = [1.0 if d in f else 0.0 for d in r[:k]]
ideal = sorted([1.0] * min(len(f), k) + [0.0] * k, reverse=True)[:k]
ut.append(dcg(rel) / dcg(ideal) if dcg(ideal) else 0.0)
return float(np.mean(ut))
res = [["d3", "d1", "d9"], ["d5", "d2", "d7"]]
fac = [{"d1"}, {"d7"}]
print(recall_at_k(res, fac, 3), round(mrr(res, fac), 3), round(ndcg_at_k(res, fac, 3), 3))
# 1.0 0.417 0.565
Bygg testsetet så här: ta 50–100 verkliga frågor ur loggarna (eller från de människor som ska använda systemet), leta upp vilken passage som faktiskt svarar, och spara paret. Frågor du hittar på själv är för lätta och för välformulerade — det är den vanligaste orsaken till att ett RAG-system ser bra ut i test och dåligt i drift.
Behärskning innebär
- Bygger ett retrieval-testset
- Beräknar recall@k, MRR och nDCG
- Skiljer retrieval-fel från genereringsfel
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — Discounted cumulative gain (CC BY-SA 4.0) — CC BY-SA 4.0
- arXiv — BEIR: A Heterogeneous Benchmark for Zero-shot Information Retrieval — arXiv (öppen åtkomst; licens per artikel)