分词与 Tokenizer
本节定位
很多人第一次学大模型时,会把注意力全放在模型结构上。
但真正把文本送进模型之前,还有一道绕不过去的门:
文字到底要被切成什么单位,模型才能处理?
这就是 tokenizer。
如果这一步没想明白,后面你看到的:
input_idsattention_mask- context length
- token 成本
都会像一堆零碎术语。
这节课的目标,就是把 tokenizer 从“工具黑盒”拉回到它最本质的位置。
学习目标
- 理解为什么模型不能直接吃原始字符串
- 区分字级、词级、子词级分词的核心差异
- 理解 special tokens、padding、truncation 在工程中的作用
- 通过可运行示例看懂 tokenizer 是怎样把文本变成
input_ids的
一、为什么模型不能直接读文字?
1.1 模型最终处理的是数字,不是字符本身
神经网络 本质上只能处理数值张量。
而人类输入给模型的,通常是:
- 中文句子
- 英文段落
- 代码
- 混合标点和表情
模型并不认识“退款”“password”“hello”这些词的肉眼形状。
它需要先经过两步:
- 把文本切成一个个 token
- 把 token 映射成整数 id
所以 tokenizer 做的不是“简单切词”,
而是:
把人类语言变成模型可处理离散符号序列的第一层接口。
1.2 一个类比:把文章翻译成机器能编号的积木
你可以把 tokenizer 想成仓库管理员。
原始文本像一大段还没整理的货物。
tokenizer 要先决定:
- 每块积木的大小是什么
- 每块积木编号是多少
之后模型看到的就不再是“文章”,而是:
[101, 2057, 2024, 2172, 102]
如果积木切得太碎,会变得很长;
如果切得太粗,又会有很多词不认识。