vietanhdev's picture
docs: remove invalid pipeline_tag (seq2seq model); the causal-LM widget/snippet echoed input unchanged
1ba6738 verified
|
Raw
History Blame Contribute Delete
4.87 kB
---
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)