Live demo

985 labelled relevant documents in. 230 out.

200 queries against docs-search · BM25 + text-embedding-3. The pool is everything at least one retriever surfaced, so recall against it is 100% and cannot fall. The number after “out” is how many relevant documents the overlap says neither retriever reached.

Labelled pool
985
relevant documents at least one retriever found
Estimated relevant
1,215
95% interval 1,162 to 1,268
Union recall
81.1%
against the estimate; 100% against the pool
Still unretrieved
230
a floor, see the caveat below
Per retriever: recall against the pool, and against the estimated population
RetrieverFoundOnly it foundRecall vs poolRecall vs estimate
BM2573735574.8%60.7%
Dense63024864.0%51.9%
Union985603100.0%81.1%
Recall the dashboard reports
100%
Recall against what exists
81.1%

BM25 found 737 relevant documents and dense found 630. Only 382 were found by both. If the two were exhausting the population, nearly everything dense found would already be in the BM25 list. It is not.

independence caveatground truth known

The estimate treats the two retrievers as independent captures, and they are not: a document that shares the query’s words is also close in embedding space. Documents that are easy for both inflate the overlap, and an inflated overlap makes the population look smaller. So the number above is a floor on what is missing. This data was generated with 25.0% of relevant documents easy for both retrievers and 1,322 relevant documents in total. The estimate lands 8.1% under that, in the direction the caveat predicts, and the true union recall is 74.5% against the 81.1% estimated.

Per query the overlap is a document or two and the estimate is unstable on 190 of 200. Pooled across all of them it is not.
QueryBM25DenseBothEstimateStatus
Q-001How do I rotate an API key without downtime3535.0unstable
Q-002How do I export invoices for a closed billing period2213.5unstable
Q-003How do I set a per-seat spending limit1111.0complete
Q-004How do I restore a deleted workspace2518.0unstable
Q-005How do I configure SSO with an Okta group filter0202.0unstable
Q-006How do I why webhook retries stop after five attempts65213.0unstable
Q-007How do I migrate from the v1 to the v2 events endpoint1212.0unstable
Q-008How do I refund a prorated plan change5647.4unstable