Aspect dilution: several vectors beat one, and why
A document about several things gets one embedding that is an average of all of them. The measurement of that loss, the control that separates more vectors from better-aligned vectors, and the stress test that shows how much of the gain is capacity.
The claim and the confound
In short: Cards have to beat an equally large set of blind chunks, not just the single vector, or the experiment measures capacity rather than the idea.
Giving a document several cards means giving it several embeddings. Cutting the same document into arbitrary windows also means several embeddings. If cards beat a single pooled vector, that proves nothing about purposes, because chunks would beat it too. Every experiment therefore carries three arms.
- Arm
- Pooled
- What it is
- One embedding of the whole document
- What it isolates
- The baseline everyone uses
- Arm
- Matched chunks
- What it is
- The same text cut into fixed word windows, with the window width chosen so that chunks per document match cards per document
- What it isolates
- Capacity alone, no semantics
- Arm
- Purpose cards
- What it is
- The same text split by purpose, each card embedded separately, scored by the maximum over cards
- What it isolates
- Capacity plus alignment
The encoder is the same in every arm (all-MiniLM-L6-v2, a small general-purpose sentence encoder), everything is scored at document level, and the control is matched on units per document.
Aspect dilution on a controlled corpus
In short: As a document grows from one aspect to ten, the pooled index falls from 0.815 to 0.294 nDCG@10; any multi-vector representation holds it above 0.63.
Each synthetic document concatenates k passages drawn from k of ten unrelated topic pools (legal, logistics, finance, engineering, personnel, marketing, facilities, research, security, procurement). Every passage realises one fact, a query asks about one fact in wording that shares no template with the passages, and every document carrying a passage that realises the queried fact is relevant. Relevance therefore comes from the generative process rather than from an assumption that one document is the answer; relevance sets grow from 3.7 documents per query at k=1 to 33 at k=10. Five hundred documents and two hundred queries per setting.
Measured result
Retrieval as the number of aspects per document grows
nDCG@10 on the synthetic corpus, 200 queries per setting, seed 13. At k=1 all arms are the same document, which the measurement confirms.
- Pooled, one vector
- Matched blind chunks
- Purpose cards, template anchors
- Purpose cards, hand-written anchors
The pooled index collapses and does not recover. Splitting the document, by any method, holds retrieval up. The purpose cards pull away from the matched chunks from k=5 onward, and the hand-written anchors (a practitioner's topical description of each aspect, carrying none of the generator's phrasing) do better than the anchors rendered from the generator's own templates.
Table view
| Category | Pooled, one vector | Matched blind chunks | Purpose cards, template anchors | Purpose cards, hand-written anchors |
|---|---|---|---|---|
| 1 | 0.815 | 0.832 | 0.799 | n/a |
| 2 | 0.485 | 0.738 | 0.734 | n/a |
| 3 | 0.394 | 0.677 | 0.684 | 0.694 |
| 4 | 0.355 | 0.657 | 0.678 | n/a |
| 5 | 0.377 | 0.638 | 0.702 | 0.742 |
| 7 | 0.356 | 0.676 | 0.731 | 0.774 |
| 10 | 0.294 | 0.633 | 0.742 | 0.803 |
Source: Benchmark repository, results/e0_dilution/metrics.json and results/e1_anchor_sensitivity/metrics.json, commit 92c18cb (2026-08-22). Reproduced on a second machine to within 5e-8.
Against the matched chunk control, cards built from hand-written anchors score +0.023 at k=3 (p=0.12, not significant), +0.099 at k=5, +0.098 at k=7, and +0.188 at k=10 (95 percent interval +0.152 to +0.225, p=0.0001, 135 wins to 34 losses), while using 9.8 units per document against the control's 13.0, which is 25 percent fewer embeddings. The earlier template-anchor version of the same experiment gave +0.109 at k=10. The reason the cruder anchors do better is intuitive once seen: a topical description is a better prototype for an aspect than one rendered sentence carrying one specific fact.
The mechanism behaves as the theory says it should. The mean cosine similarity between a query and its target document's best card stays flat across k (0.476 at k=1, 0.466 at k=10), while the pooled vector's similarity decays monotonically from 0.476 to 0.225. Treating the pooled vector as the normalised mean of k near-orthogonal aspect vectors predicts a decay of one over the square root of k; the measured ratio follows k to the power −0.32, above the prediction at every k. Aspects drawn from natural language are not orthogonal, since all the passages share register and syntax, and encoder similarities occupy a narrow cone that compresses differences. The orthogonality argument is an upper bound on dilution, not a prediction the data confirm.
- k
- 1
- Pooled similarity
- 0.476
- Best-card similarity
- 0.476
- Measured ratio
- 1.00
- Predicted ratio
- 1.00
- k
- 2
- Pooled similarity
- 0.368
- Best-card similarity
- 0.475
- Measured ratio
- 0.77
- Predicted ratio
- 0.71
- k
- 5
- Pooled similarity
- 0.292
- Best-card similarity
- 0.482
- Measured ratio
- 0.61
- Predicted ratio
- 0.45
- k
- 10
- Pooled similarity
- 0.225
- Best-card similarity
- 0.466
- Measured ratio
- 0.48
- Predicted ratio
- 0.32
Capacity or alignment? The LIMIT test
In short: On a benchmark built to break single-vector retrieval, purpose cards recover almost everything, but so does a fine enough blind window. Most of the benefit is capacity.
LIMIT is constructed to expose the representational ceiling of single-vector retrieval: for a fixed embedding dimension, some combinations of documents can never be returned together as a top-k result by any single-vector index, a bound that state-of-the-art embedders visibly hit (Weller, Boratko, Naim, Lee, arXiv:2508.21038, Aug 2025). Each document names a person and lists the things they like; each query asks who likes one specific thing. The small variant has 46 documents with 44 attributes each and 1,000 queries. The task looks trivial and defeats dense retrievers, and it hands over an unambiguous aspect decomposition for free: one card per attribute.
Measured result
LIMIT-small: five systems, one encoder
nDCG@10 over 1,000 queries. Every delta against the pooled vector is significant at p=0.0001 after Holm correction.
Keyword search wins outright, because LIMIT queries name an exact attribute. The pooled dense vector fails; per-attribute cards recover it; the hybrid matches BM25. The 30-word chunk arm here is not a matched control: it has 4 units per document against the cards' 44.
Table view
| Category | nDCG@10 |
|---|---|
| BM25 keyword search | 0.997 |
| Dense, pooled | 0.314 |
| Dense, 30-word chunks (4 per document) | 0.390 |
| Dense, per-attribute cards (44 per document) | 0.988 |
| Cards fused with BM25 | 0.997 |
Source: Benchmark repository, results/e1_limit/metrics.json, commit 92c18cb (2026-08-22). Byte-identical on a second machine.
The first reading of this table attributed the 0.674 gain to alignment, because 30-word chunks gained only 0.076. An adversarial re-run, described on the method page, varied only the chunk granularity and found that nDCG@10 is a smooth function of units per document.
Measured result
Blind windows against units per document
The same text, the same encoder, only the window width varied. Cards sit at 44 units per document.
- Blind sliding windows
- Per-attribute cards
A semantically blind three-word sliding window, with no taxonomy and no anchors, recovers 0.610 of the 0.674 that cards gain. The residual card advantage at matched capacity is +0.064. Dropping the card template and using the bare attribute string beats the framed cards by a further +0.010 (p=0.0001).
Table view
| Category | Blind sliding windows | Per-attribute cards |
|---|---|---|
| 4.0 | 0.390 | n/a |
| 10.8 | 0.611 | n/a |
| 24.7 | 0.892 | n/a |
| 36.8 | 0.924 | n/a |
| 44 | n/a | 0.988 |
Source: Adversarial review of the benchmark repository at commit 1cec616, 2026-08-20; reported in the programme's review record.
Two things follow. Capacity is necessary and explains most of the LIMIT result; the decomposition has to match the query distribution for the remainder to appear. And LIMIT supplies a perfect decomposition for free while its queries are effectively exact-attribute lookups, which is why BM25 wins outright and the hybrid only matches it. Real corpora arrive undecomposed, the taxonomy must be designed and may be misaligned, so the honest reading of the table is an upper bound on what alignment can buy. The storage cost is also a property of the corpus: 44 cards per document here, far above the small constant the pattern implies elsewhere.
What this establishes
Independently measured The synthetic and LIMIT results reproduced byte-for-byte or to floating-point precision across two machines and two processor architectures.
The research behind this page
- Benchmark repository:
results/e0_dilution,results/e1_anchor_sensitivity,results/e1_limit, commit 92c18cb, 2026-08-22. - Weller, Boratko, Naim, Lee, On the Theoretical Limitations of Embedding-Based Retrieval, arXiv:2508.21038, Aug 2025. https://arxiv.org/abs/2508.21038
- The adversarial review of Sprint R1, 2026-08-20, whose chunk-granularity re-run produced the second chart.
- The papers behind the recommendation for the multi-vector literature this sits in.
The multi-card retrieval experiments
Five rounds of experiments on public corpora, with human relevance judgements, testing whether several purpose-specific embeddings per document beat one, whether a cheap gate and topic-level processing pay for themselves, and whether telling the index the goal helps. What held, what did not, and the approach the evidence supports.
Real prose: where purpose views lose
On 5,183 human-judged scientific abstracts, purpose cards score below matched blind chunks, whether the card taxonomy is written by hand or designed by a model from the corpus and the training queries. The domain boundary of the method, measured.