模型不读文本:分词器替你决定了什么

AI小蝌蚪AI 前沿📡 BestBlogs·AI高分精选⭐ 882026-09-21253 阅读💛 36 收藏
模型不读文本:分词器替你决定了什么

📌 One-Sentence Summary 语言模型的分词器并非预处理步骤,而是模型产物中一个冻结的、不可分割的组成部分,它将文本压缩为整数 ID,这对跨语言的 token 计数、JSON 负载以及生产系统都有重大影响。 📝 Summary 本文解释了为什么语言模型的分词器与软件预处理有着本质区别。作者出身编译器背景,将编译器的词法分析器与模型的分词器进行类比:两者都将文本转换为结构化表示,但模型的分词器目标不同——它追求的是压缩而非结构识别。文章详细介绍了 tiktoken 中实现的字节对编码(BPE),展示了词表如何从训练语料中学习得到,以及编码如何是一个简单的贪心算法。关键技术细节包括:BPE 操作的是字节而非字符,因此未知字符的代价最高可达每个 UTF-8 字节一个 token;GPT-2 的正则表达式将前导空格附着到后续单词上,这解释了为什么行首与行中的分词结果不同;词表直接编码了训练数据的频率分布,使得西班牙语和 JSON 的分词成本高于英语。文章强调,分词器与模型权重构成一个耦合的整体——替换分词器会改变模型权重的含义,而两者一旦脱节就会产生静默失败。对于 ML 工程师而言,实用建议包括:将分词器与模型权重一起做版本管理、在生产前测量各语言和各领域的成本、谨慎处理特殊 token,以及始终使用 token 计数而非字符计数来判断上下文限制。 💡 Main Points 分词器是模型产物的一部分,而非预处理 在软件中解析器与数据是分离的,但模型的分词器在训练时就被冻结并与权重耦合。替换它会改变模型所看到的内容及其含义,实际上等于用相同的权重创造了一个不同的模型。 BPE 通过从语料频率中学习合并规则来压缩文本 字节对编码从 256 个字节 token 开始,迭代合并最频繁的相邻字节对,直到达到目标词表大小。编码是一个简单的贪心算法,总是选择排名最低的合并;而训练则选择最频繁的合并。 token 计数在不同语言和格式之间差异巨大 在 GPT-2 下西班牙语的成本约为英语的 1.7 倍,在更新的编码下仍为 1.2 倍;JSON 在测试的三种分词器下成本均约为 2.3 倍,因为花括号和引号等结构字符无法被独立压缩。 分词器的选择对生产有直接影响 以 token 计的上下文窗口对西班牙语或 JSON 的容纳量少于英语;按 token 计价即按语言计价;带有结构化元数据的提示词模板每次调用都按 JSON 费率付费。当分词器与模型版本脱节时,会产生静默失败。 💬 Key Quotes 语言模型从未见过字母。它看到的是整数。在你的字符串与第一次矩阵乘法之间的某个地方,有一个函数将文本转换为 ID 列表,而那个函数在模型训练的那一天就被冻结了。它不是预处理。它是产物的一部分。 词表就是合并规则的列表,按顺序排列。那个顺序就是整个语言模型。编码就是重放它:将输入拆分为字节,找到合并排名最低的相邻字节对,合并它,重复直到没有任何可合并的。 GPT-2 将 `1234567` 分词为 `123`、`45`、`67`,因为合并排名恰好产生这样的结果。`cl100k_base` 修改了正则表达式,将连续数字限制为三个,这限制了损害但没有修复它。 在 GPT-2 下西班牙语的成本约为英语的 1.7 倍,在最新的编码下仍为 1.2 倍。JSON 在三种分词器下成本均约为 2.3 倍:花括号、引号和键都无法压缩。 模型文件和分词器文件是同一事物的两半,而它们脱节时的失败模式是静默的:模型会针对错误的输入生成流畅的文本。 📊 Article Meta AI Screening: 88 Source: DEV Community: machinelearning Author: Carlos Chinchilla Corbacho Category: 人工智能 Language: 英文 Read Time: 8 min Word Count: 1798 Tags: AI 与智能应用 , AI 工程 , 模型训练与推理 , LLM 推理优化 , 大语言模型 Read Full Article

#AI 与智能应用# AI 工程# 模型训练与推理# LLM 推理优化# 大语言模型

文章评论(3

星观澜44 分钟前

讲解得很细致,新手也能看懂。

回复
青柠微凉41 分钟前

内容翔实,正好需要,先收藏再看。

回复
北岛渔夫2 小时前

作者写得真不错,学到了不少。

回复