Czy wyszukiwarka znajduje właściwe materiały?
Polecenie: mając prawidłowe ID dokumentów i listę wyników wyszukiwania, policz znalezioną część oraz pozycję pierwszego trafienia. Ustal, co robić z duplikatami i pytaniem bez poprawnej odpowiedzi.
Sprawdza: rozumienie miar, nie sam wzór.
recall@k mówi, jaka część potrzebnych dokumentów jest w pierwszych k wynikach. Reciprocal rank dla jednego pytania to odwrotność pozycji pierwszego trafienia; MRR jest średnią takich ocen z wielu pytań.
Kontrakt: retrievalMetrics(relevant, ranked, k) zwraca {recallAtK, reciprocalRankAtK}. Duplikaty usuwamy przed wzięciem top-k, przy braku dokumentów istotnych recallAtK to null, a niepoprawne k rzuca RangeError.
Dopytanie: jak osobno oceniać poprawne odmowy?
Przećwiczysz
- Policzyć recall@k
- Policzyć reciprocal rank
- Obsłużyć duplikaty i brak istotnych dokumentów
Przykłady
- retrievalMetrics(['A','B'], ['X','A','A','B'], 3)→ { recallAtK: 1, reciprocalRankAtK: 0.5 }
- retrievalMetrics([], ['X'], 1)→ { recallAtK: null, reciprocalRankAtK: 0 }
Testy (1)
Testy przeniesione z reference.test.ts materiału źródłowego (node:test). W przeglądarce działają z tym samym zestawem asercji.
eval: dedup, recall, MRR i pytanie bez dowodów
assert.deepEqual(retrievalMetrics(['A', 'B'], ['X', 'A', 'A', 'B'], 3), { recallAtK: 1, reciprocalRankAtK: 0.5 });
assert.deepEqual(retrievalMetrics(['A', 'B'], ['X', 'A'], 2), { recallAtK: 0.5, reciprocalRankAtK: 0.5 });
assert.deepEqual(retrievalMetrics([], ['X'], 1), { recallAtK: null, reciprocalRankAtK: 0 });
assert.throws(() => retrievalMetrics(['A'], [], 0), RangeError);Powiązane pytania
Źródło: AI & Agents — ćwiczenia praktyczne — Autorskie ćwiczenie z programu nauki, nie potwierdzone zadanie rekrutacyjne.