|
Download README.md from Compactbot/repetition-diagnostic: direct link, hf CLI and curl.
- Browser
- Download file 2.87 kB
-
https://huggingface.co/Compactbot/repetition-diagnostic/resolve/refs%2Fpr%2F2/README.md
- Command line
-
hf download hf://Compactbot/repetition-diagnostic@refs/pr/2/README.md
-
curl -L -o README.md https://huggingface.co/Compactbot/repetition-diagnostic/resolve/refs%2Fpr%2F2/README.md
2.87 kB
| # Repetition Diagnostic | |
| A builder tool for tiny language model developers. Sweeps `repetition_penalty` values and measures how they affect generation quality. | |
| ## Why | |
| Tiny models (<50M params) are extremely prone to degenerate repetition loops. The default `repetition_penalty=1.0` means **no penalty** — the model can output the same token forever. Most training scripts don't test generation quality, so you discover this at inference time with no idea what to do. | |
| This tool gives you a quick diagnostic: sweep the penalty, see where quality peaks, and know what to set in your inference config. | |
| ## What it measures | |
| | Metric | Description | | |
| |--------|-------------| | |
| | **Repetition rate** | Fraction of output tokens that already appeared earlier in the sequence | | |
| | **Unique token ratio** | Unique tokens / total tokens (diversity) | | |
| | **Max loop length** | Longest repeated n-gram (how deep the loop goes) | | |
| | **Repeated trigrams** | Count of 3-token sequences appearing 2+ times | | |
| ## Usage | |
| ```bash | |
| # Basic: sweep penalties on a single prompt | |
| python3 repetition_diagnostic.py --model gpt2 --prompt "Once upon a time" | |
| # Multiple prompts | |
| python3 repetition_diagnostic.py --model gpt2 --prompts "Once upon a time|The cat sat|I want to" | |
| # Custom penalty range | |
| python3 repetition_diagnostic.py --model gpt2 --penalties "1.0,1.05,1.1,1.2,1.5" | |
| # Save results as JSON | |
| python3 repetition_diagnostic.py --model gpt2 --output results.json | |
| ``` | |
| ## Example output | |
| ``` | |
| Model: gpt2 | |
| Prompts: ['Once upon a time'] | |
| Penalties: [1.0, 1.1, 1.2, 1.5, 2.0] | |
| Prompt RP Tokens Repet Unique MaxLoop RepTri | |
| ------------------------------------------------------------------------ | |
| Once upon a time 1.0 48 25.5% 72.9% 3 1 | |
| Once upon a time 1.1 48 0.0% 100.0% 0 0 | |
| Once upon a time 1.2 48 0.0% 100.0% 0 0 | |
| Once upon a time 1.5 48 0.0% 100.0% 0 0 | |
| Once upon a time 2.0 48 0.0% 100.0% 0 0 | |
| ``` | |
| ## Interpretation | |
| - **rp=1.0 with high repetition rate**: Your model has a repetition problem. Try rp=1.1 or 1.2. | |
| - **rp=1.1 already fixes it**: Good — your model is mostly fine, just needs a small nudge. | |
| - **Even rp=2.0 still shows loops**: The model is severely undertrained or has a degenerate mode. No penalty will save it. | |
| - **rp=1.0 shows no repetition**: Your model is robust. You can use the default. | |
| ## Requirements | |
| - Python 3.8+ | |
| - `torch` | |
| - `transformers` | |
| ```bash | |
| pip install torch transformers | |
| ``` | |
| ## Notes | |
| - Uses the same seed for all penalty values so the comparison is fair (same random draws, different penalty). | |
| - Generation is done manually (not `model.generate()`) so the penalty is applied exactly as specified, without HuggingFace's internal logic. | |
| - Works with any model that `AutoModelForCausalLM` can load. |