# Next-Concept Modeling: 9–31× faster than diffusion baselines

> Source: <https://github.com/HazyResearch/ncm>
> Published: 2026-10-18 20:38:43+00:00

**Fast, Parallel Coarse-to-Fine Text Generation**

Next-Concept Modeling (NCM) is a two-stage framework for parallel text generation. A multiscale residual VQ tokenizer represents a sequence as a hierarchy of discrete codes, and a transformer predicts that hierarchy from coarse to fine. Positions within a level are generated in parallel, so generation requires one forward evaluation per level.

NCM generates coarse to fine: each level predicts a longer sequence in parallel, and decoding every level shows a sample being refined from a rough sketch to the full output in a few steps.

NCM beats or matches strong diffusion baselines on different tasks & datasets while generating 9-31× faster.

Weights and tokenized datasets are hosted in the [NCM Hugging Face collection](https://huggingface.co/collections/hazyresearch/ncm). Each released model consists of a frozen tokenizer and a next-concept generator.

| Task | Model | Tokenizer | Generator | Config | Data | 
|---|---|---|---|---|---|
| **XSum** | – | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/xsum/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/xsum/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/xsum/config.yaml) | [test set](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/xsum) | 
| **WMT14 De–En** | – | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/wmt14/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/wmt14/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/wmt14/config.yaml) | [test set](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/wmt14) | 
| **Sudoku** | easy | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/easy/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/easy/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/easy/config.yaml) | [test boards](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/sudoku) | 
|  | medium | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/medium/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/medium/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/medium/config.yaml) |  | 
|  | hard | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/hard/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/hard/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/sudoku/hard/config.yaml) |  | 
| **LM1B** | small | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/small/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/small/config.yaml) | [tokenized text](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/lm1b) | 
|  | medium |  | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/medium/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/medium/config.yaml) |  | 
|  | large |  | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/large/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/lm1b/large/config.yaml) |  | 
| **TinyStories** | – | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/tinystories/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/tinystories/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/tinystories/config.yaml) | [tokenized text](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/tinystories) | 
| **OpenWebText** | – | [tokenizer.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/owt/tokenizer.pt) | [generator.pt](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/owt/generator.pt) | [config.yaml](https://huggingface.co/hazyresearch/ncm-checkpoints/blob/main/owt/config.yaml) | [tokenized text](https://huggingface.co/datasets/hazyresearch/ncm-datasets/tree/main/owt) | 

```
git clone https://github.com/HazyResearch/ncm.git
cd ncm
pip install -r requirements.txt
```

Python 3.10 or newer and a CUDA-capable PyTorch installation are recommended.

Download the checkpoints and evaluation inputs:

```
hf download hazyresearch/ncm-checkpoints --local-dir artifacts
hf download hazyresearch/ncm-datasets --repo-type dataset --local-dir data
```

Then run:

```
python evaluate.py --config config/eval/<task>.yaml --checkpoint-dir artifacts/<task> --data-dir data/<task>
# <task> is one of xsum, wmt14, sudoku-easy, sudoku-medium or sudoku-hard

python evaluate.py --config config/eval/<dataset>.yaml --checkpoint-dir artifacts/<dataset>
# <dataset> is tinystories, owt or lm1b-<size> with <size> one of small, medium or large
```

This runs one generation shard per visible GPU, merges them, and prints ROUGE-1/2/L and generative perplexity for XSum; cased and lowercased sacreBLEU, chrF and length ratio for WMT14; solved, cell and valid-grid rates for Sudoku; and generative perplexity under GPT-2 large with unigram entropy, over 5 seeds of 256 unconditional samples, for TinyStories, OpenWebText and LM1B, the latter under the FLM scoring protocol. Add `--cfg <scale>` for classifier-free guidance on XSum and WMT14; the guided WMT14 row uses `--cfg 1.0`.

- `evaluate.py` : evaluation entry point
- `scripts/` : per-GPU generation shard and the merge that scores it
- `config/eval/` : one config per released checkpoint, identical to the`config.yaml` shipped with it
- `models/` ,`tokenization/` : generator and tokenizer implementations

```
@misc{kumbong2026nextconcept,
      title={Next-Concept Modeling: Fast, Parallel Coarse-to-Fine Text Generation},
      author={Hermann Kumbong and Ishan S. Khare and Iddah Mlauzi and Andrew Woen and Charles Ding and E. Kelly Buchanan and Simran Arora and Azalia Mirhoseini and Christopher Ré},
      year={2026},
      eprint={2610.14162},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2610.14162},
}
```

Released under the [MIT license](https://github.com/HazyResearch/ncm/blob/main/LICENSE).
