Character-Name Concentration in LLM Fiction: Measuring Displacement and Mitigating Repetition
TL;DR Highlight
Drafting name candidates and filtering by frequency cut LLM character-name repetition by 95%
Who Should Read
A backend developer mass-generating LLM fiction who is stuck with the same Elara and Elias names every time
Core Mechanics
- Banlists just cause a balloon effect
- Banning the top 20 names cut known SR from 0.0703 to 0.0021.
- Emergent concentration became the highest of any strategy at 0.0142.
- Hemlock appeared 44 times for Gemma.
- "Avoid cliché names" prompts do not work
- The prompt raised SR by +0.011 and worsened it in 13 of 20 models.
- A concrete banned list (ban top 20) did significantly lower SR (−0.051).
- Placeholders plus five candidate sets do most of the work
- Write the story with [CHAR_1]-style slots first and fill names in a separate call.
- Asking for five name sets with probabilities (verbalized sampling) cut SR by 89% with no penalty.
- A runtime frequency counter closes the last gap
- Candidates are scored by the larger of the model's baseline frequency and the current run's counter.
- High-scoring sets are rejected or down-weighted.
- Selected names go into the counter for later stories.
- HARD mode kept names natural
- It picks the highest-probability set whose names all score below 0.02, falling back to the lowest total score.
- Attested real-name share stayed within 0.8-11.2 points of baseline.
- The banlist dropped German from 42.7% to 8.7%.
- Costs and limits are clear
- Token cost is a fixed 3.30x baseline.
- Only names were addressed, not plot diversity.
- The runtime counter is inactive until 50 names accumulate.
Evidence
- SR down 95%, collision probability 7.3% to 0.4%
- Based on 20 LLMs, four languages, and 44,782 stories.
- The sampling scaffold alone cut SR by 89% on average (0.073 to 0.008).
- HARD won 57 of 100 comparisons
- The next three strategies combined won 18+15+10=43.
- It had the best average rank in 15 of 20 models.
- Large cuts on API models too
- Gemini Flash Lite went from SR 0.188 to 0.006 and GPT-5.4 Nano from 0.038 to 0.001, both 97% reductions.
- Banlist hurt real-name share
- English attested share: baseline 52.2%, ban top 20 20.2%, speculative HARD 43.7%.
- Within-story name collisions fell from 4.3% to 0.2%.
How to Apply
- Ask for five name candidate sets with probabilities
- Add a second call right after story generation that only fills names.
- Request five sets as JSON with probabilities summing to 1.
- Try one prompt today.
- Keep a name frequency counter
- Store per-name counts in a Counter in your bulk-generation pipeline.
- Once 50 or more names accumulate, exclude candidate sets containing top names.
- Use dynamic exclusion instead of a static banlist
- Static banlists create new attractors.
- Save each model's top baseline names and reject candidates scoring 0.02 or higher.
- Measure concentration with Slop Ratio
- Compute Σci(ci−1)/(N(N−1)) from name counts ci.
- Compare before and after changes to spot the balloon effect.
Try It
# Paste into Claude or ChatGPT (simplified version of the paper's method: only the five-candidates-with-probabilities step, no counter)
Write a short story from the plot below using placeholders like [CHAR_1], [CHAR_2] instead of names.
Plot: {{plot}}
Then propose 5 candidate name sets for the placeholders. Give each set a probability, summing to 1. Avoid common AI-style names. Output as JSON.
Next to try: tell it the names already used, {{previously_used_names}}, and ask it to exclude overlapping sets.Terminology
Related Papers
LLM Voice
Martin Fowler: LLM-drafted prose keeps an uncanny tone even after human editing.
The Instruction Tax on Factual Recall: Base Models Can Beat Their Instruction-Tuned Counterparts
Few-shot completion with repeated sampling on a base model beat chat: F1 0.684 vs 0.568
AI is a tool and using it well takes skill
A rebuttal to Hickey: LLMs are tools, and skill in directing and checking them decides the outcome
Reflective Prompt Optimization of a Deep-Research Agent: A Topic-Disjoint, Multi-Seed Protocol for Measuring Transferable Gains and Prompt-Level Overfitting
Reflective prompt optimization raised held-out citation reward from 0.702 to 0.781 on a deep-research agent.
GPT‑6 and Intelligent UI for everyone
GPT-6 reportedly adds generated UI to chat; with no article text, only comment reactions are available.
Base Models Can Reason By Taking a Cue From Training Data
Prefilling just two opening tokens lifted Olmo-3-7B's MATH-500 accuracy from 42% to 78%.
Labels Override Definitions in Jev-Style Typed Decision Models
Renaming options to A/B raised routing accuracy by +0.1511 over meaningful labels.
How Much Prompt Is Enough? A Blackbox Minimization of Few-Shots in LLMs
Delta debugging trimmed few-shot prompts by 65.3% on average with unchanged propositional output
Related Resources
Original Abstract (Expand)
Character names in large language model (LLM) fiction concentrate on a handful of recurrent names such as 'Elara' and 'Elias', a measurable face of AI slop. Existing fixes either require logit access or retraining, or operate per request and cannot control concentration across a corpus. How much prompt-level strategies reduce concentration, and at what cost to name naturalness, has not been systematically measured. We present an empirical study of name-concentration control across eight strategies and introduce speculative naming, a fine-tuning-free method that adapts the draft-verify-reject paradigm of speculative decoding from tokens to names. The method requests candidate name-sets through verbalized sampling, scores them against a SlopTracker that combines a per-model fingerprint with a runtime counter, and selects through a temperature-controlled rule or its strict variant (HARD). We use 20 LLMs to generate 44,782 stories in four languages from text and visual stimuli (88,919 named characters), and measure concentration with a list-free collision metric (Slop Ratio, SR) decomposed into known and emergent components. List-based strategies do not remove slop: static banlists displace concentration to emergent names and more than halve the share of attested real names. Speculative naming removes it: the sampling scaffold alone cuts SR by 89% on average, the dynamic tracker brings the total reduction to 95%, mean collision probability falls from 7.3% to 0.4%, and known-name collisions hold at zero while naturalness stays close to baseline (42-69% attested by language) and within-story collisions drop from 4.3% to 0.2%. The strategy ranking is stable across languages, model families, and name-counting conventions. Name concentration is thus controllable at the corpus level without logit access or retraining; broader creative diversity beyond naming remains open.