|
Download README.md from AdaptiveChunking/hnet-chunking-pilots: direct link, hf CLI and curl.
- Browser
- Download file 3.07 kB
-
https://huggingface.co/AdaptiveChunking/hnet-chunking-pilots/resolve/main/README.md
- Command line
-
hf download hf://AdaptiveChunking/hnet-chunking-pilots/README.md
-
curl -L -o README.md https://huggingface.co/AdaptiveChunking/hnet-chunking-pilots/resolve/main/README.md
3.07 kB
| license: apache-2.0 | |
| library_name: pytorch | |
| tags: [dynamic-chunking, tokenization, hnet, byte-level, interpretability] | |
| # H-Net dynamic-chunking pilot models | |
| 31 byte-level H-Net checkpoints (22.5M params, 6000 steps) trained to study **what a | |
| learned chunker discovers when it is free to choose its own computational granularity**. | |
| Every run shares data, seed schedule and FLOP budget; only the chunker's objective varies. | |
| ## Runs | |
| | family | n | what varies | | |
| |---|---|---| | |
| | `pilot_A_s{0,1,2}` | 3 | no parity loss — the natural chunker (baseline) | | |
| | `pilot_B_s{0,1,2}` | 3 | parity loss, per-content-matched-sentence beta | | |
| | `pilot_C_s{0,1,2}` | 3 | parity applied then removed (reversion arm) | | |
| | `pilot_D_s{0,1,2}` | 3 | stronger equalisation | | |
| | `pilot_E_s{0,1,2}` | 3 | entropy-matched variant | | |
| | `pilot_Apc_s{0,1,2}` | 3 | per-codepoint control | | |
| | `pilot_Bpc_s{0,1,2}` | 3 | parity loss, per-codepoint beta | | |
| | `emactl_noema_s{0,1,2}` | 3 | EMA ablation control (built from A) | | |
| | `emactl_genreg_s{0,1,2}` | 3 | generic-regularisation control, entropy-matched to B | | |
| | `jitter_s{0,1,2}` | 3 | threshold-jitter training (tau ~ U[0.30, 0.75]) | | |
| | `baseline_en` | 1 | English-only baseline | | |
| ## Format | |
| Weights are `model.safetensors`; `config.json` carries `model_config`, the training config, | |
| and a `tied_weights` map. `emb.weight` and `head.weight` are tied, so only `emb.weight` is | |
| stored — restore with: | |
| ```python | |
| from safetensors.torch import load_file | |
| import json | |
| sd = load_file("model.safetensors") | |
| cfg = json.load(open("config.json")) | |
| for dst, src in cfg["tied_weights"].items(): | |
| sd[dst] = sd[src] # head.weight <- emb.weight | |
| ``` | |
| Verified bit-exact against the original training checkpoints (`max|Δ| = 0.0`, 111 tensors). | |
| `final.json` and `log.jsonl` are the trainer's own records. | |
| ## What these were used to find | |
| - Segmentation crystallises **after** capability: the router lags BPB descent in 36/36 | |
| language-seed pairs at half of each clock's own change. | |
| - Learned units are **not linguistic**. Morpheme F1 sits at or below a rate-matched random | |
| baseline; gold word+morph features add ≤0.001 held-out AUROC over computational features | |
| in 9/9 languages. | |
| - Chunks are **not functionally localised**: aligned-minus-misaligned activation patching is | |
| at the construction rate (0/28 cells above 2 across-seed SD), while killing the whole chunk | |
| pathway costs +0.34 nats/byte. Information is additive and diffuse across chunks. | |
| - The chunk-level main network is worth only **~0.07 BPB** at this scale. | |
| Negative results are reported as results. See the companion | |
| [results dataset](https://huggingface.co/datasets/AdaptiveChunking/hnet-chunking-results) | |
| and [probe dataset](https://huggingface.co/datasets/AdaptiveChunking/hnet-chunking-probes). | |
| ## Limitations | |
| 16.2M/22.5M params, 6000 steps, one hierarchy stage, 3 seeds. Only the final step was | |
| retained (`keep_ckpt: false`), so no intermediate weights exist. Third-party models used for | |
| comparison (`allenai/Bolmo-1B`, BLT, ByT5) are **not** redistributed here. | |