Skip to main content
Advanced design and researchPatterns

One vector blurs a document about many topics

One vector for a document about many topics matches each topic weakly. Several vectors win most of it back. Most of the gain comes from having more pieces, not smarter pieces.

By Murali SidLinkedInPublished Updated

Search for agents usually turns each document into one vector, a list of numbers that stands for its meaning. Think of a library that gives every book one index card. If a book covers ten topics, its card mixes all ten. A question about one chapter then only half matches. We asked how much is lost, and whether several cards per document win it back. They do. Most of the gain comes from simply having more pieces to search. Pieces shaped around one topic add a smaller extra, and only when questions target one topic.

This is the evidence for the first of the context patterns. It shapes how agents find what they know, the subject of knowledge and memory. The work belongs to the agent data engineering layer (R14). It sits at the chunk and embed stages of the data-to-memory pipeline. The research name for this loss is aspect dilution. An aspect is one topic a document covers.

The test: three setups with one encoder

A purpose card is one searchable piece per topic in a document, with its own vector. Giving a document several cards means giving it several vectors. Cutting the same document into fixed windows also gives several vectors. So if cards beat one pooled vector, that proves nothing about topics. Plain chunks might beat it too. Every test therefore compares three setups.

Every setup uses the same encoder, all-MiniLM-L6-v2. An encoder is the model that turns text into vectors. This one is small and general-purpose. Everything is scored per document. The control is matched: it gets the same number of pieces per document as the cards.

Step 1: the loss grows with every topic

We built a synthetic collection where we control the number of topics per document. Each document joins k passages from k of ten unrelated topic pools. The pools are legal, logistics, finance, engineering, personnel, marketing, facilities, research, security and procurement. Each passage states one fact. Each query asks about one fact, in wording that shares no template with the passages. Every document holding that fact counts as relevant. So relevance comes from how the data was built, not from a guess. Relevant documents per query grow from 3.7 at k=1 to 33 at k=10. Each setting has five hundred documents and two hundred queries.

Cards are built around anchors. An anchor is a short description of a topic. The card builder uses it to decide which passages go on which card. We tried two kinds. Template anchors are taken from the generator's own sentence templates. Hand-written anchors are short topic descriptions a person wrote, with none of the generator's wording.

The score is nDCG@10, a 0 to 1 measure of how good the top ten results are.

Measured result

Retrieval as the number of topics per document grows

nDCG@10 on the synthetic collection. 200 queries per setting, seed 13. At k=1 every setup holds the same document, and the scores confirm it.

0.2000.4000.6000.80012345710Topics per document (k)nDCG@10Purpose cards, hand-written anchorsPurpose cards, template anchorsMatched blind chunksPooled, one vector
  • Pooled, one vector
  • Matched blind chunks
  • Purpose cards, template anchors
  • Purpose cards, hand-written anchors

The one-vector index collapses and does not recover. Splitting the document, by any method, holds retrieval up. Purpose cards pull away from matched chunks from k=5 onward. Hand-written anchors do better than anchors taken from the generator's own templates.

Table view
CategoryPooled, one vectorMatched blind chunksPurpose cards, template anchorsPurpose cards, hand-written anchors
10.8150.8320.799n/a
20.4850.7380.734n/a
30.3940.6770.6840.694
40.3550.6570.678n/a
50.3770.6380.7020.742
70.3560.6760.7310.774
100.2940.6330.7420.803

Source: Author-reported experiment, August 2026. The comparison and limitations are described on this page.

The pooled index falls from 0.815 at one topic to 0.294 at ten. Every split setup stays above 0.63.

Against matched chunks, cards built from hand-written anchors gain more as topics grow.

At k=10 the cards use 9.8 pieces per document. The control uses 13.0. That is 25 percent fewer vectors. An earlier version of the same test used template anchors. It gave +0.109 at k=10. The cruder hand-written anchors do better for a simple reason. A topic description is a better stand-in for a topic than one sentence carrying one fact.

Step 2: what the theory predicts

The cause behaves roughly as theory says. We measured how close each query sits to its target document. Closeness here is cosine similarity, a measure of how alike two vectors are. Against the best card, it stays flat as topics grow: 0.476 at k=1 and 0.466 at k=10. Against the pooled vector, it falls steadily from 0.476 to 0.225.

Simple theory treats the pooled vector as the average of k unrelated topic vectors. That predicts closeness falls with one over the square root of k. The measured fall follows k to the power -0.32. It stays above the prediction at every k. Real topics are not fully unrelated. The passages share style and grammar, and encoders squeeze differences together. So the theory gives the worst case for dilution. It is not a forecast the data confirm.

