Update tokenizer README in Chinese
Browse files
README.md
CHANGED
|
@@ -11,16 +11,51 @@ tags:
|
|
| 11 |
|
| 12 |
# OLMo3-190M-zh-v2 Tokenizer
|
| 13 |
|
| 14 |
-
|
| 15 |
|
| 16 |
-
|
| 17 |
|
| 18 |
-
|
| 19 |
-
-
|
| 20 |
-
-
|
| 21 |
-
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
## Special Tokens
|
| 26 |
|
|
@@ -35,7 +70,29 @@ Self-trained 48k Chinese ByteLevel BPE tokenizer for the OLMo3-190M zh v2 pretra
|
|
| 35 |
</think> -> 7
|
| 36 |
```
|
| 37 |
|
| 38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
```python
|
| 41 |
from transformers import AutoTokenizer
|
|
@@ -44,3 +101,27 @@ tok = AutoTokenizer.from_pretrained("Nwna/olmo3-190m-zh-v2-tokenizer")
|
|
| 44 |
ids = tok.encode("人工智能是机器学习的重要方向。", add_special_tokens=False)
|
| 45 |
text = tok.decode(ids, skip_special_tokens=False)
|
| 46 |
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
# OLMo3-190M-zh-v2 Tokenizer
|
| 13 |
|
| 14 |
+
这是 OLMo3-190M 中文 v2 预训练链路使用的自训练 tokenizer。
|
| 15 |
|
| 16 |
+
它的作用是统一后续几个阶段的 token 语义:
|
| 17 |
|
| 18 |
+
```text
|
| 19 |
+
原始中文语料 -> tokenizer -> tokenized.bin -> OLMo3-190M base pretrain
|
| 20 |
+
-> continue pretrain
|
| 21 |
+
-> SFT / reasoning 数据准备
|
| 22 |
+
```
|
| 23 |
+
|
| 24 |
+
注意:token id 本身只是数字,数字的语义由 tokenizer 决定。使用本项目的 `tokenized.bin`、模型 config 和 checkpoint 时,必须使用这个 tokenizer,不能和其他 tokenizer 混用。
|
| 25 |
+
|
| 26 |
+
## 基本信息
|
| 27 |
+
|
| 28 |
+
| 项目 | 值 |
|
| 29 |
+
|---|---|
|
| 30 |
+
| 算法 | ByteLevel BPE |
|
| 31 |
+
| 词表大小 | 48,000 |
|
| 32 |
+
| normalizer | NFC |
|
| 33 |
+
| pre_tokenizer | Qwen regex split + ByteLevel |
|
| 34 |
+
| decoder | ByteLevel |
|
| 35 |
+
| min_frequency | 2 |
|
| 36 |
+
| initial_alphabet | ByteLevel alphabet |
|
| 37 |
+
| 主要语言 | 中文 |
|
| 38 |
+
| 主要用途 | OLMo3-190M 中文 v2 base/continue/SFT 链路 |
|
| 39 |
+
|
| 40 |
+
## 训练语料
|
| 41 |
+
|
| 42 |
+
Tokenizer 训练语料来自 base pretrain 原始语料的代表性抽样,不混入 SFT 对话数据。
|
| 43 |
+
|
| 44 |
+
| 数据源 | 作用 |
|
| 45 |
+
|---|---|
|
| 46 |
+
| Ultra-FineWeb-zh | 通用中文网页文本,提供覆盖面 |
|
| 47 |
+
| Fineweb-Edu-Chinese-V2.2 | 教育类中文文本,提高知识密度 |
|
| 48 |
+
|
| 49 |
+
训练 tokenizer 的抽样规模:
|
| 50 |
+
|
| 51 |
+
| 指标 | 数值 |
|
| 52 |
+
|---|---:|
|
| 53 |
+
| raw shard 数 | 10 |
|
| 54 |
+
| 文档数 | 445,359 |
|
| 55 |
+
| 字符数 | 660,001,818 |
|
| 56 |
+
| 训练耗时 | 约 2,388 秒 |
|
| 57 |
+
|
| 58 |
+
这样做的目的不是“用满所有预训练语料”,而是从最终 base 语料中抽一个足够大、分布尽量代表性的子集,让 BPE merge 规则覆盖中文网页、说明文、教育文本和少量中英混排场景。
|
| 59 |
|
| 60 |
## Special Tokens
|
| 61 |
|
|
|
|
| 70 |
</think> -> 7
|
| 71 |
```
|
| 72 |
|
| 73 |
+
| token | 用途 |
|
| 74 |
+
|---|---|
|
| 75 |
+
| `<|endoftext|>` | 文档结束符,预训练 packed 数据的文档边界 |
|
| 76 |
+
| `<|pad|>` | padding,评估和 batch 对齐时使用 |
|
| 77 |
+
| `<|bos|>` | 序列开始符,兼容生成和部分模板 |
|
| 78 |
+
| `<|unk|>` | 未知 token |
|
| 79 |
+
| `<|im_start|>` / `<|im_end|>` | 为后续 SFT 多轮对话格式预留 |
|
| 80 |
+
| `<think>` / `</think>` | 为后续 reasoning 数据格式预留 |
|
| 81 |
+
|
| 82 |
+
## 验证样例
|
| 83 |
+
|
| 84 |
+
| 输入 | token 数 |
|
| 85 |
+
|---|---:|
|
| 86 |
+
| `人工智能是机器学习和深度学习的重要方向。` | 8 |
|
| 87 |
+
| `北京大学位于北京市海淀区。` | 5 |
|
| 88 |
+
| `Python 是一种常用的编程语言。` | 5 |
|
| 89 |
+
| `今天天气不错,我准备去图书馆学习。` | 9 |
|
| 90 |
+
| `<|im_start|>user\n你好<|im_end|>` | 5 |
|
| 91 |
+
| `<think>先分析问题</think>` | 4 |
|
| 92 |
+
|
| 93 |
+
所有 special token 均为单 token,`AutoTokenizer` 可正常加载,固定中文测试句 encode/decode 可还原。
|
| 94 |
+
|
| 95 |
+
## 使用方法
|
| 96 |
|
| 97 |
```python
|
| 98 |
from transformers import AutoTokenizer
|
|
|
|
| 101 |
ids = tok.encode("人工智能是机器学习的重要方向。", add_special_tokens=False)
|
| 102 |
text = tok.decode(ids, skip_special_tokens=False)
|
| 103 |
```
|
| 104 |
+
|
| 105 |
+
## 与模型配置的关系
|
| 106 |
+
|
| 107 |
+
后续 OLMo3-190M 模型 config 必须从 tokenizer 单向同步这些字段:
|
| 108 |
+
|
| 109 |
+
```text
|
| 110 |
+
vocab_size = 48000
|
| 111 |
+
eos_token_id = 0
|
| 112 |
+
pad_token_id = 1
|
| 113 |
+
bos_token_id = 2
|
| 114 |
+
unk_token_id = 3
|
| 115 |
+
```
|
| 116 |
+
|
| 117 |
+
如果模型 config 的 `vocab_size` 仍保留其他模型的值,例如 100278,会造成 embedding/lm_head 大小和 tokenized 数据不一致。
|
| 118 |
+
|
| 119 |
+
## 相关数据
|
| 120 |
+
|
| 121 |
+
匹配的正式 base tokenized 数据:
|
| 122 |
+
|
| 123 |
+
```text
|
| 124 |
+
Nwna/olmo3-190m-zh-v2-base-data
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
该数据使用本 tokenizer 编码,保存为 `uint16 tokenized.bin`。由于 vocab size 小于 65,535,`uint16` 可以覆盖所有 token id,同时比 `uint32` 节省一半磁盘和 IO。
|