ChatGLM4 的 tokenizer 配置文件解析

tokenizer_config.json是 ChatGLM-4 的"对话协议 + Token 体系 + 工具调用模板"定义文件

一、auto_map------ 自动加载 Tokenizer

python 复制代码
"auto_map": {
  "AutoTokenizer": [
    "tokenization_chatglm.ChatGLM4Tokenizer",
    null
  ]
}

告诉 HuggingFace:当你调用 AutoTokenizer.from_pretrained() 时,用 ChatGLM4Tokenizer

二、added_tokens_decoder ------ 特殊 Token 定义(极重要)

2.1、added_tokens_decoder结构解析

|-----------------|----------------------|
| content | Token 对应的字符串表现形式 |
| lstrip | 左侧是否自动去空格 |
| rstrip | 右侧是否自动去空格 |
| normalized | 是否参与文本规范化 |
| single_word | 是否只能作为"独立词"出现 |
| normalized | 是否参与文本规范化 |
| special | 是否是特殊控制的Token |

2.2、不同content结构解析

|-------------------------|-------------------------------------------|
| <|endoftext|> | 1、EOS(生成停止)2、PAD(batch 填充) |
| [MASK] | 掩码 |
| [gMASK] | 是ChatGLM的生成起点锚点,用于上下文 |
| [sMASK] | 是ChatGLM的生成起点锚点,用于补全文本 |
| <sop> | Prompt 正式开始,后面所有内容都算"上下文" |
| <|system|> | 定义模型身份,回答模型会以你指定的身份回答问题 |
| <|user|> | 明确这是用户提问,即我们向模型提出的问题 |
| <|assistant|> | 模型开始生成答案 |
| <|observation|> | 工具 / 设备 / 接口返回的"客观事实"模型不会质疑,只会基于它继续推理 |
| <eop> | 标记一次完整推理结束,防止模型继续"幻觉生成",但可以继续对话 |

不理解MASK的可以我的另一篇文章,看看Transformer是如何mask的,他们的机理是一样的。
https://blog.csdn.net/weixin_42715977/article/details/124151870?fromshare=blogdetail&sharetype=blogdetail&sharerId=124151870&sharerefer=PC&sharesource=weixin_42715977&sharefrom=from_link

2.3、gMASK和sMASK区别解析

对比项 [sMASK] [gMASK]
掩码范围 一段(局部) 整段(全局)
常见用途 补全文本 对话生成
是否常用于 Chat ❌ 少 ✅ 多
是否适合 QA ⚠️ 一般

gMASK:我给你全部上下文,你生成完整回复。

sMASK:空一段,让你补充。用于文本补全、句子续写和标准补全任务。

三、additional_special_tokens

python 复制代码
"additional_special_tokens": [
  "<|endoftext|>",
  "[MASK]",
  "[gMASK]",
  "[sMASK]",
  "<sop>",
  "<eop>",
  "<|system|>",
  "<|user|>",
  "<|assistant|>",
  "<|observation|>",
  "<|begin_of_image|>",
  "<|end_of_image|>",
  "<|begin_of_video|>",
  "<|end_of_video|>"
]

告诉 tokenizer:这些 token 是"不可拆分的整体"

否则 tokenizer 可能把 <|assistant|> 拆成 < | assist ant | >

四、剩余参数

4.1、clean_up_tokenization_spaces

去掉多余空格,当微调时,还是应采用Flase,保留完整的结构化。

!!!注意:该参数的作用阶段为解码阶段,decode(token → 文本),是否将生成的文本进行去空格,使你看到的更为舒服。

4.2、do_lower_case

强制小写,微调是,还是应采用Flase

4.3、eos_token

整个对话样本结束,注意区分他和eop的区别

|---------------------------|---------------------------|
| eop | eos |
| 本轮回答结束,但对话还活着 | 整个对话样本结束 |
| 可以继续下一轮(用户再问 / 工具再调用) | 推理/生成器直接 stop,不能再继续对话 |

用"状态机"来解释

python 复制代码
[生成中] → [本轮结束] → [整体结束]
状态变化 触发 token
生成 → 等下一轮 <eop>
任意 → 强制结束 eos_token

4.4、pad_token

用于将不同长度的序列填充到相同的长度,以便它们可以被批处理。

4.5、padding_side": "left"

左填充,从左侧开始填充,将句子补齐。

4.6、model_max_length

最大的处理的token数量。

4.7、remove_space

同样也是去空格,但是作用阶段和clean_up_tokenization_spaces完全相反,

作用于分词编码阶段,encode(文本 → token)

4.8、tokenizer_class

指定了模型对应的 分词器(Tokenizer)类,也就是告诉框架该用哪个 Python 类来处理文本的 分词、编码、解码、特殊 token 管理。

python 复制代码
"tokenizer_class": "ChatGLM4Tokenizer"
  • 编码文本 :会自动处理 <sop><eop>[gMASK][sMASK] 等特殊 token

  • 解码 token:能正确生成含特殊 token 的文本

  • 配合 LoRA / PEFT:保证训练/微调时 token ID 对齐

相关推荐
keineahnung23455 小时前
從 SymBool 到 SymFloat:PyTorch user magic methods 如何支持符號形狀運算?
人工智能·pytorch·python·深度学习
找方案5 小时前
hello-agents 学习笔记:从概念到落地,初识智能体的奇妙世界
人工智能·笔记·学习·大模型
_妲己5 小时前
SD的细分功能包括重绘,图像处理、放大等扩散模型应用
人工智能·python·深度学习·机器学习·stable diffusion·comfyui·ai工作流
一只乔哇噻5 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day63)
java·开发语言·人工智能·python·语言模型
小白学大数据5 小时前
从爬取到分析:使用 Pandas 处理头条问答数据
开发语言·爬虫·python·pandas
C182981825755 小时前
Dubbo负载均衡实现原理
python·负载均衡·dubbo
Hi_kenyon5 小时前
FastAPI+VUE3创建一个项目的步骤模板(一)
python·fastapi
yaoh.wang13 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
小鸡吃米…14 小时前
Python PyQt6教程七-控件
数据库·python