Nwna commited on
Commit
737cd94
·
verified ·
1 Parent(s): a94486f

Update tokenizer README in Chinese

Browse files
Files changed (1) hide show
  1. README.md +90 -9
README.md CHANGED
@@ -11,16 +11,51 @@ tags:
11
 
12
  # OLMo3-190M-zh-v2 Tokenizer
13
 
14
- Self-trained 48k Chinese ByteLevel BPE tokenizer for the OLMo3-190M zh v2 pretraining pipeline.
15
 
16
- ## Configuration
17
 
18
- - vocab_size: 48,000
19
- - normalizer: NFC
20
- - pre_tokenizer: Qwen regex split + ByteLevel
21
- - decoder: ByteLevel
22
- - min_frequency: 2
23
- - training corpus: sampled raw text from Ultra-FineWeb-zh and Fineweb-Edu-Chinese-V2.2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- ## Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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。