E· UniversitetLaboration· ca 60 min· container
Labb: BM25 och ett minimalt RAG-flöde
Implementera BM25 från formeln, hämta rätt stycke för en fråga och bygga en prompt med källhänvisning — hela RAG-kedjan utan LLM.
Lär ut: bm25-och-nyckelordssok · Kräver: tokenisering-av-text-for-dataretrieval-grunder
Teori
BM25(q, d) = Σ IDF(t) · tf(t,d)(k₁+1) / (tf(t,d) + k₁(1 − b + b·|d|/avgdl)). IDF(t) = ln((N − n(t) + 0,5)/(n(t) + 0,5) + 1).
Deluppgifter
- tokenize + idf — `tokenize(text)` (gemener, a–ö och siffror); `idf(term, docs)`.
- bm25 — `bm25(query, docs, k1=1.5, b=0.75)` → poäng per dokument.
- rag_prompt — `rag_prompt(query, docs, k)` → sträng med de k bästa styckena numrerade [1]…[k] + frågan.
Evals: recall@1 (recall >= 0.8)
Logga in för att köra laborationen.
Förväntade resultat
recall@1 ≥ 0,8 på de 10 frågorna mot 12 stycken.
Vanliga fel
- IDF utan +1 kan bli negativ för vanliga ord.
- Glömmer längdnormalisering (b).
- Tokeniserar inte frågan på samma sätt som dokumenten.