File size: 8,535 Bytes
301d4cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28d6603
301d4cf
 
 
 
 
 
 
 
 
 
 
28d6603
301d4cf
 
 
 
28d6603
301d4cf
28d6603
 
301d4cf
 
 
28d6603
301d4cf
28d6603
 
301d4cf
 
28d6603
301d4cf
28d6603
 
301d4cf
 
 
 
 
aa46825
28d6603
 
301d4cf
28d6603
 
 
301d4cf
aa46825
301d4cf
aa46825
301d4cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28d6603
301d4cf
 
 
28d6603
301d4cf
 
 
28d6603
301d4cf
 
 
28d6603
 
 
301d4cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aa46825
301d4cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28d6603
 
 
 
 
 
 
 
 
 
 
301d4cf
 
 
 
28d6603
301d4cf
28d6603
 
 
 
 
 
301d4cf
 
 
28d6603
 
 
 
 
 
 
301d4cf
28d6603
 
 
 
301d4cf
28d6603
301d4cf
28d6603
301d4cf
28d6603
301d4cf
28d6603
 
 
301d4cf
28d6603
301d4cf
 
 
28d6603
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
301d4cf
 
 
28d6603
 
 
301d4cf
 
 
28d6603
 
 
 
 
301d4cf
 
 
28d6603
 
301d4cf
 
 
 
28d6603
 
301d4cf
 
aa46825
301d4cf
 
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
---
license: cc-by-nc-4.0
library_name: transformers
pipeline_tag: translation
base_model: facebook/nllb-200-distilled-600M
language:
- zh
- ami
- bnn
- ckv
- dru
- pwn
- pyu
- ssf
- sxr
- szy
- tao
- tay
- trv
- tsu
- xnb
- xsy
tags:
- translation
- nllb
- nllb-200
- low-resource
- endangered-languages
- formosan-languages
- sentencepiece
- private-no-bible
metrics:
- bleu
- chrf2
- ter
model-index:
- name: nllb200-formosan-zh-spm8k
  results:
  - task:
      name: Machine Translation
      type: translation
    dataset:
      name: FormosanBank Traditional Chinese private no-Bible hard split
      type: custom
    metrics:
    - name: BLEU
      type: bleu
      value: 10.5767
      args:
        direction: f2zh
        samples: 61384
        tokenize: zh
    - name: chrF2
      type: chrf2
      value: 12.3912
      args:
        direction: f2zh
        samples: 61384
    - name: TER
      type: ter
      value: 115.7521
      args:
        direction: f2zh
        samples: 61384
---

# nllb200-formosan-zh-spm8k

