Adding Noise to a Signal That Wasn't There
- RAG Saturation
- Lost in the Middle
Third week in a row of null results on the RAG side, and that was the push I needed to change direction.
RAG saturation
I built a NoiseInjectionShiftGenerator that mixes filler documents into the corpus at factors from 0x to 2x. Every factor produced the same metrics: EM 1.0, Recall 1.0, Jaccard 1.0, and a gap of 0.0. Because the corpus is mostly duplicates of the relevant documents, injected noise never even reaches the top 5.
Three nulls in a row made the diagnosis clear: the corpus design itself is the bottleneck. To measure saturation I need a corpus of genuinely unique documents, so next up is a loader for external datasets.
Lost in the Middle
I added a distractor-count override and ran a 'noise shift' with 10 distractors (11 passages in total). The pattern held: 0.50 overall, perfect at the edges, zero in the middle, with the middle buckets now landing at different indices.
A subtlety I didn't appreciate at the time: my examples only have four unique distractors, so filling ten slots means repeating them. The context gets longer, but not as much more varied as it looks. I later had to rewrite my claims about context length because of this.
Reflection
Experiment design has become the hardest part of this research. Writing the code is fast; making sure the experiment can actually distinguish the hypotheses is slow.