Hoppa till innehållet
AI-grafen
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

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åttFrågarFormel
recall@kfanns rätt passage bland topp k?träffar/frågor
precision@khur stor andel av topp k var relevanta?relevanta/k
MRRhur högt upp kom den första rätta?medel av 1/rang
nDCG@kbelönar flera relevanta, högt uppdiskonterad 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

Alla källor och licenser