三:Tokenizer自测题答案¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483764&idx=1&sn=667bfd22e295725c22f4fd176d56d662&chksm=f01eb20dc7693b1b36b54ef59c3dbcd2ae5f3b4d9d702d8aaaf171aaf98b87dbe4a97c79343f#rd
评分标准¶
-
合格:能解释 tokenizer 的作用,知道 subword tokenizer、BPE、special tokens 和 token id。
-
良好:能讲清 BPE/WordPiece/Unigram 的区别,理解 OOV、中文、多语言、chat template 和 embedding 兼容性。
-
优秀:能从训练语料、token efficiency、标签对齐、padding/truncation、成本、微调排错角度完整回答。
一、Tokenizer 基础¶
1. 请用 1 分钟解释 tokenizer 在大语言模型中的作用。¶
Tokenizer 把原始文本转换成模型能处理的 token id 序列,也负责把模型生成的 token id 解码回文本。它是文本和神经网络之间的接口。
典型流程是:文本先经过 tokenizer 得到 input_ids,再通过 embedding table 查表变成连续向量,送入 Transformer。模型输出 token id 后,也需要 tokenizer decode 成人类可读文本。
关键得分点:文本到 token id、token id 到文本、连接 tokenizer 和 embedding、模型绑定 tokenizer。
2. LLM 为什么不能直接处理原始字符串?为什么需要 token id?¶
神经网络处理的是数值张量,不能直接处理 Python 字符串或自然语言文本。tokenizer 先把字符串切成离散 token,再映射成整数 id。整数 id 可以用于 embedding lookup,得到连续向量。 token id 本身不是语义向量,而是词表中的索引。语义表示来自 embedding table 和模型训练。
3. token、vocabulary、token id、embedding table 之间是什么关系?¶
token 是 tokenizer 的基本文本单位。vocabulary 是所有 token 的集合。token id 是每个 token 在词表中的整数编号。embedding table 是模型参数矩阵,每一行对应一个 token id 的向量。 关系可以写成:
如果词表大小是V,隐藏维度是 d_model,embedding table 形状通常是 [V, d_model]。
4. tokenizer 的 encode 和 decode 分别做什么?¶
encode 把文本转换为 token id 序列:
decode 把 token id 序列转换回文本: 严格来说,decode 不一定总能完全还原原始文本,取决于 normalization、特殊 token、空格处理和 tokenizer 是否可逆。byte-level 和 SentencePiece 这类设计通常更强调可逆性。5. 为什么同一句话在不同模型中可能被切成不同 token?¶
不同模型使用的 tokenizer 可能不同,包括训练语料、词表大小、normalization、pre-tokenization、BPE merge rules、special tokens 和 chat template 都可能不同。因此同一句话会得到不同 token 序列。
例如一个 tokenizer 可能把 "unbelievable" 切成 un + believable,另一个可能切成 un + believe + able,还有一个可能切成更细的字节片段。
6. tokenizer 是否是模型训练后可以随意替换的组件?为什么?¶
不能随意替换。模型的 embedding table 与 tokenizer 的 token id 一一对应。若换 tokenizer,id 到 token 的映射会变化,embedding 行的语义就错位。 即使两个 tokenizer 词表大小相同,id 映射也可能不同。更换 tokenizer 通常需要重新初始化或对齐 embedding,并继续训练模型。
7. 词表大小 V 会影响模型哪些参数和计算?¶
词表大小影响输入 embedding table 参数量 [V, d_model],也影响输出 LM head [d_model, V]。如果使用 weight tying,二者共享权重,但词表越大仍然意味着 embedding 参数越多。
词表大小还影响最后 softmax over vocabulary 的计算和显存。过大词表增加参数和输出计算;过小词表会使文本切得更碎,序列更长。
8. 为什么上下文窗口通常按 token 计数,而不是按字符或词计数?¶
Transformer 接收的是 token id 序列。attention、position、KV cache、最大长度限制都作用在 token 序列长度上。因此上下文窗口自然按 token 数定义。 同样字符数的文本在不同 tokenizer 下可能对应不同 token 数,所以实际能塞进上下文窗口的内容取决于 tokenizer。
二、粒度选择:字符、词、子词¶
9. 字符级 tokenizer 的优点和缺点是什么?¶
优点是词表小,几乎没有 OOV,可以表示任意词和符号。缺点是序列长度长,模型需要更多 token 才能表达一个词或语义单元,训练和推理成本增加,长距离依赖更难。 字符级适合覆盖性,但 token efficiency 较差。
10. 词级 tokenizer 的优点和缺点是什么?¶
词级 tokenizer 的优点是 token 更接近自然语言词,序列较短,语义粒度直观。缺点是词表巨大,长尾词、新词、拼写变化、实体、代码标识符、URL 很容易 OOV。 词级方法在开放域 LLM 中不够鲁棒,因此现代模型更常用子词方案。
11. 子词级 tokenizer 为什么是现代 LLM 的主流选择?¶
子词 tokenizer 在词级和字符级之间折中。高频词可以保留为完整 token,低频词和未知词可以拆成更小片段。这样既控制词表大小,又能处理开放词汇。
它还能共享词形信息,例如 play、playing、played 之间可能共享子词片段,有助于泛化。
12. 子词 tokenizer 如何缓解 OOV 问题?¶
如果完整词不在词表中,子词 tokenizer 可以把它拆成词表中已有的子词、字符或字节片段。例如罕见词可以拆成常见前缀、词根、后缀。byte-level tokenizer 甚至可以退回到字节级表示任意字符串。
因此输入不一定需要 <unk>,而是通过多个 token 表示。
13. “可编码”是否等于“模型一定理解得好”?请解释。¶
不等于。Tokenizer 能把文本编码成 id,只说明模型能接收这个输入。若某个词被切得很碎,或训练语料中很少出现相关模式,模型仍可能理解不好。 例如一个罕见医学术语可被 byte-level BPE 编码,但如果模型训练中很少见到它,语义理解仍然有限。
14. 子词粒度过细和过粗分别有什么问题?¶
过细会导致序列变长,增加上下文占用、训练成本、推理延迟和 KV cache。模型还需要跨多个 token 组合一个语义单元。 过粗会导致词表变大,参数增加,长尾词覆盖差,OOV 或低频 token 学习不足。好的 tokenizer 要在词表大小和 token efficiency 之间折中。
15. tokenizer 的 token efficiency 是什么?为什么重要?¶
token efficiency 指同样文本被编码成多少 token。越少 token 通常表示效率越高。 它重要是因为 LLM 的上下文窗口、计算量、KV cache 和 API 计费都按 token 计。tokenizer 效率差会让同样文本占用更多上下文并增加成本。
三、Tokenizer Pipeline¶
16. 一个典型 tokenizer pipeline 包含哪些阶段?¶
典型 pipeline:
raw text
-> normalization
-> pre-tokenization
-> subword segmentation
-> token-to-id conversion
-> add special tokens / chat template
-> input_ids and attention_mask
17. normalization 的作用是什么?请举例说明。¶
normalization 负责把文本中的等价或近似变体规范化,减少无意义差异。例子包括 Unicode NFC/NFKC 规范化、大小写转换、全角半角转换、空白字符规范化、去除重音符号等。 目标是让模型看到更一致的文本形式,降低数据稀疏性。
18. normalization 可能带来哪些信息损失?¶
大小写、重音符号、全角半角、特殊标点、emoji 有时承载真实信息。比如代码区分大小写,实体名大小写有意义,德语名词大写有语法信息。 过度 normalization 会抹掉这些信息,影响任务效果。
19. pre-tokenization 的作用是什么?它和真正的 subword segmentation 有什么区别?¶
pre-tokenization 是正式子词切分前的粗切分,常按空格、标点、数字、字符类别等边界切分。subword segmentation 则是在这些片段上应用 BPE/WordPiece/Unigram 等规则得到最终子词。 pre-tokenization 决定边界,subword segmentation 决定边界内部如何拆分或合并。
20. 为什么很多 GPT 类 tokenizer 会把词前空格作为 token 的一部分?¶
把词前空格纳入 token 可以保留词边界和空格信息,使编码更可逆。例如 "hello" 和 " hello" 在上下文中语义边界不同,可能对应不同 token。
这也是为什么很多 GPT tokenizer 中,带前导空格的英文词是常见 token。
21. tokenizer 训练阶段和使用阶段有什么区别?¶
训练阶段根据语料学习词表、merge rules 或子词概率。使用阶段不再学习规则,而是把新文本按已经训练好的规则编码成 token id。 BPE 使用阶段不会重新统计当前输入中的 pair 频率,而是应用训练好的 merge priority。
22. tokenizer 训练语料的语言和领域分布会如何影响词表?¶
高频语言和领域会占据更多词表容量。英文网页多,英文常见词会更高效;代码多,代码符号和标识符片段会更多;多语言均衡,其他文字系统会得到更多 token。 如果目标领域与 tokenizer 训练语料差异很大,可能出现 token 数膨胀、长尾术语切碎、模型理解困难等问题。
四、BPE 与 Byte-level BPE¶
23. BPE 的训练流程是什么?¶
BPE 从字符或字节等小单位开始。每轮统计语料中相邻 token pair 的频率,选择最高频 pair 合并成新 token,并加入词表。重复这个过程直到达到目标词表大小或 merge 次数。 简化流程:
24. BPE 中的 merge rule 是什么?编码新文本时是否会重新统计 pair 频率?¶
merge rule 是训练阶段学到的 pair 合并规则和优先级。例如先合并 l + o -> lo,再合并 lo + w -> low。
编码新文本时不会重新统计频率,而是按已有 merge rules 对输入片段进行合并。
25. 请用一个简单例子说明 BPE 如何从字符逐步合并成子词。¶
假设语料中 l o w 和 l o w e r 很常见。初始按字符拆分:
l o 最频繁,合并成 lo:
如果 lo w 最频繁,再合并成 low:
高频片段逐渐成为更长 token。
26. BPE 为什么能在有限词表下处理未见词?¶
BPE 的词表包含不同长度的子词片段。未见完整词可以拆成已知子词,甚至回退到字符或字节片段。因此不需要完整词在词表中也能编码。 这比词级 tokenizer 更适合开放词汇。
27. byte-level BPE 和普通字符级 BPE 有什么区别?¶
普通字符级 BPE 的初始单位是字符,依赖 Unicode 字符处理。byte-level BPE 的初始单位是字节,任何字符串都能表示为 UTF-8 字节序列。 byte-level BPE 覆盖性更强,几乎可以编码任意文本,但字符和 byte 边界不一定一致。
28. byte-level BPE 为什么几乎可以避免 ?¶
因为任意文本都可以转换为字节序列,只要 tokenizer 覆盖所有基础字节,就能表示任何字符、emoji、乱码或罕见符号。即使没有高层子词,也可以退回到字节。
因此 byte-level tokenizer 通常不需要大量依赖 <unk>。
29. byte-level tokenizer 对中文、emoji 或罕见字符可能有什么代价?¶
中文或 emoji 在 UTF-8 中可能由多个字节表示。如果没有高频合并规则,它们可能被切成多个 byte-level token,导致 token 数增加。token 数增加会占用上下文、增加成本,并让模型更难以把多个碎片组合成语义单元。
30. GPT 类模型中常见的 byte-level BPE 对空格和英文词有什么特殊影响?¶
很多 GPT 类 tokenizer 会把前导空格和词一起编码,例如 " hello" 可能是一个 token,而句首 "hello" 是另一个 token。这保留了空格和词边界信息,也解释了为什么同一个词在句首和句中可能 token id 不同。
五、WordPiece、Unigram 与 SentencePiece¶
31. WordPiece 的核心思想是什么?它和 BPE 的直觉区别是什么?¶
WordPiece 也是子词 tokenizer,但它更强调选择能提升语料似然或统计评分的子词,而不是像 BPE 那样简单合并最高频 pair。实际使用中,WordPiece 编码常表现为 greedy longest-match,从词表中找能匹配当前字符串的最长子词。 面试中可简化为:BPE 是 merge-based,WordPiece 是 score/likelihood-based 的子词选择。
32. WordPiece 中 ## 前缀通常表示什么?¶
## 表示这个 token 是词内部续接片段,不是一个新词开头。例如:
33. Unigram tokenizer 的核心思想是什么?¶
Unigram 先构造一个较大的候选子词词表,并为每个子词学习概率。然后逐步删除对语料似然影响较小的子词,最终保留目标词表。编码时可以考虑多种切分路径,选择概率最高或代价最低的分割。 它是概率模型思路,而不是从小到大反复合并。
34. Unigram 和 BPE 在训练方向上有什么不同?¶
BPE 从小单位开始,逐步合并高频 pair,词表由小变大。Unigram 通常从较大的候选词表开始,根据概率和似然裁剪,词表由大变小。 简化记忆:BPE 是自底向上合并,Unigram 是候选词表概率建模和剪枝。
35. SentencePiece 的重要特点是什么?为什么它对中文、日文等无空格语言友好?¶
SentencePiece 把输入当成原始 Unicode 字符序列,不要求先按空格分词。它可以直接从原始文本学习 BPE 或 Unigram 子词模型。 对于中文、日文这类没有显式空格分词边界的语言,这种语言无关处理更友好,不依赖外部分词器。
36. SentencePiece 中 ▁ 符号通常表示什么?¶
▁ 通常表示空格边界。SentencePiece 会把空格也编码进 token 序列,例如:
37. 请对比 BPE、WordPiece、Unigram 三者的核心差异。¶
BPE 从字符或字节开始,反复合并高频相邻 pair。WordPiece 基于统计评分或似然选择子词,常见于 BERT,并用 ## 标记续接片段。Unigram 从较大候选词表开始,为子词学习概率并裁剪低贡献 token。
共同点是它们都属于 subword tokenizer,在词级和字符级之间折中,缓解 OOV 并控制词表大小。
六、Special Tokens 与 Chat Template¶
38. special tokens 是什么?请列举常见 special tokens 及其作用。¶
special tokens 是词表中的控制符,不一定对应普通文本。常见包括 <bos> 表示序列开始,<eos> 表示结束,` 用于 padding,表示未知 token,用于 MLM,[CLS]用于分类表示,[SEP]` 用于分隔句子,role tokens 用于 chat model 标记角色。
它们是模型输入格式的一部分。
39. BOS、EOS、PAD、UNK 分别是什么?¶
BOS 是 beginning of sequence,表示序列开始。EOS 是 end of sequence,表示序列结束或生成停止。PAD 是 padding token,用于补齐 batch 长度。UNK 是 unknown token,用于表示无法识别的输入片段。 现代 byte-level tokenizer 通常可以减少 UNK 使用,但 EOS/PAD 等仍很重要。
40. BERT 中 [CLS]、[SEP]、[MASK] 分别有什么作用?¶
[CLS] 通常放在输入开头,其最终 hidden state 常用于分类任务。[SEP] 用于分隔句子或片段,例如句子 A/B。[MASK] 用于 masked language modeling 预训练,让模型预测被遮盖 token。
这些 special tokens 与 BERT 的预训练目标和输入格式绑定。
41. decoder-only chat model 中 role tokens 或 turn separators 为什么重要?¶
chat model 需要知道哪些内容来自 system、user、assistant,以及每轮对话的边界。role tokens 和 turn separators 把这些结构显式编码进输入 token 序列。 如果没有正确角色标记,模型可能混淆自己该扮演的角色,或者把用户内容当成助手内容续写。
42. chat template 和 tokenizer 有什么关系?¶
chat template 是把结构化 messages 转成模型训练时文本格式的模板,然后再交给 tokenizer 编码。它决定 role token、分隔符、BOS/EOS、assistant prompt 等如何插入。 不同模型 chat template 不同。使用错误模板会让输入分布偏离训练格式。
43. 如果 chat template 用错,模型可能出现哪些问题?¶
可能出现角色混乱、答非所问、重复 system/user 标记、不知道从哪里开始回答、无法停止、输出格式异常、拒答风格异常等问题。 这类问题往往不是模型能力不足,而是输入格式与训练格式不匹配。
44. 为什么 EOS token 对生成停止很重要?¶
EOS 告诉模型序列或回答可以结束。解码器生成 EOS 后,推理框架通常停止生成。如果 EOS 缺失或 id 配错,模型可能停不下来;如果过早生成 EOS,回答会被截断。 训练数据中的 EOS 使用方式也会影响模型学会何时结束。
45. decode 时 skip_special_tokens=True 可能解决什么问题?又可能隐藏什么问题?¶
它可以在最终展示给用户时去掉 <s>、</s>、``、role tokens 等控制符,让输出更干净。
但它也可能隐藏模板或模型输出问题。调试时如果 special tokens 乱出现,应该先看原始 decode 结果,而不是一味跳过。
七、中文、多语言、代码与结构化文本¶
46. 中文 tokenizer 为什么不能简单照搬英文按空格分词的思路?¶
中文词之间通常没有空格,按空格无法得到词边界。直接照搬英文空格分词会把整句当成很长片段或退化成字符/字节处理。 中文 tokenizer 需要按字、词、子词或语言无关方法处理,如 SentencePiece 或 byte-level BPE。
47. 同样长度的中文、英文、代码在不同 tokenizer 下 token 数为什么可能差异很大?¶
tokenizer 的训练语料、词表分配、byte-level 策略、空格处理和领域覆盖不同。英文高频词可能是单 token,中文字符可能被切成多个 token,代码符号或标识符也可能被切碎。 因此同样字符数不等于同样 token 数。
48. 多语言 tokenizer 的词表分配会带来哪些公平性或效率问题?¶
词表容量有限。如果高资源语言占据大量词表,低资源语言可能被切得更碎,导致 token 数更多、成本更高、有效上下文更短,模型学习也更困难。 这会形成语言间 token efficiency 不平衡。
49. 代码 tokenizer 需要特别关注哪些字符或结构?¶
需要关注缩进、换行、空格、下划线、驼峰命名、括号、引号、点号、运算符、注释、路径、包名和常见关键字。代码语义对符号和格式很敏感,错误切分或低效切分都会影响建模和生成。
50. 数字、日期、URL、JSON 被切得很碎会带来哪些影响?¶
会增加 token 数和成本,也可能降低模型复制、比较和结构保持能力。数字被切碎后,模型更难做精确数值处理。URL/JSON 切碎会影响格式完整性和引用准确性。 不过切得过粗也有问题,模型可能难以泛化到未见数字或组合。
51. emoji、罕见符号、乱码为什么会考验 tokenizer 的鲁棒性?¶
这些字符在训练语料中可能低频,Unicode 表示复杂。如果 tokenizer 覆盖不好,可能产生 <unk> 或很多碎片 token。byte-level tokenizer 对这类输入更鲁棒,因为它可以退回到字节表示。
但鲁棒编码不等于语义理解充分。
八、训练、微调与标签对齐¶
52. 为什么微调时必须使用与基座模型匹配的 tokenizer?¶
基座模型的 embedding table 是按原 tokenizer 的 token id 学出来的。微调时如果换 tokenizer,输入 id 序列和 embedding 语义会错位,模型看到的向量不再对应正确文本。 因此微调、推理、评测必须使用基座模型匹配的 tokenizer 和 chat template。
53. 新增 special token 或领域 token 后,模型侧需要做什么?¶
需要把 token 加入 tokenizer 词表,并调用类似 resize_token_embeddings 的操作扩展模型 embedding 和 LM head。新增 token 的 embedding 需要初始化,并通过继续训练或微调学习其语义。
如果使用 weight tying,也要确保输入 embedding 和输出 head 同步扩展。
54. 什么是 resize token embeddings?什么时候需要?¶
resize token embeddings 是调整模型 embedding table 的行数,使其与 tokenizer 新词表大小一致。新增 token、扩展 special tokens、替换或扩展词表时都需要。 否则可能出现 token id 超出 embedding 范围,或 embedding/LM head shape mismatch。
55. token-level 任务中,subword 切分会如何影响标签对齐?¶
一个原始词可能被切成多个 subword,但标签通常按词或字符标注。需要把原始标签映射到 subword token 上,否则训练标签会错位。
例如 NER 中 Washington 被切成 Wash + ##ington,需要决定两个 subword 如何标注。
56. offset mapping 是什么?它在 NER、QA、信息抽取中有什么用?¶
offset mapping 记录每个 token 对应原始文本中的字符起止位置:
它可以把模型 token-level 输出映射回原文 span,在 NER、抽取式 QA、实体抽取中非常关键。57. 对一个词被切成多个 subword 的情况,标签可以有哪些处理策略?¶
常见策略包括:只给第一个 subword 打标签,后续 subword 标记为 ignore;给所有 subword 复制同一标签;使用 B/I 标签时让第一个为 B,后续为 I。 选择策略要和 loss 计算、评测还原方式一致。
58. SFT 中 prompt token、answer token、padding token 是否都应该参与 loss?这和 tokenizer 有什么关系?¶
通常只让 assistant answer token 参与 loss,prompt token 和 padding token 会被 mask 掉。padding token 不是有效文本,不应参与 loss;prompt token 是条件输入,不一定希望模型学习复述 prompt。 tokenizer 和 chat template 决定哪些 token 属于 system/user/assistant、哪些是 special tokens 和 padding,因此直接影响 loss mask 构造。
九、Padding、Truncation 与 Attention Mask¶
59. padding、truncation、attention mask 分别是什么?¶
padding 是把短序列补齐到统一长度。truncation 是截断超过最大长度的序列。attention mask 标记哪些位置是真实 token,哪些是 padding,通常真实 token 为 1,padding 为 0。 这些是 batch 训练和推理中构造张量的基础。
60. padding token 如果参与 attention 或 loss,会带来什么问题?¶
如果参与 attention,真实 token 可能读取 padding 的无效信息。如果参与 loss,模型会被训练去预测 padding,污染训练目标。两者都会降低训练质量,严重时导致 loss 或输出异常。 因此 padding 位置应通过 attention mask 和 label mask 排除。
61. left padding 和 right padding 在 decoder-only 推理中有什么差异和风险?¶
right padding 把 pad 放在序列末尾,left padding 把 pad 放在前面。decoder-only 批量推理中,不同框架对 padding 方向、position ids、KV cache 和最后有效 token 的处理要求不同。 如果 padding 方向与模型或推理代码不匹配,可能导致位置编码错误、取错最后 token logits、生成质量下降。
62. 截断策略设计不当会导致什么问题?¶
可能截掉问题、答案、关键上下文、EOS 或重要指令。训练中会让样本语义不完整;推理中会导致模型缺少必要信息;评测中会让结果不可比。 长文本任务需要设计 sliding window、保留首尾、摘要压缩或检索策略,而不是盲目截断。
63. tokenizer 输出的 input_ids、attention_mask、labels 通常各自表示什么?¶
input_ids 是 token id 序列。attention_mask 标记哪些 token 可见或有效,常用于屏蔽 padding。labels 是训练目标 token id,语言模型中通常是 shift 后的目标,并用 -100 等 ignore index mask 掉不参与 loss 的位置。
十、工程排错与面试追问¶
64. 如果模型输出中出现大量 、、 这类符号,可能是什么原因?¶
可能是 decode 时没有跳过 special tokens;chat template 或 special token id 配错;训练数据中把 special tokens 当普通文本学进去了;EOS/PAD 配置混乱;loss mask 错误导致模型学习输出 padding 或控制符。 调试时应查看 raw token ids、tokenizer special tokens map、decode 参数和训练样本格式。
65. 如果同一段中文在某模型中 token 数异常多,可能是什么原因?¶
可能该 tokenizer 的中文覆盖不足,语料偏英文,中文字符被拆成字节或细粒度片段;normalization 或 pre-tokenization 不适合中文;词表大小或训练语料导致中文 token efficiency 低。 这会增加上下文占用和成本。
66. 如果微调后模型完全不会说话或输出乱码,tokenizer 相关原因有哪些?¶
可能使用了错误 tokenizer;token id 与 embedding 语义错位;新增 token 后没有 resize embedding;chat template 错误;special token id 配错;训练 labels 没有正确 mask;decode 使用了错误 tokenizer。 第一步应确认模型、tokenizer、config、special tokens 和训练样本 decode 是否一致。
67. 如果新增 token 后训练报 embedding shape mismatch,应该如何排查?¶
检查 tokenizer 词表大小和模型 embedding 行数是否一致;确认是否调用 resize_token_embeddings(len(tokenizer));检查 LM head 是否同步扩展;确认 checkpoint 加载时是否有大小不匹配;检查新增 special token 是否重复添加。
68. tokenizer 会如何影响 API 成本和推理延迟?¶
API 通常按输入和输出 token 计费。Tokenizer 切得越碎,同样文本 token 数越多,成本越高。推理中 token 数增加也会增加 prefill 计算、attention 开销和 KV cache 显存,延迟可能上升。 因此 tokenizer 是成本和性能的重要前置因素。
69. 你会如何评估一个 tokenizer 对某个领域是否合适?¶
可以统计领域语料的平均 token/字符、token/词、长尾术语切分长度、OOV/UNK 比例、特殊符号覆盖、代码/数字/URL 切分质量、多语言 token efficiency。还可以比较不同 tokenizer 下的训练吞吐、上下文占用、下游指标和人工样例。 领域 tokenizer 是否合适,不能只看词表大小,要看实际语料上的效率和任务效果。
70. 请总结 subword-based tokenizer 的核心价值、主要算法和工程注意事项。¶
核心价值是在字符级和词级之间折中:用有限词表覆盖开放词汇,同时保持较好的 token efficiency。主要算法包括 BPE、byte-level BPE、WordPiece、Unigram/SentencePiece。BPE 通过高频 pair 合并,WordPiece 基于评分或似然选择子词,Unigram 基于概率词表和剪枝。 工程上要关注 tokenizer 与模型 embedding 兼容、special tokens、chat template、padding/truncation、loss mask、offset mapping、中文和多语言效率、代码和结构化文本切分,以及 token 数对成本和延迟的影响。 关键得分点:折中、OOV、主流算法、模型绑定、工程影响。
预览时标签不可点
<div class="