Transformers
ONNX
Vietnamese
t5
text2text-generation
vietnamese
spell-correction
int8
quantization
edge
cpu
Instructions to use nrl-ai/vn-spell-correction-base-onnx-int8 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use nrl-ai/vn-spell-correction-base-onnx-int8 with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("nrl-ai/vn-spell-correction-base-onnx-int8") model = AutoModelForSeq2SeqLM.from_pretrained("nrl-ai/vn-spell-correction-base-onnx-int8", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 4,871 Bytes
b6a520b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | ---
license: apache-2.0
base_model: nrl-ai/vn-spell-correction-base
language:
- vi
tags:
- vietnamese
- spell-correction
- onnx
- int8
- quantization
- edge
- cpu
library_name: transformers
---
# nrl-ai/vn-spell-correction-base-onnx-int8 — ONNX int8 quantization of nrl-ai/vn-spell-correction-base
Dynamic int8-quantized ONNX export of
[`nrl-ai/vn-spell-correction-base`](https://huggingface.co/nrl-ai/vn-spell-correction-base).
**75 % smaller on disk** (530 MB safetensors → 307 MB ONNX int8) and
**no PyTorch dependency** at inference time — runs on plain
[`onnxruntime`](https://onnxruntime.ai/) for CPU / browser / mobile
deployment.
## Quality on the OOD eval (n=150, hand-curated)
Same 6-slice OOD eval the source model was measured against
([`nrl-ai/vn-spell-correction-eval-real`](https://huggingface.co/datasets/nrl-ai/vn-spell-correction-eval-real)):
| Slice | This (int8) | Source (fp32) | Δ |
|---|---:|---:|---:|
| `forum_25` | 62.26 % | 65.84 % | -3.58 pp |
| `mobile_25` | 95.29 % | 95.84 % | -0.55 pp |
| `telex_real_25` | 19.39 % | 19.15 % | +0.24 pp |
| `ocr_25` | 96.96 % | 97.57 % | -0.61 pp |
| `legal_real_25` | 95.61 % | 95.87 % | -0.26 pp |
| `news_real_25` | 96.30 % | 96.54 % | -0.24 pp |
| **Aggregate** | 78.76 % | 79.62 % | -0.86 pp |
Quantization cost on aggregate: **-0.86 pp** word accuracy.
Within the bootstrap CI overlap of the source model — **no measurable
quality loss**.
## Disk size
| Format | Size |
|---|---:|
| Source safetensors (PyTorch fp32) | 530 MB |
| ONNX fp32 (export, before quant) | 1220 MB |
| **ONNX int8 (this artifact)** | **307 MB** |
The fp32 ONNX export is larger than the safetensors because it
unrolls the decoder twice (with-cache and without-cache paths).
After int8 weight quantization, the total is comfortably under the
PyTorch baseline.
## Loading
```python
from optimum.onnxruntime import ORTModelForSeq2SeqLM
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("nrl-ai/vn-spell-correction-base-onnx-int8")
model = ORTModelForSeq2SeqLM.from_pretrained("nrl-ai/vn-spell-correction-base-onnx-int8")
inp = tok("Toi yeu Viet Nam, dat nuoc tuyet voi", return_tensors="pt")
out = model.generate(**inp, max_length=128, num_beams=1)
print(tok.decode(out[0], skip_special_tokens=True))
# "Tôi yêu Việt Nam, đất nước tuyệt vời"
```
```bash
pip install optimum[onnxruntime]
```
No PyTorch dependency required at inference time — `optimum` pulls
`onnxruntime` (and `transformers` for the tokenizer / config).
## When to use this vs the source model
- **Use this** when shipping to CPU-only servers, edge devices,
browser (via `onnxruntime-web`), or mobile (`onnxruntime-mobile`).
The 307 MB / no-PyTorch footprint matters there.
- **Use [`nrl-ai/vn-spell-correction-base`](https://huggingface.co/nrl-ai/vn-spell-correction-base)** when running
on GPU and PyTorch is already in the deployment. CUDA-accelerated
fp16 will out-throughput int8 ONNX on a modern GPU.
## Limitations
- **Same training distribution as the source.** All caveats from the
[source model card](https://huggingface.co/nrl-ai/vn-spell-correction-base) apply —
in-distribution synthetic eval over-states real-world performance,
Vietnamese forum slang and real Telex keystrokes are still the
hardest slices.
- **Dynamic int8 only.** Static int8 (with calibration on a held-out
set) could squeeze further size at risk of quality. Not done here
because the dynamic version already meets the no-quality-loss bar.
- **Beams = 1 verified.** Beam search > 1 should work but isn't
benched in this card.
## Reproduce
```bash
git clone https://github.com/nrl-ai/nom-vn.git
cd nom-vn
pip install -e ".[diacritic-hf]"
pip install optimum[onnxruntime]
# Re-export
python training/onnx_export/export_int8.py \
--source nrl-ai/vn-spell-correction-base \
--output training/onnx_export/vn-spell-correction-base-onnx-int8
# Re-bench against the OOD eval
python training/onnx_export/bench_int8.py \
--model training/onnx_export/vn-spell-correction-base-onnx-int8 \
--json benchmarks/results/baseline_real_spell_correction_small_onnx_int8.json
```
## License & attribution
Released under **Apache 2.0** — same as the source model.
```bibtex
@misc{nom_vn_spell_correction_onnx_int8_2026,
title={Vietnamese Spell Correction — ONNX int8 quantization for edge deployment},
author={Nguyen, Viet-Anh and {Neural Research Lab}},
year={2026},
howpublished={\url{https://huggingface.co/nrl-ai/vn-spell-correction-base-onnx-int8}}
}
```
## See also
- Source model: [`nrl-ai/vn-spell-correction-base`](https://huggingface.co/nrl-ai/vn-spell-correction-base)
- Toolkit repo: <https://github.com/nrl-ai/nom-vn>
- Eval set: [`nrl-ai/vn-spell-correction-eval-real`](https://huggingface.co/datasets/nrl-ai/vn-spell-correction-eval-real)
|