0 · 导读:三个词,一个闭环
一句话概括:token 是模型能"读"的最小单位;subword(子词)是现代模型最常见的 token 粒度(介于词与字之间);OOV(未登录词)是 token 体系覆盖不到的输入,正是 subword 要结构性消灭的敌人。 三者构成一个闭环:
我们想让任意文本都变成有限、可控的 token 序列;subword 是性价比最高的 token 粒度;OOV 是"词表没覆盖到"的失败模式,subword 把它压到几乎为零。
| 概念 | 一句话 | 在链路中的角色 |
|---|---|---|
| token | tokenizer 的输出单元,每个 token = 一个词表 id | “词元”——模型输入的基本粒子 |
| subword | 比词小、比字大的片段(词根/后缀等) | 现代 tokenizer 的典型粒度 |
| OOV | 输入里词表没有的符号/词,退化为 [UNK] |
子词方案要消灭的失败模式 |
建议阅读顺序:Q1 定义 token 及其在 Transformer 输入链的位置 → Q2 定义 subword 与"为什么不是词也不是字" → Q3 定义 OOV 与它的消亡 → Q4 三者关系图与数学刻画 → Q5 实战数 token / 算成本 → Q6 误区;附录 A/B/C 是 tokenizer 速查、子词三算法回顾、工程清单。
Q1 · Token 是什么:从"字/词/词元"到模型输入
定义
token = tokenizer 把文本切成的最小单元,每个 token 对应词表里一个 id。 模型并不直接读字符或单词,而是先 文本 → token 序列 → 每个 token 查 embedding 表 → 向量 → 注意力计算。一个 token 可能是一个字、一个词、或一个词片段——取决于用哪种 tokenizer(见 Q2)。
粒度谱系(从小到大)
字符 (char) < 子词 (subword) < 词 (word) < 句子 (sentence) \text{字符 (char)} \;<\; \text{子词 (subword)} \;<\; \text{词 (word)} \;<\; \text{句子 (sentence)} 字符 (char)<子词 (subword)<词 (word)<句子 (sentence)
token 可以是这条谱线上的任意一级。关键认知:"token"是粒度中性的词,它既不等于"词"也不等于"字"——具体等于哪一级,由 tokenizer 决定。
token 在 Transformer 输入链中的位置
对一条长度为 nnn(= token 数)的输入:
raw text→tokenizer[id1,…,idn]→embedding[e1,…,en]→+positionTransformer\text{raw text} \xrightarrow{\text{tokenizer}} [id_1,\dots,id_n] \xrightarrow{\text{embedding}} [\mathbf{e}_1,\dots,\mathbf{e}_n] \xrightarrow{\text{+position}} \text{Transformer}raw texttokenizer[id1,…,

本文系统阐释NLP与大语言模型中token(词元)、subword(子词)和OOV(未登录词)三者的核心定义、内在关系及工程影响。重点说明token作为模型输入最小单位的粒度中立性;subword作为主流tokenizer的典型粒度,如何在词与字之间实现开放词表闭合;以及OOV如何被subword结构性消除,尤其byte-level BPE在数学上归零UNK。同时强调token数直接决定计算成本、上下文窗口与API计费。
383

被折叠的 条评论
为什么被折叠?