**Base model:** [`facebook/nllb-200-distilled-600M`](https://huggingface.co/facebook/nllb-200-distilled-600M)  
**Direction:** **Formosan -> Traditional Chinese**  
**Companion model:** [`FormosanBank/nllb200-zh-formosan-spm8k`](https://huggingface.co/FormosanBank/nllb200-zh-formosan-spm8k)  
**Release:** private no-Bible SPM8k flight `20260712-232900`, validation-selected step `270,000`

This directional checkpoint replaces the earlier release with the strongest `private_no_bible` model from the
fully rebuilt FormosanBank MT pipeline. It uses an 8,192-piece Formosan-aware SentencePiece extension and explicit
direction, source-language, source-domain, and dialect control tags.

## Supported Languages

| Language | NLLB code |
|---|---|
| Traditional Chinese | `zho_Hant` |
| Amis | `ami_Latn` |
| Bunun | `bnn_Latn` |
| Kavalan | `ckv_Latn` |
| Rukai | `dru_Latn` |
| Paiwan | `pwn_Latn` |
| Puyuma | `pyu_Latn` |
| Thao | `ssf_Latn` |
| Saaroa | `sxr_Latn` |
| Sakizaya | `szy_Latn` |
| Tao / Yami | `tao_Latn` |
| Atayal | `tay_Latn` |
| Seediq | `trv_Latn` |
| Tsou | `tsu_Latn` |
| Kanakanavu | `xnb_Latn` |
| Saisiyat | `xsy_Latn` |

## Input Format

Prefix every source with:

`<to_zh> <src_LANG> <dom_BUCKET> <dialect_DIALECT>`

Example:

`<to_zh> <src_ami> <dom_unknown> <dialect_default> Pa'araw cingra to demak nira.`

Use `<dom_unknown>` and `<dialect_default>` when metadata is unavailable.

## Usage

Use the slow `NllbTokenizer` (`use_fast=False` with `AutoTokenizer`). These checkpoints were trained with
`transformers==4.56.1`; fast-tokenizer added-token IDs can differ from the slow tokenizer IDs used in training.
NLLB generation must start with the tokenizer EOS ID and force the target-language BOS ID.

```python
import torch
from transformers import AutoModelForSeq2SeqLM, NllbTokenizer

model_id = "FormosanBank/nllb200-formosan-zh-spm8k"
tokenizer = NllbTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
model.to("cuda" if torch.cuda.is_available() else "cpu")

FORMOSAN_TO_LID = {
    "ami": "ami_Latn", "bnn": "bnn_Latn", "ckv": "ckv_Latn", "dru": "dru_Latn",
    "pwn": "pwn_Latn", "pyu": "pyu_Latn", "ssf": "ssf_Latn", "sxr": "sxr_Latn",
    "szy": "szy_Latn", "tao": "tao_Latn", "tay": "tay_Latn", "trv": "trv_Latn",
    "tsu": "tsu_Latn", "xnb": "xnb_Latn", "xsy": "xsy_Latn",
}

def translate_formosan_to_chinese(text: str, lang_code: str, source_bucket: str = "unknown", dialect: str = "default") -> str:
    tokenizer.src_lang = FORMOSAN_TO_LID[lang_code]
    prompt = f"<to_zh> <src_{lang_code}> <dom_{source_bucket}> <dialect_{dialect}> {text}"
    inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=384).to(model.device)
    outputs = model.generate(
        **inputs,
        forced_bos_token_id=tokenizer.convert_tokens_to_ids("zho_Hant"),
        decoder_start_token_id=tokenizer.eos_token_id,
        max_new_tokens=128,
        num_beams=4,
        no_repeat_ngram_size=3,
        repetition_penalty=1.15,
        early_stopping=True,
    )
    return tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]

print(translate_formosan_to_chinese("Pa'araw cingra to demak nira.", "ami"))
```

## Checkpoint Selection

The published checkpoint was selected **only on validation chrF2**, not on the hard test set.

| Selection step | Validation samples | Validation loss | Perplexity | BLEU | chrF2 | TER |
|---:|---:|---:|---:|---:|---:|---:|
| 270,000 | 1,920 | 2.4207 | 11.25 | 23.58 | 22.94 | 103.94 |

Validation generation sampled 128 rows per Formosan language every 10,000 updates. The full hard test was evaluated
only after selection.

## Training Setup

| Setting | Value |
|---|---|
| Corpus | `private_no_bible` (Traditional Chinese) |
| Base model | `facebook/nllb-200-distilled-600M` |
| Maximum updates | 300,000 |
| Published best step | 270,000 |
| Microbatch / accumulation | 16 / 4 |
| Effective batch | 64 |
| Maximum length | 384 |
| Learning rate | `2e-05` |
| Precision | `bf16` |
| Easy-source weight | 0.05 |
| Language sampling alpha | 0.5 |
| Metadata control tags | enabled and validated as single tokenizer IDs |

## Corpus and Split Integrity

| Total | Train | Test | Validate | Minimum per-language test | Minimum per-language validate |
|---:|---:|---:|---:|---:|---:|
| 791,330 | 708,496 | 61,384 | 21,450 | 7.5% | 2.5% |

The exact `Formosan-Taiwan-Bible-Society-Bibles` repository is excluded. Lexical entries are train-only. Independent
validation found zero normalized source, target, or pair overlap; zero punctuation/spacing skeleton overlap; and zero
one-edit source or target conflicts across train and evaluation. Connected similarity groups are assigned as units so
variants cannot be split independently merely because they are not exact duplicates.

All hard-test references in this Chinese corpus are original rather than pivot-generated.

## Hard-Test Results

SacreBLEU was computed with `zh` tokenization; chrF uses beta 2; TER is lower-is-better.

| Direction | Samples | BLEU | chrF2 | TER | Exact match | Empty output |
|---|---:|---:|---:|---:|---:|---:|
| Formosan -> Traditional Chinese | 61,384 | 10.58 | 12.39 | 115.75 | 1.40% | 0.00% |

### Per-Language Results

| Language | Code | Samples | BLEU | chrF2 | TER |
|---|---:|---:|---:|---:|---:|
| Amis | `ami_Latn` | 10,929 | 7.91 | 10.07 | 115.26 |
| Bunun | `bnn_Latn` | 5,450 | 9.24 | 10.91 | 120.58 |
| Kavalan | `ckv_Latn` | 2,852 | 15.76 | 16.77 | 108.05 |
| Rukai | `dru_Latn` | 5,524 | 8.14 | 10.05 | 127.33 |
| Paiwan | `pwn_Latn` | 5,519 | 8.81 | 10.99 | 111.15 |
| Puyuma | `pyu_Latn` | 4,105 | 13.10 | 15.12 | 107.76 |
| Thao | `ssf_Latn` | 1,670 | 14.87 | 16.29 | 110.56 |
| Saaroa | `sxr_Latn` | 1,539 | 8.57 | 11.04 | 109.41 |
| Sakizaya | `szy_Latn` | 2,147 | 12.58 | 15.79 | 110.10 |
| Tao / Yami | `tao_Latn` | 1,802 | 8.32 | 11.30 | 109.37 |
| Atayal | `tay_Latn` | 6,395 | 8.92 | 10.24 | 125.92 |
| Seediq | `trv_Latn` | 6,689 | 17.66 | 18.01 | 107.97 |
| Tsou | `tsu_Latn` | 1,889 | 8.00 | 10.40 | 115.47 |
| Kanakanavu | `xnb_Latn` | 2,927 | 17.48 | 18.51 | 111.07 |
| Saisiyat | `xsy_Latn` | 1,947 | 9.94 | 12.25 | 125.58 |

Full source-bucket and length-bin breakdowns are in [`eval/metrics.json`](eval/metrics.json).

## Intended Use

- Research, teaching, and prototyping for Formosan-language machine translation.
- Draft translation assistance where knowledgeable speakers can review the output.
- Comparative low-resource MT evaluation on the documented leakage-controlled split.

## Limitations

- Output may be incorrect, ungrammatical, incomplete, or culturally inappropriate.
- Formosan generation is draft-only and requires speaker review.
- Aggregate scores across 15 languages conceal substantial per-language variation.
- This model is unsuitable for legal, medical, safety-critical, or authoritative community-facing use without expert review.
- Hard-split scores are not directly comparable with earlier evaluations that allowed stronger train-test similarity.

## License

Released under `cc-by-nc-4.0`. Underlying corpus sources may impose additional restrictions. Confirm the rights needed
for your use case.

## Citation

```bibtex
@misc{formosanbank_nllb200_formosan_zh_spm8k_2026,
  title  = {nllb200-formosan-zh-spm8k: Directional NLLB-200 MT on the FormosanBank private no-Bible corpus},
  author = {FormosanBank contributors},
  year   = {2026},
  url    = {https://huggingface.co/FormosanBank/nllb200-formosan-zh-spm8k}
}
```