大模型连载2:初步认识 tokenizer 的过程
基本信息
- 作者: 董章鱼是个攻城狮
- 链接: https://juejin.cn/post/7612288284083486746
导语
继上一节对 Token 概念的探讨,本文将深入解析大模型处理文本的核心环节——Tokenizer 的工作流程。理解这一机制,有助于我们厘清模型如何将人类语言转化为可计算的向量,从而真正掌握大模型输入端的底层逻辑。通过本文,你将建立起对文本切分与 ID 映射过程的直观认知,为后续探究模型原理打下坚实基础。
描述
在上一节,我们介绍了 token 的概念。 你可以这么认为, token 是自然语言处理场景(如文本生成、AI聊天)下,AI 模型能够处理的最小单位。 在计算机视觉中,模型以像素为单位来处理图像像素之
摘要
由于提供的内容在“像素之”处截断,以下总结基于文本中已呈现的完整部分进行概括:
本文是大模型连载系列文章的第二部分,旨在介绍 Tokenizer(分词器) 的初步概念与作用。
核心概念回顾: 文章首先承接上一节内容,重申了 Token(词元) 的定义。在自然语言处理(如文本生成、AI聊天)场景中,Token 被视为 AI 模型能够理解和处理的最小单位。
跨领域类比: 为了帮助读者理解,文章采用了跨学科的类比:将自然语言处理中的 Token 与计算机视觉中的 像素 进行对比。正如计算机视觉模型以像素为单位来处理图像一样,大语言模型也是以 Token 为基础单位来对文本进行计算和处理。
总结: 本节内容主要确立了 Token 在 AI 模型处理语言时的基础地位,并通过与图像处理中像素概念的类比,形象地说明了模型输入数据的颗粒度。
评论
文章中心观点: Tokenizer 是连接人类自然语言与大模型数学计算空间的“网关”,其分词逻辑直接决定了模型的推理能力上限、训练效率以及对多语言/多模态的适应性,是理解大模型工作原理的基石。
深入评价与分析:
1. 内容深度与论证严谨性(事实陈述/你的推断) 文章将 Token 比作 NLP 中的“像素”,这是一个类比恰当的入门视角,但在技术深度上存在明显的简化主义倾向。
- 支撑理由:对于初学者而言,理解“文本不能直接输入模型,必须转化为数字”是关键的第一步。文章强调了 Token 作为最小单位的概念,这符合 BPE(Byte Pair Encoding)或 WordPiece 等主流算法的基本逻辑。
- 边界条件/反例:将 Token 简单等同于“最小单位”在技术上是不严谨的。现代大模型(如 Llama 3 或 GPT-4)实际上是在 Byte(字节) 或 Sub-word(子词) 层面进行操作的,而非单纯的语义词元。此外,视觉模型虽然以像素为输入,但往往经过 Patch Embedding 处理,这与文本的 Tokenization 存在显著的模态差异,直接类比容易掩盖多模态对齐的技术难点。
2. 实用价值与行业痛点(事实陈述/作者观点/你的推断) 文章的实用价值在于建立“词汇表意识”,这对实际工作中的 Prompt Engineering 和模型选型至关重要。
- 支撑理由:理解 Tokenizer 能解释为什么模型在处理代码或生僻字时表现不佳,或者为什么某些语言的推理成本更高(如泰语 vs 英语)。这对于开发者优化 Prompt(减少冗余 Token)和估算 API 成本具有直接指导意义。
- 边界条件/反例:仅“认识过程”是不够的。在工业界,Tokenizer 的选择往往涉及安全性与对齐问题。例如,某些 Tokenizer 可能会将敏感词拆分为多个 Token 从而绕过安全审查,或者因为分词粒度过粗导致模型“幻觉”增加。如果文章未提及 Tokenizer 对模型“世界观”的潜在扭曲(例如某些语言被切分得更碎,导致模型该语言能力下降),则其实用性仅停留在表面。
3. 创新性与行业影响(你的推断) 作为一篇连载文章,其内容属于基础知识的复述,创新性较低,但强调了容易被忽视的基建作用。
- 支撑理由:在当前行业狂热追求“Scaling Law”和“MoE架构”的背景下,回归到 Tokenizer 这一基础组件进行审视,有助于纠正“模型越大越好”的片面认知。实际上,OpenAI 推出 tiktoken 和 Google 的 SentencePiece 都证明了底层分词器的性能优化能带来直接的训练效率提升。
- 边界条件/反例:行业目前的趋势是去 Tokenizer 化或 Byte-level 建模(如 Meta 的 LLaMA 3 在某些层面优化了字节处理),旨在解决多语言切分不均和数字逻辑推理能力弱的问题。如果文章仅停留在传统的 BPE 介绍,而未触及字节级建模的新趋势,其观点可能略显滞后。
4. 可读性与逻辑性(事实陈述) 连载形式保证了知识点的颗粒度,逻辑链条清晰(从概念到过程),适合非技术背景的读者快速建立认知框架。
5. 争议点与批判性思考(你的推断)
- 争议点:Tokenizer 是否应该包含语义理解?
- 传统观点认为 Tokenizer 仅是统计工具,不应包含语义。
- 但现代研究发现,糟糕的分词会破坏词的形态学意义(例如将“unhappiness”切得支离破碎),迫使模型不得不花费大量参数去“反向拼凑”语义,这被称为 Tokenizer Tax(分词税)。
- 批判性观点:文章可能过分美化了现有 Tokenizer 的通用性。实际上,现有的 ASCII 偏向的 Tokenizer 对亚洲语言(中文、日文、韩文)极不友好,这在本质上是一种算法层面的“语言霸权”。
实际应用建议:
- Prompt 优化:在编写 Prompt 时,尽量使用常见的自然语言,避免使用生僻缩写或特殊符号,以减少 Token 切分数量,提高推理速度。
- 模型选型:针对特定垂直领域(如医疗或代码),考虑使用经过微调的专用 Tokenizer,这往往比单纯扩大模型尺寸更能提升准确率。
- 多语言开发:在构建多语言应用时,必须检查目标语言的 Token 效率(Token per Word),否则成本可能会失控。
可验证的检查方式:
Token 效率测试(指标):
- 使用 OpenAI Tokenizer 或 Tiktoken 工具,分别输入一段长度为 100 个单词的中文、英文和代码文本。
- 观察窗口:计算不同语言下的 Token 数量与字符数的比率。如果中文切分出的 Token 数远超英文,说明该 Tokenizer 存在语言偏见。
切分逻辑验证(实验):
- 输入一组具有共同前缀的词汇(如 “apple”, “app”, “application”, “apply”)。
- 观察窗口:检查 Tokenizer 是否正确识别了 “app” 作为公共子词。如果它将 “apple” 切分为 “a” + “pp” + “le
学习要点
- 基于对大模型 Tokenizer(分词器)原理及常见文章内容的深度理解,为您总结关键要点如下:
- Tokenizer 是连接人类语言与大模型数学计算的桥梁,其核心任务是将文本流转化为模型可处理的整数序列。
- 分词粒度直接决定了模型的“词表量”大小,需要在压缩文本序列长度与降低模型训练及推理算力成本之间寻找最佳平衡点。
- BPE(字节对编码)是目前主流大模型最常用的分词算法,它通过迭代合并高频字符对来构建词表,能有效处理未登录词问题。
- 分词过程不仅是简单的切分,还包含“归一化”和“预分词”等步骤,这些预处理逻辑直接影响模型对特殊符号和空格的处理能力。
- 同一语义内容在不同语言或不同 Tokenizer 下切分出的 Token 数量差异巨大,这直接影响了模型处理该内容的上下文窗口占用和推理成本。
- 使用 SentencePiece 等工具进行 Tokenizer 训练时,通常需要去除文本中的空格,将所有字符视为独立的 Unicode 码元进行统一处理。
常见问题
1: 为什么在将文本输入大模型之前必须进行 Tokenization?
1: 为什么在将文本输入大模型之前必须进行 Tokenization?
A: Tokenization 是大模型处理自然语言的首要且不可或缺的步骤,主要原因有两点。首先,大模型无法直接理解人类语言的字符或字符串,它们只能处理数值。Tokenization 的核心作用就是将文本字符串转换为模型可以计算的数字序列。其次,它通过将文本切分为具有语义或语法意义的最小单元,帮助模型更高效地学习语言规律。如果直接按字符切分,模型难以捕捉长距离依赖;如果按单词切分,词表会过于庞大且难以处理生僻词。因此,Tokenization 是连接人类语言与模型数学表示之间的桥梁。
2: Token(词元)和 Word(单词)有什么区别?
2: Token(词元)和 Word(单词)有什么区别?
A: 在传统的自然语言处理中,基本单位通常是“单词”。但在大模型时代,Token 的概念更加宽泛且灵活。Token 不一定是一个完整的英语单词,它可以是单词的一部分、一个汉字、一个标点符号,甚至是一个空格。例如,单词 “unhappiness” 可能会被切分为 “un”, “happi”, “ness” 三个 Token。这种子词级别的切分策略使得模型能够利用词根和词缀的知识,从而更好地处理生僻词或未登录词,同时有效控制了词表的大小。
3: 不同的 LLM 使用不同的 Tokenizer 会有什么影响?
3: 不同的 LLM 使用不同的 Tokenizer 会有什么影响?
A: 不同的模型通常训练使用不同的 Tokenizer,这直接导致了模型对文本的“世界观”不同。具体影响体现在:第一,计费与上下文窗口限制。由于目前主流 API 都按 Token 计费,且模型有最大上下文长度限制(如 4k、8k),高效的 Tokenizer 能用更少的 Token 表达更多信息,从而降低用户成本并允许输入更长的文本。第二,多语言能力。某些 Tokenizer 对英文优化极好,但对中文或其他语言支持较差,导致处理非英文文本时 Token 数量激增,性能下降。因此,选择对特定语言优化过的 Tokenizer 至关重要。
4: 为什么同一个汉字在不同模型中算作 1 个 Token 还是 2 个 Token?
4: 为什么同一个汉字在不同模型中算作 1 个 Token 还是 2 个 Token?
A: 这取决于 Tokenizer 的训练数据和算法。如果模型主要基于中文语料训练,它很可能会将常用汉字直接收录进词表,此时一个汉字等于 1 个 Token。但如果模型是基于英文或多语言语料训练的(例如早期的 GPT 系列),其词表中可能没有完整的汉字,只有汉字的编码片段(如 UTF-8 字节)。在这种情况下,一个汉字可能会被拆解成 2 个甚至 3 个 Token。这就是为什么中文在未针对中文优化的模型中处理效率较低且费用较高的原因。
5: Tokenizer 的训练过程是怎样的?
5: Tokenizer 的训练过程是怎样的?
A: Tokenizer 的训练通常是一个无监督的过程,主要包含以下步骤:首先,准备大规模的与模型训练语料相似的数据集;其次,选择一种分词算法(目前最主流的是 BPE - Byte Pair Encoding,或 SentencePiece、Unigram 等);最后,让算法在语料上统计并合并。以 BPE 为例,它从所有字符开始,统计语料中相邻字符对的出现频率,不断地将最高频的字符对合并成一个新的 Token,并加入词表,直到词表达到预设的大小(例如 5 万或 10 万)。这样训练出来的 Tokenizer 既包含了高频词,也包含了高频的子词片段。
6: 特殊标记(如 <BOS>, <EOS>, <PAD>)在 Tokenization 过程中起什么作用?
6: 特殊标记(如 <BOS>, <EOS>, <PAD>)在 Tokenization 过程中起什么作用?
A: 这些特殊标记被称为控制符,它们虽然不对应具体的语言含义,但对模型理解句子结构至关重要。<BOS> (Begin of Sequence) 告诉模型输入的开始;<EOS> (End of Sequence) 标记输入的结束,有助于模型判断何时停止生成;<PAD> (Padding) 用于在批量处理时,将不同长度的句子填充至相同长度,以便张量计算。此外,还有 <UNK> (Unknown) 用于处理词表中不存在的生僻词。在 Tokenization 过程中,程序会自动在文本序列的首尾或中间插入这些 ID,确保模型能正确解析任务指令。
7: 如何直观地查看一段文本被切分成了哪些 Token?
7: 如何直观地查看一段文本被切分成了哪些 Token?
A: 最直观的方法是使用 OpenAI 官方提供的 Tokenizer 可视化工具(Tokenizer),或者使用 Hugging Face 的在线工具。你只需将文本粘贴进去,工具就会用不同颜色将文本高亮显示,展示出哪里被切开,哪里被合并。例如,输入 “I have a dream”,可能会看到 “I”, " have”, " a", " dream" 四个色块。这种可视化能帮助开发者理解模型是如何“看”待文本的,从而优化 Prompt 的写法以减少 Token 消耗。
引用
注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。
站内链接
相关文章
- 大模型连载1:理解 Token 这一基础概念
- 大模型连载1:理解自然语言处理与大模型中的 Token 概念
- 训练万亿参数模型以生成幽默内容
- 为何AI写作平庸且危险:语义消融机制解析
- 提示工程悖论:为何与AI对话比预期更难 本文由 AI Stack 自动生成,提供深度内容分析。