RAG and vector searchLoading progress…

Recall at k

Implement an exact baseline, compute recall at k and explain approximate search and high-dimensional difficulty.

Recall at k

Recall@k is the fraction of the true k nearest neighbours that the index returned. If the true three neighbours are {A, B, C} and the index returns {A, C, E}, recall@3 = 2/3. Use ground truth computed under the same metric on the same data, handle exact ties explicitly, and say what you do when fewer than k candidates exist.

The exact (brute-force) answer is the target: the true 3 nearest are A, B and C. Click to choose what an approximate index returned.

returned: {A, C, E} true: {A, B, C} found 2 of 3 → recall@3 = 0.667 precision = correct / returned = 0.667

Recall needs an exact target on the same data and metric. If two candidates tie exactly for the last place, accept either as correct (tie-aware recall), and say how you handle fewer than k candidates.

Choose what the index returned.

Predict first. Two of three true neighbours are returned. What is recall@3?

Chapter context

An exact search compares every candidate under a defined metric. Approximate indexes reduce work by choosing promising candidates, accepting that some true nearest neighbors may be missed.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

An exact dense dot-product scan over N vectors of dimension d needs Nd coordinate products plus reductions.

recall@k⁡=∣Rk∩Gk∣k.\operatorname{recall@k}=\frac{|R_k\cap G_k|}{k}.

This assumes k ground-truth eligible neighbors. In a d-dimensional unit box, a sub-box spanning fraction r of every axis occupies fraction rdr^d of the volume.

Worked example

Scanning 1000 vectors of dimension 128 uses 128,000 coordinate products, before selection and other overhead. If the true three neighbors are {A,B,C} and the returned set is {A,C,E}, recall@3 is 2/3. A sub-box spanning 0.1 of each of ten axes occupies only 10^-10 of the unit-box volume.

Reference code

The following example uses the Python standard library and does not call a remote service.

from math import isclose
assert 1000*128 == 128000
truth,returned={'A','B','C'},{'A','C','E'}
assert isclose(len(truth & returned)/3,2/3)
assert isclose(.1**10,1e-10)

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

Index recall is not the same as judged semantic relevance. High-dimensional behavior depends on the data manifold. Tie policies can affect reported recall for identical distances.