Step 3: more pieces, or better pieces? The LIMIT test

LIMIT is a public test set built to break one-vector search (Weller, Boratko, Naim, Lee, arXiv:2508.21038, Aug 2025). Its authors prove a limit. For a vector of fixed size, some groups of documents can never come back together in the top results. Leading embedding models hit that limit in practice. Each LIMIT document names a person and lists things they like. Each query asks who likes one specific thing. The small version has 46 documents, 44 attributes each, and 1,000 queries. The task looks trivial, yet it defeats meaning-based search. It also gives a perfect split for free: one card per attribute.

Measured result

LIMIT-small: five systems, one encoder

nDCG@10 over 1,000 queries. Every gap against the pooled vector is significant at p=0.0001, after Holm correction for many comparisons.

BM25 keyword search
0.997
Meaning-based, pooled
0.314
Meaning-based, 30-word chunks (4 per document)
0.390
Meaning-based, per-attribute cards (44 per document)
0.988
Cards fused with BM25
0.997
0.0000.2500.5000.7501.000

Keyword search wins outright, because LIMIT queries name an exact attribute. The pooled vector fails. Per-attribute cards recover it. The hybrid matches BM25. The 30-word chunk setup is not a matched control here. It has 4 pieces per document against the cards' 44.

Table view
CategorynDCG@10
BM25 keyword search0.997
Meaning-based, pooled0.314
Meaning-based, 30-word chunks (4 per document)0.390
Meaning-based, per-attribute cards (44 per document)0.988
Cards fused with BM250.997

Source: Author-reported experiment, August 2026. The comparison and limitations are described on this page.

We first credited the cards' 0.674 gain to their topic shape, because 30-word chunks gained only 0.076. That was wrong. A reviewer whose job was to break the result reran the test. It changed only the chunk size, as described in how to test a context design. The score rose smoothly with the number of pieces per document.

Measured result

Blind windows against pieces per document

The same text and encoder. Only the window width changes. Cards sit at 44 pieces per document.

0.4000.6000.8001.0004.010.824.736.844Pieces per documentnDCG@10Per-attribute cardsBlind sliding windows
  • Blind sliding windows
  • Per-attribute cards

A three-word sliding window that ignores meaning recovers 0.610 of the 0.674 that cards gain. It uses no topics and no anchors. The cards' edge at the same number of pieces is +0.064. Using the bare attribute string instead of the card template adds a further +0.010 (p=0.0001).

Table view
CategoryBlind sliding windowsPer-attribute cards
4.00.390n/a
10.80.611n/a
24.70.892n/a
36.80.924n/a
44n/a0.988

Source: Author-reported experiment, August 2026. The comparison and limitations are described on this page.

Two things follow. First, more pieces are needed, and they explain most of the LIMIT result. The topic split must match the questions for the rest of the gain to appear. Second, LIMIT is a best case for cards. It hands over a perfect split, and its queries are exact-attribute lookups. That is why BM25 keyword search wins outright and the hybrid only matches it. Real documents arrive unsplit. Someone has to design the card types, and they may be wrong. So read the table as the most that topic-shaped cards can buy. Storage cost depends on the documents too. LIMIT needed 44 cards per document, far more than the small number the pattern assumes elsewhere.

A worked example

A utility's field work order often records a fault, the parts used and a safety note. One vector for the whole order blurs all three. A question about one safety issue then matches the order weakly. Plain chunks are the first fix. Topic cards are worth adding only if they beat those chunks on the questions engineers really ask. This example shows the shape of the problem. We did not test work orders.

What we conclude

Evidence and limits

Measured by the author The synthetic and LIMIT results reproduced exactly, or to floating-point precision, on two machines with two processor types. We ran both machines ourselves. Nobody else has repeated the tests yet.

The synthetic collection is built, not found. The one positive result for topic cards, +0.188, rests on it. The next test that matters is a real collection with single-topic questions judged by people.

Next step

See where topic cards lose, on real scientific text. Or go back to the nine context patterns.

Explore this topic

Cite this page

Written by Murali Sid, Founder and AI Systems Architect, last updated 15 October 2026. Licensed CC BY-SA 4.0, so quote it freely with attribution.

Murali Sid (2026). One vector blurs a document about many topics. Agentic Architecture Skills. https://www.agenticarchitectureskills.com/patterns/aspect-dilution

Machine-readable version of this page: /patterns/aspect-dilution.md

On this page