DAI-utvecklareLaboration· ca 45 min· sandlåda på servern
Labb: semantisk sökning med embeddings
Bygga en liten sökmotor: normalisera embeddingar, beräkna cosinuslikhet mot alla dokument med en matrisprodukt, ta topp-k, och mäta recall.
Lär ut: Embeddings — ord som vektorer
Kräver: Vektorer
Teori
Normalisera alla vektorer till längd 1 — då är cosinuslikhet bara en matrisprodukt Q·Dᵀ. Topp-k = de k största per rad.
Deluppgifter
- normalize —
normalize(M)delar varje rad med sin norm. - topk —
topk(q, D, k)returnerar index till de k mest lika dokumenten (fallande). - recall_at_k —
recall_at_k(Q, D, truth, k)— andel frågor där rätt dokument finns bland topp-k.
Godkänt när: recall >= 0.9
Startkoden
körs i en isolerad sandlåda på servernimport numpy as np
def normalize(M):
# TODO: M / norm per rad (undvik division med noll)
...
def topk(q, D, k=3):
# TODO: likheter = normalize(D) @ normalize(q); index till k största, fallande
...
def recall_at_k(Q, D, truth, k=3):
# TODO: andel i där truth[i] finns i topk(Q[i], D, k)
...
Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.
Prova diagnosenSkapa konto gratisFörväntade resultat
recall@3 ≥ 0,9 på det syntetiska datasetet (frågor = dokument + brus).
Vanliga fel
- Normaliserar kolumner i stället för rader.
argsortstigande — vänd ordningen.- Division med noll för nollvektor.