【AI面试临阵磨枪】什么是 Tokenization?子词分词(Subword)的优缺点?

张开发
2026/4/19 22:45:25 15 分钟阅读

分享文章

【AI面试临阵磨枪】什么是 Tokenization?子词分词(Subword)的优缺点?
一、 面试题目请详细解释什么是大模型中的Tokenization分词目前主流的子词分词Subword Tokenization技术如 BPE, WordPiece解决了什么问题它的优缺点分别是什么二、 知识储备1. 核心背景什么是 TokenizationTokenization 是将自然语言文本转换为模型可处理的离散数字序列的过程。直观理解模型不认识“苹果”或“Apple”它只认识数字。Tokenization 就是把句子切成一块块Tokens并查表映射为索引Index。切分粒度从粗到细分为词Word、子词Subword、字符Character。2. 子词分词Subword Tokenization详解目前主流模型如 GPT、BERT均采用子词分词如 BPE 算法。它通过将高频词保留为完整词、将低频词拆分为多个常用片段来平衡性能。子词分词解决的核心痛点词表爆炸如果按词Word分词词表会大到显存塞不下英语有百万级词汇。OOVOut of Vocabulary问题如果按词分词模型遇到没见过的生僻词如新造词就直接“抓瞎”报错。语义损失如果按字符Character分词粒度太细模型很难学习到字母组合背后的完整语义。3. 子词分词的优缺点对比维度优点缺点词表大小适中。通常在 3w-10w 之间兼顾性能与效率。需要在分词速度与复杂度之间做权衡。处理新词极强。遇到生僻词会拆解成熟悉的子词如unhappy-unhappy。某些拆分可能导致原始词根语义被切割如undesirable拆得太碎。信息密度高效。高频词占一个 Token低频词占多个压缩率高。对非英语不友好。同样的句子中文可能比英文消耗更多 Token分词粒度差异。字符还原无损。可以通过子词序列 100% 还原原始字符串。数字、公式或生僻字符容易被拆分成极其零碎的 Token。三、 代码实现1. Python 实现模拟 BPE 子词切分逻辑在 Python 中我们常用tiktoken或transformers库来观察子词切分。import tiktoken # 1. 加载 GPT-4 的分词器 enc tiktoken.get_encoding(cl100k_base) # 2. 观察子词切分生僻词会被拆解 text Tokenization is amazing! tokens enc.encode(text) # 3. 打印结果你会发现 Token ID 和切分后的片段 print(fToken IDs: {tokens}) # 解码查看具体的子词切分 print(fSubwords: {[enc.decode([t]) for t in tokens]})2. Node.js 实现统计 Token 消耗Web 业务常用在 Node.js 业务中我们通常需要通过分词来计算成本Token 计费。const { encoding_for_model } require(tiktoken); function countTokens(text, model gpt-4) { const enc encoding_for_model(model); const tokens enc.encode(text); // 释放内存 enc.free(); return tokens.length; } // 示例中文的分词密度通常比英文大 console.log(countTokens(你好AI时代));四、 破局之道在回答完流程后通过这段话展现你对底层语言建模的思考回答 Tokenization 问题核心要理解它是在“寻找语言表达的最优信息熵”。你可以告诉面试官词分词Word输在了灵活性解决不了新词问题字符分词Char输在了效率序列太长导致模型“计算疲劳”子词分词Subword则是通过统计学手段在词表规模与语义完整性之间找到了工程上的平衡点。在实际落地中我非常关注Token 效率。比如在中英混合场景下我会关注分词器对中文的压缩比因为这直接决定了上下文窗口的使用率和 Token 成本。一个优秀的开发者不应只把 Token 看作数字而应理解它是模型与现实世界沟通的“翻译官”分词算法的优劣直接决定了模型理解语义的颗粒度和推理的性价比。

更多文章