← Lesson
Ranking
Joeven
Run
Reset
Python loads on first run
# one query; gold relevant chunk is "refund-policy" candidates = [ ("shipping", 0.41), ("refund-policy", 0.77), ("password", 0.22), ("refund-faq", 0.71), ("office-hours", 0.18), ] relevant = {"refund-policy", "refund-faq"} ranked = sorted(candidates, key=lambda row: row[1], reverse=True) print("rank order") for i, (name, score) in enumerate(ranked, start=1): mark = "hit" if name in relevant else "-" print(i, name, score, mark) def precision_at(k): top = [name for name, _ in ranked[:k]] hits = sum(1 for n in top if n in relevant) return hits / k print("P@1", precision_at(1), "P@3", round(precision_at(3), 3)) first_hit = next(i for i, (n, _) in enumerate(ranked, start=1) if n in relevant) print("reciprocal rank", round(1 / first_hit, 3))
Run to execute this in your browser. Nothing is sent to a server.