简介:Token是大模型处理文本的最小单元,也是连接人类语言与数学运算的桥梁。本文系统讲解Token的定义、分词器编码与解码的完整流程、Token与Token ID的对应关系,并辨析Token与字符、向量等易混概念,帮助开发者理解上下文长度、调用成本等实际问题的底层逻辑。
在大模型的语境下,Token(词元)是文本被切分后形成的最小处理单元。当用户向大模型输入一段话时,模型并不会直接“阅读”文字本身,而是先由一个名为Tokenizer(分词器)的组件把文字切分成一个个碎片,每个碎片就是一个Token;随后每个Token会被映射为一个唯一对应的数字编号,即Token ID。可以说,Token是文字进入大模型世界的“原子”,模型的一切理解与生成,都建立在这些原子之上。
可以从三个视角进一步理解这一定义:
理解Token的必要性,要从大模型的运行原理说起。大模型虽然表现为“会聊天”,但其底层是一个由海量参数构成的数学函数,运算过程全部是矩阵乘法与非线性变换。矩阵运算只能处理数字,无法处理“人”“喜欢”“人工智能”这样的文字符号。
这就产生了一个根本性的鸿沟:人类用文字交流,模型用数字计算。在人类与大模型之间,必须站着一个“翻译官”,把文字翻译成数字送进模型,再把模型输出的数字翻译回文字。这位翻译官就是Tokenizer,它负责两个方向的工作:
如果没有这一机制,用户输入的字符串对模型而言只是无意义的符号序列,模型既无法计算,也无法回应。
Tokenizer的工作围绕两个核心对象展开:
两者的关系是一对一映射:Token是文字,Token ID是数字,它们就像一枚硬币的正反面,所表达的内容完全相同,只是表现形式不同。所有Token与ID的对应关系,记录在一张预先构建好的词表(Vocabulary)中。业界主流大模型的词表规模通常在数万到十几万个条目之间,词表越大,可表达的碎片种类越多,但嵌入层参数也随之增长,因此词表大小是训练前需要权衡的设计决策。
需要强调的是,“最小单位”是相对模型而言的,并非语言学意义上的最小单位。一个Token可能是一个完整的常用词,也可能是一个词的片段、一个汉字、一个标点,甚至一个特殊控制符号。
下面以用户提问“马克喜欢人工智能吗?”为例,完整走一遍大模型的输入输出流程。
第一步,切分。 Tokenizer把用户问题切成最小单位,得到若干Token。切分粒度由分词算法和词表共同决定:常见的高频词往往整体保留,低频词则被拆成更小的子单元。
第二步,映射。 模型只认数字,Tokenizer逐一查询词表,把每个Token转换为对应的Token ID,得到一串ID列表,随后把这串数字传给模型。示意如下:
用户输入: "马克喜欢人工智能吗?"│ 切分▼Tokens: ["马克", "喜欢", "人工智能", "吗", "?"]│ 查词表映射▼Token IDs: [1203, 3421, 8765, 99, 17] (ID仅为示意)│▼传入模型
用伪代码表达即:
# 编码过程(示意)text = "马克喜欢人工智能吗?"tokens = tokenize(text) # 第一步:切分ids = [vocab[token] for token in tokens] # 第二步:映射model_input = ids # 传给模型的是数字列表
模型接收到ID列表后,在内部进行一通矩阵运算,本质上是基于上文预测“下一个Token”的概率分布,并从中确定一个结果,最终吐出一个Token ID。注意,模型一次只输出一个ID。
Tokenizer再次登场,把这个Token ID翻译回Token,这就是解码环节。解码只有映射一步,方向与编码相反:从数字到文字。它不需要切分,因为模型每次只给出一个Token,没有什么可切分的。解码完成后,我们就拿到了模型输出的第一个Token,例如“喜欢”。
如果模型没有说完,系统会把已生成的Token拼接到上下文中,再次送入模型,预测下一个Token ID,再解码、再拼接,如此循环,直到模型输出表示结束的特殊Token。这正是大模型“逐字蹦出”、前端能做出流式打字机效果的底层原因,所谓流式输出,本质上就是解码环节在不断重复。
Token如何切,直接决定了模型的效率与能力边界。业界经历过三类策略的演进:
业界通用的子词算法以字节对编码(BPE)及其多种变体为代表,其思想是从字符出发,迭代合并高频相邻单元,最终形成词表。许多现代分词器还支持“字节回退”机制:遇到生僻符号或表情符号时,退回到字节层面表示,保证任何输入都能被编码,不会出现“无法表示”的死角。
回到最初的问题:Token到底是什么?它是文本经过分词器切分后形成的最小处理单元,通过词表与数字一一对应,是文字进入大模型、大模型输出文字的唯一通道。所谓大模型背后的“文字压缩术”,其实是“切分+映射”两步构成的数字化机制:编码时先切分再映射,解码时仅映射不切分,模型本身只做数字运算。理解Token,就同时理解了大模型的输入输出边界、上下文容量的计量方式与调用成本的构成逻辑,这是每一位大模型应用开发者绕不开的第一课。