Controllable Readability in Text Diffusion Models via Gaze-Guided Parallel Decoding
Rahil Singhi · Siddhant · Prof. Sai Qian Zhang NYU Tandon / Courant · SAI Lab · 2026
We apply eye-tracking gaze signals to steer text generation in masked diffusion language models — guiding all token positions simultaneously at each denoising step. Unlike autoregressive gaze guidance (Sauberli et al., EACL 2026), which operates one token at a time, GazeDiffuse produces more globally coherent readability changes by leveraging diffusion's parallel decoding.
Key result: GazeDiffuse is the first method to combine gaze-guided generation with text diffusion models. It is training-free — requiring only a lightweight gaze predictor atop a frozen pretrained MDLM.
[prompt tokens] + [MASK] * gen_lengthscore = log P_LM(token) + λ · gaze(token)λ < 0 → easier text (favor low-fixation words)λ > 0 → harder text (favor high-fixation words)λ = 0 → unguided baselineBERT-base fine-tuned on the GECO eye-tracking corpus (5,031 sentences, 14 participants). Predicts mean fixation duration per word-in-context using a context window of 5 tokens on each side.
| Method | FKGL (λ=-1) | FKGL (λ=0) | FKGL (λ=+1) | MAUVE | Self-PPL | FK Var. |
|---|---|---|---|---|---|---|
| Unguided MDLM | — | baseline | — | — | — | — |
| AR + Gaze (GPT-2) | TBD | TBD | TBD | TBD | TBD | TBD |
| GazeDiffuse (MDLM) | TBD | TBD | TBD | TBD | TBD | TBD |
| GazeDiffuse (LLaDA 8B) | TBD | TBD | TBD | TBD | TBD | TBD |
Results will be filled as experiments complete. See experiment plan below.
git clone https://github.com/<your-org>/gaze-diffuse.git
cd gaze-diffuse
git submodule update --init --recursive
pip install -e ".[dev]"
python3 -m pytest tests/ -v # Verify 69 tests pass
# Connect via VPN (Microsoft device login, no SSH keys)
ssh rs9174@login.torch.hpc.nyu.edu # or: ssh torch
cd $SCRATCH
git clone <repo-url> gaze-diffuse && cd gaze-diffuse
bash scripts/setup_hpc.sh # Create conda env + install all deps
bash scripts/download_data.sh # Download GECO eye-tracking corpus
bash scripts/download_checkpoints.sh # Download MDLM-OWT checkpoint (~1.2GB)
gaze-diffuse/
├── src/
│ ├── gaze_predictor.py # BERT-based fixation duration predictor (Exp 2)
│ ├── gaze_guidance.py # GazeDiffuse sampler — core contribution (Exp 4)
│ ├── ar_baseline.py # AR gaze guidance baseline (Exp 3)
│ ├── metrics.py # FKGL, ARI, MAUVE, self-PPL, FK variance
│ ├── data/
│ │ ├── geco.py # GECO corpus loader + subject-level CV splits
│ │ └── prompts.py # 50 shared prompt seeds
│ └── models/
│ └── mdlm_wrapper.py # MDLM + LLaDA inference wrappers
├── tests/ # 69 tests (unit + integration + smoke), pytest
├── scripts/
│ ├── setup_hpc.sh # One-time HPC environment setup
│ ├── download_data.sh # Download eye-tracking datasets
│ ├── download_checkpoints.sh # Download model checkpoints
│ └── slurm/ # SLURM batch templates (Experiments 1-5)
├── submodules/
│ ├── mdlm/ # MDLM (Sahoo et al., NeurIPS 2024)
│ └── llada/ # LLaDA 8B (Nie et al., NeurIPS 2025)
├── configs/ # Hydra experiment configs
├── CLAUDE.md # AI assistant context
└── pyproject.toml # Project metadata + dev dependencies
All experiments use the same 50 prompt seeds and evaluation metrics for fair comparison.
| # | Experiment | GPU | Time | Owner | Week |
|---|---|---|---|---|---|
| 1 | MDLM baseline PPL on OpenWebText | 1× RTX8000 | ~2h | Rahil | 1 |
| 2 | Gaze predictor training (BERT on GECO) | 1× RTX8000 | ~30min | Siddhant | 1-2 |
| 3 | AR gaze guidance baseline (GPT-2, λ sweep) | 1× RTX8000 | ~8h | Siddhant | 2-3 |
| 4 | GazeDiffuse on MDLM (λ × steps grid) | 1× RTX8000 | ~12h | Rahil | 3-4 |
| 5 | GazeDiffuse on LLaDA 8B (λ subset) | 1× A100 | ~12h | Both | 4-5 |
# On Torch HPC:
sbatch scripts/slurm/exp1_mdlm_baseline.slurm
sbatch scripts/slurm/exp2_gaze_predictor.slurm
sbatch scripts/slurm/exp3_ar_baseline.slurm
sbatch scripts/slurm/exp4_gazediffuse_mdlm.slurm
sbatch scripts/slurm/exp5_gazediffuse_llada.slurm
python -m src.metrics \
--input results/gazediffuse_lam-1.0_steps64.jsonl \
--reference results/gazediffuse_lam0.0_steps64.jsonl \
--output results/metrics.json
| Metric | What it Measures | Paper Role |
|---|---|---|
| FKGL (Flesch-Kincaid Grade Level) | Readability level | Primary — shows guidance shifts reading difficulty |
| ARI (Automated Readability Index) | Readability (corroborates FKGL) | Secondary confirmation |
| MAUVE | Distributional similarity to unguided text | Fluency preservation |
| Self-PPL | Perplexity under base LM | Coherence preservation |
| FK Sentence Variance | Readability consistency across sentences | Key claim: parallel < sequential variance |
| Paper | Venue | Key Idea | Our Difference |
|---|---|---|---|
| Sauberli et al. | EACL 2026 | Gaze guidance for AR LLMs (GPT-2) | We apply to masked diffusion — all tokens guided in parallel |
| MDLM (Sahoo et al.) | NeurIPS 2024 | Masked diffusion LM, SOTA PPL | We add gaze-guided readability control |
| LLaDA (Nie et al.) | NeurIPS 2025 | 8B masked diffusion LLM | We extend to show method scales |
| Diffusion-LM (Li et al.) | NeurIPS 2022 | Classifier guidance for continuous diffusion | We work in discrete space with gaze, not classifiers |
| DiTAS (Zhang Lab) | WACV 2025 | PTQ for image DiTs | Architecture connection — future quantization work |
@inproceedings{singhi2026gazediffuse,
title={GazeDiffuse: Controllable Readability in Text Diffusion Models
via Gaze-Guided Parallel Decoding},
author={Singhi, Rahil and Siddhant and Zhang, Sai Qian},
booktitle={Proceedings of EMNLP},
year={2026}
}
MIT License. See LICENSE for details.
28 commits
Python
86.1%
TeX
7.2%
Shell
6.4%
Controllable Readability in Text Diffusion Models via Gaze-Guided Parallel Decoding
Rahil Singhi · Siddhant · Prof. Sai Qian Zhang NYU Tandon / Courant · SAI Lab · 2026
We apply eye-tracking gaze signals to steer text generation in masked diffusion language models — guiding all token positions simultaneously at each denoising step. Unlike autoregressive gaze guidance (Sauberli et al., EACL 2026), which operates one token at a time, GazeDiffuse produces more globally coherent readability changes by leveraging diffusion's parallel decoding.
Key result: GazeDiffuse is the first method to combine gaze-guided generation with text diffusion models. It is training-free — requiring only a lightweight gaze predictor atop a frozen pretrained MDLM.
[prompt tokens] + [MASK] * gen_lengthscore = log P_LM(token) + λ · gaze(token)λ < 0 → easier text (favor low-fixation words)λ > 0 → harder text (favor high-fixation words)λ = 0 → unguided baselineBERT-base fine-tuned on the GECO eye-tracking corpus (5,031 sentences, 14 participants). Predicts mean fixation duration per word-in-context using a context window of 5 tokens on each side.
| Method | FKGL (λ=-1) | FKGL (λ=0) | FKGL (λ=+1) | MAUVE | Self-PPL | FK Var. |
|---|---|---|---|---|---|---|
| Unguided MDLM | — | baseline | — | — | — | — |
| AR + Gaze (GPT-2) | TBD | TBD | TBD | TBD | TBD | TBD |
| GazeDiffuse (MDLM) | TBD | TBD | TBD | TBD | TBD | TBD |
| GazeDiffuse (LLaDA 8B) | TBD | TBD | TBD | TBD | TBD | TBD |
Results will be filled as experiments complete. See experiment plan below.
git clone https://github.com/<your-org>/gaze-diffuse.git
cd gaze-diffuse
git submodule update --init --recursive
pip install -e ".[dev]"
python3 -m pytest tests/ -v # Verify 69 tests pass
# Connect via VPN (Microsoft device login, no SSH keys)
ssh rs9174@login.torch.hpc.nyu.edu # or: ssh torch
cd $SCRATCH
git clone <repo-url> gaze-diffuse && cd gaze-diffuse
bash scripts/setup_hpc.sh # Create conda env + install all deps
bash scripts/download_data.sh # Download GECO eye-tracking corpus
bash scripts/download_checkpoints.sh # Download MDLM-OWT checkpoint (~1.2GB)
gaze-diffuse/
├── src/
│ ├── gaze_predictor.py # BERT-based fixation duration predictor (Exp 2)
│ ├── gaze_guidance.py # GazeDiffuse sampler — core contribution (Exp 4)
│ ├── ar_baseline.py # AR gaze guidance baseline (Exp 3)
│ ├── metrics.py # FKGL, ARI, MAUVE, self-PPL, FK variance
│ ├── data/
│ │ ├── geco.py # GECO corpus loader + subject-level CV splits
│ │ └── prompts.py # 50 shared prompt seeds
│ └── models/
│ └── mdlm_wrapper.py # MDLM + LLaDA inference wrappers
├── tests/ # 69 tests (unit + integration + smoke), pytest
├── scripts/
│ ├── setup_hpc.sh # One-time HPC environment setup
│ ├── download_data.sh # Download eye-tracking datasets
│ ├── download_checkpoints.sh # Download model checkpoints
│ └── slurm/ # SLURM batch templates (Experiments 1-5)
├── submodules/
│ ├── mdlm/ # MDLM (Sahoo et al., NeurIPS 2024)
│ └── llada/ # LLaDA 8B (Nie et al., NeurIPS 2025)
├── configs/ # Hydra experiment configs
├── CLAUDE.md # AI assistant context
└── pyproject.toml # Project metadata + dev dependencies
All experiments use the same 50 prompt seeds and evaluation metrics for fair comparison.
| # | Experiment | GPU | Time | Owner | Week |
|---|---|---|---|---|---|
| 1 | MDLM baseline PPL on OpenWebText | 1× RTX8000 | ~2h | Rahil | 1 |
| 2 | Gaze predictor training (BERT on GECO) | 1× RTX8000 | ~30min | Siddhant | 1-2 |
| 3 | AR gaze guidance baseline (GPT-2, λ sweep) | 1× RTX8000 | ~8h | Siddhant | 2-3 |
| 4 | GazeDiffuse on MDLM (λ × steps grid) | 1× RTX8000 | ~12h | Rahil | 3-4 |
| 5 | GazeDiffuse on LLaDA 8B (λ subset) | 1× A100 | ~12h | Both | 4-5 |
# On Torch HPC:
sbatch scripts/slurm/exp1_mdlm_baseline.slurm
sbatch scripts/slurm/exp2_gaze_predictor.slurm
sbatch scripts/slurm/exp3_ar_baseline.slurm
sbatch scripts/slurm/exp4_gazediffuse_mdlm.slurm
sbatch scripts/slurm/exp5_gazediffuse_llada.slurm
python -m src.metrics \
--input results/gazediffuse_lam-1.0_steps64.jsonl \
--reference results/gazediffuse_lam0.0_steps64.jsonl \
--output results/metrics.json
| Metric | What it Measures | Paper Role |
|---|---|---|
| FKGL (Flesch-Kincaid Grade Level) | Readability level | Primary — shows guidance shifts reading difficulty |
| ARI (Automated Readability Index) | Readability (corroborates FKGL) | Secondary confirmation |
| MAUVE | Distributional similarity to unguided text | Fluency preservation |
| Self-PPL | Perplexity under base LM | Coherence preservation |
| FK Sentence Variance | Readability consistency across sentences | Key claim: parallel < sequential variance |
| Paper | Venue | Key Idea | Our Difference |
|---|---|---|---|
| Sauberli et al. | EACL 2026 | Gaze guidance for AR LLMs (GPT-2) | We apply to masked diffusion — all tokens guided in parallel |
| MDLM (Sahoo et al.) | NeurIPS 2024 | Masked diffusion LM, SOTA PPL | We add gaze-guided readability control |
| LLaDA (Nie et al.) | NeurIPS 2025 | 8B masked diffusion LLM | We extend to show method scales |
| Diffusion-LM (Li et al.) | NeurIPS 2022 | Classifier guidance for continuous diffusion | We work in discrete space with gaze, not classifiers |
| DiTAS (Zhang Lab) | WACV 2025 | PTQ for image DiTs | Architecture connection — future quantization work |
@inproceedings{singhi2026gazediffuse,
title={GazeDiffuse: Controllable Readability in Text Diffusion Models
via Gaze-Guided Parallel Decoding},
author={Singhi, Rahil and Siddhant and Zhang, Sai Qian},
booktitle={Proceedings of EMNLP},
year={2026}
}
MIT License. See LICENSE for details.
28 commits
Python
86.1%
TeX
7.2%
Shell
6.4%