
Character-Name Concentration in LLM Fiction: Measuring Displacement and Mitigating Repetition
Speculative naming is a fine-tuning-free method that cuts character-name repetition in LLM fiction. It adapts draft-verify-reject from speculative decoding to names, using verbalized sampling and a SlopTracker that combines a per-model fingerprint with a runtime counter. Across 20 LLMs and 44,782 stories in four languages, it cut Slop Ratio by 95% and mean collision probability from 7.3% to 0.4%. Static banlists only displaced the concentration to emergent names.
What it claims
Speculative naming is a prompt-level method from Universidad de Málaga (arXiv, October 2026) that controls how often LLM fiction reuses the same character names across a corpus. It needs no logit access and no fine-tuning, so it works with any model behind an API. The paper compares it against seven other configurations: a baseline, an anti-slop prompt, a banlist, two-pass generation, a multiagent reviewer, and three speculative-naming variants. These run on 20 LLMs, 44,782 stories and 88,919 named characters. Beyond the 95% Slop Ratio cut, the verbalized-sampling scaffold alone accounts for 89% on average. Within-story name collisions fall from 4.3% to 0.2%. The share of names attested in civil registries stays close to baseline (42 to 69% by language). Static banlists more than halve that share and push toward invented names.
How it works
Generation is two-pass with one extra call in between:
- The model writes the story with placeholders
[CHAR_1]...[CHAR_k]. - A drafting call requests K candidate name-sets, each with a self-reported probability p̂ᵢ summing to 1 (verbalized sampling).
- Each name gets a slop score s(n) = max(Bₘ(n), R(n)). Bₘ is a per-model frequency fingerprint built once from baseline output and then frozen. R is a runtime counter of name frequency in the current run. The set score sᵢ is the sum over its names.
- One set is selected, its names are substituted, and the counter is updated.
Selection has two modes. The soft rule samples set i with probability proportional to p̂ᵢ·exp(−λ·sᵢ). At λ = 0 this is plain verbalized sampling. As λ grows, sampling restricts to the lowest-scoring sets but keeps their relative stated probabilities. HARD mode takes the highest-p̂ set whose names all score below τ = 0.02, and falls back to the minimum-sᵢ set if none qualifies.
flowchart LR
A[Story with placeholders] --> B[Draft K name-sets + p̂]
F[Frozen baseline fingerprint] --> C[Score: max of fingerprint, counter]
R[Runtime counter] --> C
B --> C
C --> D{Mode}
D -->|soft| E[Sample by p̂·exp of −λs]
D -->|HARD| G[Top p̂ set with all s below 0.02]
E --> H[Substitute names]
G --> H
H --> RImplementation details that matter for reproduction:
- The runtime counter stays off until it holds more than 50 named characters (cold start).
- Names are normalized to the first given name, lowercased, with diacritics stripped. Single-character tokens are dropped.
- The counter counts character entities, not mentions.
- One counter is shared per model-strategy cell across all four languages and both input modes. A name overused in English is penalized in Spanish too.
Evidence
The metric is the Slop Ratio, a list-free collision measure split into known and emergent components. This split separates real removal from displacement. Mean collision probability falls from 7.3% to 0.4% under speculative naming, and known-name collisions stay at zero. Banlists lower the known component but raise the emergent one, which the authors call a "balloon effect". Two-pass generation is tested specifically for whether concentration re-emerges on new names.
The authors report other findings:
- Dynamic runtime scoring gives the lowest concentration at a fixed cost premium over cheaper strategies.
- Vision input lowers slop in four of five dual-mode model families.
- Slop profiles are model- and language-specific.
- Reasoning mode leaves name diversity unchanged.
- The strategy ranking holds across languages, families and name-counting conventions.
Statistics use bootstrap CIs, effect sizes and Holm-corrected tests.
How to use it
The fetched text gives no code, repository or licence. It does give the full algorithm, including the HARD threshold, the cold-start size and the normalization rules. The method requires a story prompt that can be rewritten to emit placeholders, plus a baseline run per model to build the fingerprint.
Limits
- The tracker scores names independently, so two placeholders in one set can get the same normalized name. Such collisions are only penalized in later stories.
- The method covers names only. The authors leave broader creative diversity open.
- The method costs one model call more than plain two-pass generation. The fetched text does not quantify the premium.
- The fetched text stops partway through Section 3, so per-model tables, the language list and cost figures were not available.
Organisations named here
- arXiv
Technologies named here
- LLM
- SlopTracker
Techniques named here
- Verbalized Sampling
- Speculative decoding
- HARD
- speculative naming
Concepts named here
- AI slop
- Displacement of concentration
- Name concentration
- Name naturalness
- Slop Ratio
- SlopTracker
Related in research



