gloomcheng commited on
Commit
a4da60c
·
verified ·
1 Parent(s): 4ae6909

IlhaEmbed-97M (vocab-pruned) initial release

Browse files
README.md ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - zh
5
+ library_name: sentence-transformers
6
+ pipeline_tag: sentence-similarity
7
+ tags:
8
+ - embeddings
9
+ - clinical
10
+ - healthcare
11
+ - traditional-chinese
12
+ - taiwan
13
+ - medical
14
+ - fhir
15
+ - on-premise
16
+ - onnx
17
+ base_model: ibm-granite/granite-embedding-97m-multilingual-r2
18
+ ---
19
+
20
+ # IlhaEmbed
21
+
22
+ **English** | [**繁體中文**](#繁體中文)
23
+
24
+ **The clinical embedding model that reads how Taiwan actually writes medicine.**
25
+
26
+ `斷腦筋` is a stroke. `不辣咖` is a blood culture. `H/T` is hypertension, `V(H/T)` means the patient
27
+ attends an outside clinic *for* hypertension. Generic and general-Chinese embedders read none of these —
28
+ they were never trained on how Taiwanese clinicians, nurses, and care workers really write in charts,
29
+ remarks, and community-care sheets. **IlhaEmbed was.**
30
+
31
+ *Ilha* — from *Ilha Formosa*, "beautiful island." An embedder that understands this island's clinical
32
+ mother tongue.
33
+
34
+ ## Why IlhaEmbed
35
+
36
+ | | What it means for you |
37
+ |---|---|
38
+ | 🩺 **Reads Taiwan's clinical language** | Slang, abbreviations, Taigi, hand-written remark shorthand — the dirty free-text in every real Taiwanese medical record. Where a generic embedder returns noise, IlhaEmbed returns the right concept. |
39
+ | 🔒 **Runs fully on-premise** | 37 MB, INT8, CPU-only ONNX. No GPU, no cloud, no API key — **no patient data ever leaves the hospital.** Built for the offline reality of clinical infrastructure. |
40
+ | 🧾 **Transparent, auditable lineage** | Apache-2.0 weights, a documented base model (IBM Granite ModernBERT), and a fully traceable training pipeline. Provenance you can hand to a procurement or infosec review, not a black box. |
41
+ | 🪶 **Open and commercial-ready** | Apache-2.0 — use it, ship it, embed it in a product, no copyleft strings. |
42
+
43
+ ## What it's for
44
+
45
+ IlhaEmbed turns messy Taiwanese clinical text into structured meaning. Drop-in for:
46
+
47
+ - **Clinical text normalization** — map free-text abbreviations/slang to canonical concepts (`H/T` → 高血壓).
48
+ - **Dirty-data → structured routing** — the semantic layer of an importer that reads a spreadsheet cell and routes each fact to its correct home (medication, condition, care source…).
49
+ - **Terminology / code matching** — retrieve the right ICD / LOINC / drug concept for a surface term.
50
+ - **De-siloing search** — find the record from the clue a nurse actually has, not the exact field name.
51
+
52
+ It is the normalization layer of a fully Taiwan-origin clinical pipeline:
53
+ **`Breeze-ASR-26` (speech) → `IlhaEmbed` (meaning) → `FHIR` (structure).**
54
+
55
+ ## Benchmarks
56
+
57
+ **Task: jargon top-1** — given a Taiwan-clinical surface term, retrieve its canonical clinical concept
58
+ from a combined concept pool. Each register (slang, abbreviation, apposition) is held out separately;
59
+ self-matches excluded; macro-averaged over registers. Same methodology and pool for every model.
60
+
61
+ | Model | Deployable on-prem | slang | abbrev | apposition | **jargon top-1 (macro)** |
62
+ |---|---|---|---|---|---|
63
+ | **IlhaEmbed** | ✅ 37 MB CPU | **0.84** | **0.82** | **0.90** | **0.85** |
64
+ | jina-embeddings-v2-base-zh | ❌ | 0.06 | 0.14 | 0.45 | 0.22 |
65
+ | ckip-base | ✅ | 0.00 | 0.01 | 0.36 | 0.12 |
66
+ | bge-small-zh | ✅ | 0.00 | 0.00 | 0.33 | 0.11 |
67
+
68
+ **~4× the best general model, ~8× bge** — on exactly the vocabulary generic and general-Chinese embedders
69
+ were never trained to read. We do **not** claim to top general leaderboards (MTEB): IlhaEmbed is a
70
+ *specialist* that wins where generic models fail, while staying small enough to run on the ward.
71
+
72
+ *(Evaluation methodology described above; the register-held-out protocol is reproducible. The raw
73
+ evaluation pairs carry third-party copyright and are not redistributed. A dedicated Han-Taigi →
74
+ standard-concept benchmark is in progress and reported separately once its concept mapping is clean.)*
75
+
76
+ ## Usage
77
+
78
+ ```python
79
+ # ONNX (deployment path — no torch, CPU)
80
+ from tokenizers import Tokenizer
81
+ import onnxruntime as ort, numpy as np
82
+
83
+ tok = Tokenizer.from_file("tokenizer.json")
84
+ sess = ort.InferenceSession("model_int8.onnx")
85
+ # ... encode (max_len 32), run, mean-pool, L2-normalize → 384-d vector
86
+ ```
87
+
88
+ ```python
89
+ # sentence-transformers (research path)
90
+ from sentence_transformers import SentenceTransformer
91
+ model = SentenceTransformer("weemed/IlhaEmbed")
92
+ model.encode(["斷腦筋", "H/T", "定期心內門診-戒菸"])
93
+ ```
94
+
95
+ - **Dimensions:** 384 · **Max sequence:** 32 tokens · **Vocab:** 25.5k (pruned to Traditional-Chinese + clinical) · **Size:** 37 MB (INT8 ONNX) / 152 MB (fp32 safetensors).
96
+
97
+ ## How it was built
98
+
99
+ - **Base:** IBM Granite ModernBERT (Apache-2.0) — a transparent, permissively-licensed foundation.
100
+ - **Distillation:** a Taiwan-clinical teacher signal supplies the domain knowledge; the student learns to place Taiwanese slang, abbreviations, and Taigi near their canonical concepts.
101
+ - **Vocabulary pruning:** the base 180k multilingual BPE vocab was pruned to the 25.5k tokens Traditional-Chinese clinical text actually uses — a **68% size cut (117 MB → 37 MB) with zero accuracy loss** (jargon top-1 held; real-pipeline routing bit-identical).
102
+
103
+ ## Intended use & limitations
104
+
105
+ IlhaEmbed is a **semantic representation tool**, not a diagnostic system. It surfaces likely meanings and matches for a human to confirm — it must never auto-decide clinical facts without review. It is tuned for Traditional-Chinese Taiwanese clinical text; general or Simplified-Chinese prose is out of scope.
106
+
107
+ ## License & citation
108
+
109
+ Apache-2.0. Base model: IBM Granite (Apache-2.0). Training-pair sources documented in `SOURCES.md`; the released weights are a distributable derivative, the raw third-party pairs are not redistributed.
110
+
111
+ *IlhaEmbed — reads the clinical mother tongue of this island.*
112
+
113
+ ---
114
+
115
+ <a name="繁體中文"></a>
116
+
117
+ # IlhaEmbed(繁體中文)
118
+
119
+ [**English**](#ilhaembed) | **繁體中文**
120
+
121
+ **讀得懂台灣臨床怎麼寫的語意模型。**
122
+
123
+ `斷腦筋` 是中風。`不辣咖` 是血液培養。`H/T` 是高血壓,`V(H/T)` 是這位病人在外院看高血壓。通用模型與一般中文
124
+ 模型全都讀不懂——它們從沒學過台灣的醫師、護理師、照服員真正怎麼在病歷、備註、社區照護表上書寫。**IlhaEmbed 學過。**
125
+
126
+ *Ilha* 取自 *Ilha Formosa*(美麗島)。一顆讀得懂這座島臨床母語的語意模型。
127
+
128
+ ## 為什麼選 IlhaEmbed
129
+
130
+ | | 對你的意義 |
131
+ |---|---|
132
+ | 🩺 **讀得懂台灣臨床語言** | 行話、縮寫、台語、手寫備註簡寫——每一份真實台灣病歷裡的髒 free-text。通用模型讀成雜訊的地方,IlhaEmbed 讀出正確概念。 |
133
+ | 🔒 **完全地端執行** | 37 MB、INT8、純 CPU ONNX。免 GPU、免雲端、免 API key——**病人資料永不離開醫院。** 為臨床基礎設施的離線現實而生。 |
134
+ | 🧾 **透明可稽核的血統** | Apache-2.0 權重、有文件的底模(IBM Granite ModernBERT)、可完整追溯的訓練管線。是可以交給採購與資安審查的來源證明,不是黑盒子。 |
135
+ | 🪶 **開源且可商用** | Apache-2.0——自己用、包進產品、隨貨出貨都行,沒有 copyleft 綁約。 |
136
+
137
+ ## 用來做什麼
138
+
139
+ IlhaEmbed 把凌亂的台灣臨床文字轉成結構化的意義。可直接用於:
140
+
141
+ - **臨床文字正規化**——把 free-text 縮寫/行話對應到標準概念(`H/T` → 高血壓)。
142
+ - **髒資料 → 結構化路由**——匯入器的語意層:讀一格試算表、把每個事實路由到它正確的歸宿(用藥、疾病、就醫來源…)。
143
+ - **術語/代碼比對**——為一個表面詞找到正確的 ICD/LOINC/藥品概念。
144
+ - **打破資訊孤島的搜尋**——用護理師手上真正有的線索找到紀錄,而不是要求精確欄位名。
145
+
146
+ 它是一條**全台灣血統**臨床管線的正規化層:
147
+ **`Breeze-ASR-26`(聽音)→ `IlhaEmbed`(理解)→ `FHIR`(結構)。**
148
+
149
+ ## 效能指標
150
+
151
+ **任務:jargon top-1**——給一個台灣臨床表面詞,於合併概念池中檢索其標準臨床概念。各語域(行話 slang/縮寫 abbrev/同位語 apposition)分別留出、排除自我匹配、macro 平均;所有模型使用同一方法學與同一概念池。
152
+
153
+ | 模型 | 可地端部署 | slang | abbrev | apposition | jargon top-1(macro) |
154
+ |---|---|---|---|---|---|
155
+ | **IlhaEmbed** | ✅ 37 MB CPU | **0.84** | **0.82** | **0.90** | **0.85** |
156
+ | jina-embeddings-v2-base-zh | ❌ | 0.06 | 0.14 | 0.45 | 0.22 |
157
+ | ckip-base | ✅ | 0.00 | 0.01 | 0.36 | 0.12 |
158
+ | bge-small-zh | ✅ | 0.00 | 0.00 | 0.33 | 0.11 |
159
+
160
+ **約為最佳通用模型的 4 倍、bge 的近 8 倍**——就贏在通用與一般中文模型從未學過的在地詞彙。我們**不宣稱**在通用排行榜(MTEB)霸榜:IlhaEmbed 是**專科模型**,只贏在通用模型會爆掉的地方,同時小到能在病房裡跑。
161
+
162
+ *(評估方法學如上,register-held-out 協定可重現;原始評估配對含第三方著作權,不隨附散佈。專門的「漢字台語→標準概念」基準進行中。)*
163
+
164
+ ## 使用方式
165
+
166
+ ```python
167
+ # ONNX(部署路徑——免 torch、CPU)
168
+ from tokenizers import Tokenizer
169
+ import onnxruntime as ort, numpy as np
170
+
171
+ tok = Tokenizer.from_file("tokenizer.json")
172
+ sess = ort.InferenceSession("model_int8.onnx")
173
+ # ... 編碼(max_len 32)、推論、mean-pool、L2 normalize → 384 維向量
174
+ ```
175
+
176
+ ```python
177
+ # sentence-transformers(研究路徑)
178
+ from sentence_transformers import SentenceTransformer
179
+ model = SentenceTransformer("weemed/IlhaEmbed")
180
+ model.encode(["斷腦筋", "H/T", "定期心內門診-戒菸"])
181
+ ```
182
+
183
+ - **維度:** 384 · **最大序列:** 32 tokens · **詞表:** 25.5k(剪枝至繁中+臨床)· **大小:** 37 MB(INT8 ONNX)/152 MB(fp32 safetensors)。
184
+
185
+ ## 怎麼做出來的
186
+
187
+ - **底模:** IBM Granite ModernBERT(Apache-2.0)——透明、寬鬆授權的基礎。
188
+ - **蒸餾:** 由台灣臨床 teacher 訊號提供領域知識;學生學會把台灣行話、縮寫、台語擺到它們的標準概念旁邊。
189
+ - **詞彙剪枝:** 把底模 180k 的多語 BPE 詞表剪到繁中臨床文字真正會用到的 25.5k token——**體積砍 68%(117 MB → 37 MB)、準確度零損**(jargon top-1 不掉;真實管線路由逐位一致)。
190
+
191
+ ## 適用範圍與限制
192
+
193
+ IlhaEmbed 是**語意表示工具**,不是診斷系統。它浮現可能的意義與比對供人確認——絕不可在未經審核下自動判定臨床事實。它為繁體中文的台灣臨床文字調校;一般或簡體中文散文不在範圍內。
194
+
195
+ ## 授權與引用
196
+
197
+ Apache-2.0。底模:IBM Granite(Apache-2.0)。訓練配對來源記於 `SOURCES.md`;釋出的權重是可散佈的衍生作,原始第三方配對不隨附散佈。
198
+
199
+ *IlhaEmbed——讀得懂這座島的臨床母語。*
SOURCES.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Training-data provenance — TW clinical terminology embedder
2
+
3
+ Every corpus mined for the CODER-TW fine-tune, recorded for **ground-truth /
4
+ reproducibility / licensing**. Rule: anything listed here is IN the training
5
+ data and must NOT be reused as a held-out test set. Access date: **2026-07-18**.
6
+
7
+ ## Specialized (surface → canonical) — the scarce clinical signal
8
+
9
+ | id | source | how obtained | endpoint / file | rows | license | notes |
10
+ |----|--------|--------------|-----------------|-----:|---------|-------|
11
+ | moe-twblg | 教育部臺灣台語常用詞辭典 | open-data dump | `github.com/g0v/moedict-data-twblg` → `dict-twblg.json` | 778 | MOE open data | Taigi 漢字+台羅+華語定義; medical-regex filtered from 14,489 |
12
+ | itaigi | iTaigi 愛台語 (g0v) | reverse-eng API | `itaigi.tw/平臺項目列表/揣列表?關鍵字=` | 1,288 | CC (條目標「會使公開」) | crowd Taigi readings + votes |
13
+ | slang-blog | 陳志金「巷子內醫療用語」/ udn 詹廖明義 / vocus | manual WebFetch | `snore123.blogspot.com/2019/05/medword.html`, `blog.udn.com/ptsafetyrm/3771916`, `vocus.cc/article/6541c172…` | 62 | **作者著作權** | 口語黑話(摸咪/掐水/歐卡)+書面(Endo/Foley/NG) |
14
+ | abbr-pdf | 醫院「可使用縮寫表」+ 護理教材 | curl + pdftotext | nutc, mhchcm, sijhih, kmu(失敗), wagners(需OCR), hpa | 398 | **醫院/作者著作權** | PDF 抽取,有版面噪音 |
15
+ | wiki-redirect | 中文維基百科 重定向 | MediaWiki API | `zh.wikipedia.org/w/api.php prop=redirects` | 284 | CC BY-SA | 別名→條目;醫學 redirect 覆蓋稀疏 |
16
+ | wiki-appos | 中文維基百科 內文同位語 | MediaWiki API | `…prop=extracts&exintro` + Hearst patterns | 371 | CC BY-SA | 「又稱/俗稱/簡稱/縮寫為」→ 挖出 CVA/COPD/心梗 等縮寫 |
17
+ | rsroc-weiei | 中華民國放射線醫學會 衛教 | curl crawl | `rsroc.org.tw/knowledge/news/content.asp?ID=1..119` | 34 | **學會著作權** | 影像縮寫 LDCT/CTA/RFA/TACE;高精度 apposition |
18
+
19
+ ## Bulk (formal synonym) — abundant, saturates cross-lingual
20
+
21
+ | id | source | how obtained | file | rows | license | notes |
22
+ |----|--------|--------------|------|-----:|---------|-------|
23
+ | icd-loinc | 衛福部 ICD-10-CM/PCS 中文版 + LOINC-NHI | hygieia local | `core/data/icd10_cm_2023.csv.gz` 等 | 63,529 | gov public / LOINC | zh↔en cross-lingual pairs |
24
+ | snomed-syn | SNOMED CT description synonyms | hygieia local | `core/data/terminology_sources/snomed/description.csv.gz` | 44,973 | **SNOMED CT license (UMLS/UTS)** | en synonym→FSN, high-signal subset |
25
+
26
+ ## Not used / dropped (recorded so they aren't re-attempted blindly)
27
+ - iTaigi 2,500-seed expansion — process kept dying mid-run; 1,288 base run already folded in.
28
+ - icd_term_bridge.csv.gz (204k) — token-level alignment noise ("abandonment→照顧或"), unusable.
29
+ - Common Crawl — the right web-scale corpus for the apposition pattern, but a
30
+ petabyte S3/Athena/Spark project; deferred. Targeted TW-domain crawl is the
31
+ lighter substitute (rsroc above; extend to more hospital 衛教 domains next).
32
+
33
+ ## Open-source caveat (carried from core/data/README)
34
+ Bulk gov/CC/open-licensed parts are redistributable; the **abbr-pdf / slang-blog
35
+ / rsroc** raw text is third-party copyright — release the *trained embedder
36
+ weights* (derived work), not the raw pairs, unless per-source consent obtained.
37
+
38
+ ## Model produced from these corpora (v2, 2026-07-18)
39
+
40
+ - **Base**: CODER (`GanjinZero/coder_all`, Apache-2.0), CLS pooler, BERT-base 768d.
41
+ - **Train**: 119,242 pairs = specialized 1,652×8 (upsampled) + bulk 108,502;
42
+ InfoNCE / in-batch negatives, 4 epochs, RTX 4080.
43
+ - **Held-out (247 specialized, 500 xling), never trained on:**
44
+ | | base | v2 fp32 | v2 int8 |
45
+ |---|---|---|---|
46
+ | specialized top1 | 0.279 | 0.453 | 0.433 |
47
+ | specialized top5 | 0.429 | 0.628 | 0.615 |
48
+ | xling top1 | 0.708 | 0.978 | — |
49
+ - **Deployable**: `coder_tw_v2_int8.onnx` 178.7 MB (25% of fp32), CPU inference, fits 2 GB tier.
50
+ - **Honest limits**: specialized top1 0.43 = usable for a suggest-with-review tier,
51
+ not autonomous. Chinese colloquial signal is web-scale-sparse (see Common Crawl
52
+ note); the gains came mostly from apposition-mined clinical abbreviations.
config.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "ModernBertModel"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 25460,
8
+ "classifier_activation": "silu",
9
+ "classifier_bias": false,
10
+ "classifier_dropout": 0.0,
11
+ "classifier_pooling": "cls",
12
+ "cls_token_id": 25460,
13
+ "decoder_bias": true,
14
+ "deterministic_flash_attn": false,
15
+ "dtype": "float32",
16
+ "embedding_dropout": 0.0,
17
+ "eos_token_id": 25464,
18
+ "global_attn_every_n_layers": 3,
19
+ "global_rope_theta": 150000.0,
20
+ "gradient_checkpointing": false,
21
+ "hidden_activation": "silu",
22
+ "hidden_size": 384,
23
+ "initializer_cutoff_factor": 2.0,
24
+ "initializer_range": 0.02,
25
+ "intermediate_size": 1536,
26
+ "layer_norm_eps": 1e-05,
27
+ "local_attention": 128,
28
+ "local_rope_theta": 160000.0,
29
+ "max_position_embeddings": 32768,
30
+ "mlp_bias": false,
31
+ "mlp_dropout": 0.0,
32
+ "model_type": "modernbert",
33
+ "norm_bias": false,
34
+ "norm_eps": 1e-05,
35
+ "num_attention_heads": 12,
36
+ "num_hidden_layers": 12,
37
+ "pad_token_id": 25461,
38
+ "position_embedding_type": "absolute",
39
+ "repad_logits_with_grad": false,
40
+ "sep_token_id": 25464,
41
+ "sparse_pred_ignore_index": -100,
42
+ "sparse_prediction": false,
43
+ "transformers_version": "4.57.1",
44
+ "vocab_size": 25526
45
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:261af96cef3d72ea9e1877640083fa8d9fe6403333fec4a8cd54ef5e09f92299
3
+ size 152499624
model_int8.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3449f8bade1c8836323c9e5b802a48c35be97ced9fafcb7c16a2fe2d471a2705
3
+ size 38537426
special_tokens_map.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "<|startoftext|>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "cls_token": {
10
+ "content": "<|startoftext|>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "eos_token": {
17
+ "content": "<|return|>",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "mask_token": {
24
+ "content": "[MASK]",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "pad_token": {
31
+ "content": "<|endoftext|>",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ },
37
+ "sep_token": {
38
+ "content": "<|return|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false
43
+ }
44
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,555 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "25460": {
4
+ "content": "<|startoftext|>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "25461": {
12
+ "content": "<|endoftext|>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "25462": {
20
+ "content": "<|reserved_200000|>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "25463": {
28
+ "content": "<|reserved_200001|>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "25464": {
36
+ "content": "<|return|>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ },
43
+ "25465": {
44
+ "content": "<|constrain|>",
45
+ "lstrip": false,
46
+ "normalized": false,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": true
50
+ },
51
+ "25466": {
52
+ "content": "<|reserved_200004|>",
53
+ "lstrip": false,
54
+ "normalized": false,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": true
58
+ },
59
+ "25467": {
60
+ "content": "<|channel|>",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": true
66
+ },
67
+ "25468": {
68
+ "content": "<|start|>",
69
+ "lstrip": false,
70
+ "normalized": false,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": true
74
+ },
75
+ "25469": {
76
+ "content": "<|end|>",
77
+ "lstrip": false,
78
+ "normalized": false,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": true
82
+ },
83
+ "25470": {
84
+ "content": "<|message|>",
85
+ "lstrip": false,
86
+ "normalized": false,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": true
90
+ },
91
+ "25471": {
92
+ "content": "<|reserved_200009|>",
93
+ "lstrip": false,
94
+ "normalized": false,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": true
98
+ },
99
+ "25472": {
100
+ "content": "<|reserved_200010|>",
101
+ "lstrip": false,
102
+ "normalized": false,
103
+ "rstrip": false,
104
+ "single_word": false,
105
+ "special": true
106
+ },
107
+ "25473": {
108
+ "content": "<|reserved_200011|>",
109
+ "lstrip": false,
110
+ "normalized": false,
111
+ "rstrip": false,
112
+ "single_word": false,
113
+ "special": true
114
+ },
115
+ "25474": {
116
+ "content": "<|call|>",
117
+ "lstrip": false,
118
+ "normalized": false,
119
+ "rstrip": false,
120
+ "single_word": false,
121
+ "special": true
122
+ },
123
+ "25475": {
124
+ "content": "<|reserved_200013|>",
125
+ "lstrip": false,
126
+ "normalized": false,
127
+ "rstrip": false,
128
+ "single_word": false,
129
+ "special": true
130
+ },
131
+ "25476": {
132
+ "content": "<|reserved_200014|>",
133
+ "lstrip": false,
134
+ "normalized": false,
135
+ "rstrip": false,
136
+ "single_word": false,
137
+ "special": true
138
+ },
139
+ "25477": {
140
+ "content": "<|reserved_200015|>",
141
+ "lstrip": false,
142
+ "normalized": false,
143
+ "rstrip": false,
144
+ "single_word": false,
145
+ "special": true
146
+ },
147
+ "25478": {
148
+ "content": "<|reserved_200016|>",
149
+ "lstrip": false,
150
+ "normalized": false,
151
+ "rstrip": false,
152
+ "single_word": false,
153
+ "special": true
154
+ },
155
+ "25479": {
156
+ "content": "<|reserved_200017|>",
157
+ "lstrip": false,
158
+ "normalized": false,
159
+ "rstrip": false,
160
+ "single_word": false,
161
+ "special": true
162
+ },
163
+ "25480": {
164
+ "content": "<|endofprompt|>",
165
+ "lstrip": false,
166
+ "normalized": false,
167
+ "rstrip": false,
168
+ "single_word": false,
169
+ "special": true
170
+ },
171
+ "25481": {
172
+ "content": "[MASK]",
173
+ "lstrip": false,
174
+ "normalized": false,
175
+ "rstrip": false,
176
+ "single_word": false,
177
+ "special": true
178
+ },
179
+ "25482": {
180
+ "content": "<|reserved_200020|>",
181
+ "lstrip": false,
182
+ "normalized": false,
183
+ "rstrip": false,
184
+ "single_word": true,
185
+ "special": false
186
+ },
187
+ "25483": {
188
+ "content": "<|reserved_200021|>",
189
+ "lstrip": false,
190
+ "normalized": false,
191
+ "rstrip": false,
192
+ "single_word": true,
193
+ "special": false
194
+ },
195
+ "25484": {
196
+ "content": "<|reserved_200022|>",
197
+ "lstrip": false,
198
+ "normalized": false,
199
+ "rstrip": false,
200
+ "single_word": true,
201
+ "special": false
202
+ },
203
+ "25485": {
204
+ "content": "<|reserved_200023|>",
205
+ "lstrip": false,
206
+ "normalized": false,
207
+ "rstrip": false,
208
+ "single_word": true,
209
+ "special": false
210
+ },
211
+ "25486": {
212
+ "content": "<|reserved_200024|>",
213
+ "lstrip": false,
214
+ "normalized": false,
215
+ "rstrip": false,
216
+ "single_word": true,
217
+ "special": false
218
+ },
219
+ "25487": {
220
+ "content": "<|reserved_200025|>",
221
+ "lstrip": false,
222
+ "normalized": false,
223
+ "rstrip": false,
224
+ "single_word": true,
225
+ "special": false
226
+ },
227
+ "25488": {
228
+ "content": "<|reserved_200026|>",
229
+ "lstrip": false,
230
+ "normalized": false,
231
+ "rstrip": false,
232
+ "single_word": true,
233
+ "special": false
234
+ },
235
+ "25489": {
236
+ "content": "<|reserved_200027|>",
237
+ "lstrip": false,
238
+ "normalized": false,
239
+ "rstrip": false,
240
+ "single_word": true,
241
+ "special": false
242
+ },
243
+ "25490": {
244
+ "content": "<|reserved_200028|>",
245
+ "lstrip": false,
246
+ "normalized": false,
247
+ "rstrip": false,
248
+ "single_word": true,
249
+ "special": false
250
+ },
251
+ "25491": {
252
+ "content": "<|reserved_200029|>",
253
+ "lstrip": false,
254
+ "normalized": false,
255
+ "rstrip": false,
256
+ "single_word": true,
257
+ "special": false
258
+ },
259
+ "25492": {
260
+ "content": "<|reserved_200030|>",
261
+ "lstrip": false,
262
+ "normalized": false,
263
+ "rstrip": false,
264
+ "single_word": true,
265
+ "special": false
266
+ },
267
+ "25493": {
268
+ "content": "<|reserved_200031|>",
269
+ "lstrip": false,
270
+ "normalized": false,
271
+ "rstrip": false,
272
+ "single_word": true,
273
+ "special": false
274
+ },
275
+ "25494": {
276
+ "content": "<|reserved_200032|>",
277
+ "lstrip": false,
278
+ "normalized": false,
279
+ "rstrip": false,
280
+ "single_word": true,
281
+ "special": false
282
+ },
283
+ "25495": {
284
+ "content": "<|reserved_200033|>",
285
+ "lstrip": false,
286
+ "normalized": false,
287
+ "rstrip": false,
288
+ "single_word": true,
289
+ "special": false
290
+ },
291
+ "25496": {
292
+ "content": "<|reserved_200034|>",
293
+ "lstrip": false,
294
+ "normalized": false,
295
+ "rstrip": false,
296
+ "single_word": true,
297
+ "special": false
298
+ },
299
+ "25497": {
300
+ "content": "<|reserved_200035|>",
301
+ "lstrip": false,
302
+ "normalized": false,
303
+ "rstrip": false,
304
+ "single_word": true,
305
+ "special": false
306
+ },
307
+ "25498": {
308
+ "content": "<|reserved_200036|>",
309
+ "lstrip": false,
310
+ "normalized": false,
311
+ "rstrip": false,
312
+ "single_word": true,
313
+ "special": false
314
+ },
315
+ "25499": {
316
+ "content": "<|reserved_200037|>",
317
+ "lstrip": false,
318
+ "normalized": false,
319
+ "rstrip": false,
320
+ "single_word": true,
321
+ "special": false
322
+ },
323
+ "25500": {
324
+ "content": "<|reserved_200038|>",
325
+ "lstrip": false,
326
+ "normalized": false,
327
+ "rstrip": false,
328
+ "single_word": true,
329
+ "special": false
330
+ },
331
+ "25501": {
332
+ "content": "<|reserved_200039|>",
333
+ "lstrip": false,
334
+ "normalized": false,
335
+ "rstrip": false,
336
+ "single_word": true,
337
+ "special": false
338
+ },
339
+ "25502": {
340
+ "content": "<|reserved_200040|>",
341
+ "lstrip": false,
342
+ "normalized": false,
343
+ "rstrip": false,
344
+ "single_word": true,
345
+ "special": false
346
+ },
347
+ "25503": {
348
+ "content": "<|reserved_200041|>",
349
+ "lstrip": false,
350
+ "normalized": false,
351
+ "rstrip": false,
352
+ "single_word": true,
353
+ "special": false
354
+ },
355
+ "25504": {
356
+ "content": "<|reserved_200042|>",
357
+ "lstrip": false,
358
+ "normalized": false,
359
+ "rstrip": false,
360
+ "single_word": true,
361
+ "special": false
362
+ },
363
+ "25505": {
364
+ "content": "<|reserved_200043|>",
365
+ "lstrip": false,
366
+ "normalized": false,
367
+ "rstrip": false,
368
+ "single_word": true,
369
+ "special": false
370
+ },
371
+ "25506": {
372
+ "content": "<|reserved_200044|>",
373
+ "lstrip": false,
374
+ "normalized": false,
375
+ "rstrip": false,
376
+ "single_word": true,
377
+ "special": false
378
+ },
379
+ "25507": {
380
+ "content": "<|reserved_200045|>",
381
+ "lstrip": false,
382
+ "normalized": false,
383
+ "rstrip": false,
384
+ "single_word": true,
385
+ "special": false
386
+ },
387
+ "25508": {
388
+ "content": "<|reserved_200046|>",
389
+ "lstrip": false,
390
+ "normalized": false,
391
+ "rstrip": false,
392
+ "single_word": true,
393
+ "special": false
394
+ },
395
+ "25509": {
396
+ "content": "<|reserved_200047|>",
397
+ "lstrip": false,
398
+ "normalized": false,
399
+ "rstrip": false,
400
+ "single_word": true,
401
+ "special": false
402
+ },
403
+ "25510": {
404
+ "content": "<|reserved_200048|>",
405
+ "lstrip": false,
406
+ "normalized": false,
407
+ "rstrip": false,
408
+ "single_word": true,
409
+ "special": false
410
+ },
411
+ "25511": {
412
+ "content": "<|reserved_200049|>",
413
+ "lstrip": false,
414
+ "normalized": false,
415
+ "rstrip": false,
416
+ "single_word": true,
417
+ "special": false
418
+ },
419
+ "25512": {
420
+ "content": "<|reserved_200050|>",
421
+ "lstrip": false,
422
+ "normalized": false,
423
+ "rstrip": false,
424
+ "single_word": true,
425
+ "special": false
426
+ },
427
+ "25513": {
428
+ "content": "<|reserved_200051|>",
429
+ "lstrip": false,
430
+ "normalized": false,
431
+ "rstrip": false,
432
+ "single_word": true,
433
+ "special": false
434
+ },
435
+ "25514": {
436
+ "content": "<|reserved_200052|>",
437
+ "lstrip": false,
438
+ "normalized": false,
439
+ "rstrip": false,
440
+ "single_word": true,
441
+ "special": false
442
+ },
443
+ "25515": {
444
+ "content": "<|reserved_200053|>",
445
+ "lstrip": false,
446
+ "normalized": false,
447
+ "rstrip": false,
448
+ "single_word": true,
449
+ "special": false
450
+ },
451
+ "25516": {
452
+ "content": "<|reserved_200054|>",
453
+ "lstrip": false,
454
+ "normalized": false,
455
+ "rstrip": false,
456
+ "single_word": true,
457
+ "special": false
458
+ },
459
+ "25517": {
460
+ "content": "<|reserved_200055|>",
461
+ "lstrip": false,
462
+ "normalized": false,
463
+ "rstrip": false,
464
+ "single_word": true,
465
+ "special": false
466
+ },
467
+ "25518": {
468
+ "content": "<|reserved_200056|>",
469
+ "lstrip": false,
470
+ "normalized": false,
471
+ "rstrip": false,
472
+ "single_word": true,
473
+ "special": false
474
+ },
475
+ "25519": {
476
+ "content": "<|reserved_200057|>",
477
+ "lstrip": false,
478
+ "normalized": false,
479
+ "rstrip": false,
480
+ "single_word": true,
481
+ "special": false
482
+ },
483
+ "25520": {
484
+ "content": "<|reserved_200058|>",
485
+ "lstrip": false,
486
+ "normalized": false,
487
+ "rstrip": false,
488
+ "single_word": true,
489
+ "special": false
490
+ },
491
+ "25521": {
492
+ "content": "<|reserved_200059|>",
493
+ "lstrip": false,
494
+ "normalized": false,
495
+ "rstrip": false,
496
+ "single_word": true,
497
+ "special": false
498
+ },
499
+ "25522": {
500
+ "content": "<|reserved_200060|>",
501
+ "lstrip": false,
502
+ "normalized": false,
503
+ "rstrip": false,
504
+ "single_word": true,
505
+ "special": false
506
+ },
507
+ "25523": {
508
+ "content": "<|reserved_200061|>",
509
+ "lstrip": false,
510
+ "normalized": false,
511
+ "rstrip": false,
512
+ "single_word": true,
513
+ "special": false
514
+ },
515
+ "25524": {
516
+ "content": "<|reserved_200062|>",
517
+ "lstrip": false,
518
+ "normalized": false,
519
+ "rstrip": false,
520
+ "single_word": true,
521
+ "special": false
522
+ },
523
+ "25525": {
524
+ "content": "<|reserved_200063|>",
525
+ "lstrip": false,
526
+ "normalized": false,
527
+ "rstrip": false,
528
+ "single_word": true,
529
+ "special": false
530
+ }
531
+ },
532
+ "backend": "tokenizers",
533
+ "bos_token": "<|startoftext|>",
534
+ "clean_up_tokenization_spaces": false,
535
+ "cls_token": "<|startoftext|>",
536
+ "eos_token": "<|return|>",
537
+ "extra_special_tokens": {},
538
+ "is_local": true,
539
+ "mask_token": "[MASK]",
540
+ "max_length": 32768,
541
+ "model_input_names": [
542
+ "input_ids",
543
+ "attention_mask"
544
+ ],
545
+ "model_max_length": 32768,
546
+ "pad_to_multiple_of": null,
547
+ "pad_token": "<|endoftext|>",
548
+ "pad_token_type_id": 0,
549
+ "padding_side": "right",
550
+ "sep_token": "<|return|>",
551
+ "stride": 0,
552
+ "tokenizer_class": "PreTrainedTokenizerFast",
553
+ "truncation_side": "right",
554
+ "truncation_strategy": "longest_first"
555
+ }