什么是 Token?大模型是怎么理解文字的?


目录:

  1. 前文回顾
  2. 背景引入:大模型不识字?
  3. 核心概念一:什么是 Token
  4. 核心概念二:Token ≠ 字,Token ≠ 词
  5. 核心概念三:分词器是怎么工作的
  6. 核心概念四:词向量——数字才是大模型的母语
  7. 核心概念五:Token 的大小和限制
  8. 常见问题解答
  9. 本文小结
  10. 今日思考题

一、前文回顾

在前几篇文章中,咱们多次提到 Token 这个概念:

  • 《大模型是怎么"思考"的》中提到:大模型把文本变成 Token,再变成数字
  • 《大模型是如何训练出来的》中提到:训练数据需要先进行 Tokenization

但是!Token 到底是个啥?

今天咱们就把这个问题彻底讲清楚。


二、背景引入:大模型不识字?

先问大家一个问题:

大模型真的"认识"汉字、英文单词吗?

答案可能让你意外:它不认识!

在大模型的"眼里":

"我爱北京天安门" → [1534, 882, 3698, 7721, 5543]

它看到的只是一串数字编号,根本不知道啥叫"汉字"、啥叫"英文"。

大模型的世界里,只有 Token,没有文字

那 Token 到底是啥?咱们接着往下看。


三、核心概念一:什么是 Token

3.1 Token 的定义

Token 是大模型处理文本的最小单位

你可以把 Token 理解成**文本的"乐高积木"

一篇文章
    ↓
拆成很多小块
    ↓
每一小块就是一个 Token

3.2 Token 和咱们平时说的"词"一样吗?

不一样!

这是很多人的误解,咱们来对比一下:

对比项 咱们理解的"词" Token
定义 有意义的语言单位 模型处理的最小单位
划分 按语义划分 按训练规则划分
例子 "人工智能"是一个词 可能被切成 1-3 个 Token
固定吗 相对固定 不同模型不一样

3.3 举个例子感受一下

咱们来看同一个句子,在不同模型中可能被怎么切分:

句子:"Hello, world!"

GPT-2 的切分:
["Hello"","" world""!"]
(4个Token)

GPT-3 的切分:
["Hello"","" world""!"]
(4个Token)

Claude 的切分:
["Hello"","" world""!"]
(4个Token)

中文模型的切分:
["你好"",""世界""!"]
(4个Token)

看出来了吗?不同模型的切分方式可能不同


四、核心概念二:Token ≠ 字,Token ≠ 词

这个概念非常重要,咱们详细讲讲。

4.1 一个 Token 可能是

情况 示例 说明
一个字 "我"、"好"、"是" 常见单字
一个词 "苹果"、"北京" 常见词
词的一部分 "artificial"、"智能" 长词被拆开
多个字 "天安门"、"人工智能" 常用组合
标点符号 ","、"!"、"\n" 各种符号
空格 " " 英文空格也是 Token

4.2 举个例子:看看 "hamburger" 怎么切

"hamburger"

可能切分成:
["hamburger"]        (1个Token,如果这个词很常见)

也可能切分成:
["ham""burger"]    (2个Token)

还可能切分成:
["h""am""bur""ger"]  (4个Token,少见)

具体怎么切,完全取决于分词器是怎么训练的

4.3 中文的 Token 更有意思

"北京天安门"

可能切分:
["北京""天安门"]      (2个Token)

也可能切分:
["北""京""天安门"]  (3个Token)

还可能切分:
["北京""天""安""门"]  (4个Token)

中文的 Token 划分更复杂,因为没有天然的"空格"分隔


五、核心概念三:分词器是怎么工作的

负责把文本切成 Token 的东西叫 分词器(Tokenizer)

5.1 分词器的工作流程

咱们用一张图来感受一下:

┌─────────────────────────────────────┐
│          分词器工作流程              │
└─────────────────────────────────────┘
              ↓
┌─────────────────┐
│  输入:文本      │
│  "我爱北京"      │
└─────────────────┘
              ↓
┌─────────────────┐
│  第一步:切分    │
│  找到Token边界   │
└─────────────────┘
              ↓
┌─────────────────┐
│  第二步:编码    │
│  转成Token ID   │
└─────────────────┘
              ↓
┌─────────────────┐
│  输出:Token序列 │
│  [1534, 882, 3698] │
└─────────────────┘

5.2 分词器是怎么"学会"切分的?

分词器需要在大量文本上训练

常用的一种方法叫 BPE(Byte Pair Encoding)

训练过程(简化版):

初始状态:每个字符都是一个Token
原文:"hamburger hamburger hang"
Token:["h""a""m""b""u""r""g""e""r", ...]

第一步:统计最常出现的字符对
"ha" 出现最多 → 合并成新Token
Token:["ha""m""b""u""r""g""e""r", ...]

第二步:继续统计
"ham" 出现最多 → 合并
"bur" 出现最多 → 合并
...

最终状态:
["ham""bur""ger"]  (高效的表达)

核心思想:把常见的组合合并成一个 Token,减少 Token 数量

5.3 不同的分词策略

策略 特点 优点 缺点
按字切分 每个字一个 Token 简单、覆盖全 序列太长、效率低
按词切分 每个词一个 Token 序列短、语义好 未知词处理困难
BPE 常见组合合并 平衡、高效 实现复杂
WordPiece 类似 BPE 更灵活 需要更多数据

主流大模型(GPT、BERT、Claude)都用 BPE 或其变种


六、核心概念四:词向量——数字才是大模型的母语

Token 被切分出来后,还要转换成词向量(Embedding)

这是大模型理解文字的关键!

6.1 什么是词向量?

简单来说,词向量就是用一串数字来表示一个 Token

"苹果" 这个 Token
   ↓
转换成词向量
   ↓
[0.23, -0.56, 0.78, 0.12, -0.34, ..., 0.45]
(4096个数字,这就是 GPT-3 的词向量维度)

每个 Token 都对应一个唯一的向量

6.2 为什么要转换成数字?

因为神经网络只能处理数字

文本:"苹果"
↓ 计算机无法直接处理

Token ID:3698
↓ 只是编号,没有语义

词向量:[0.23, -0.56, ...]
↓ 有语义!可以计算!

6.3 词向量怎么来的?

有两种方式:

方式一:训练得到

在训练大模型的同时,词向量也被训练出来了

初始状态:随机分配向量
"苹果" → [随机数字]

训练过程:
"苹果" 和 "香蕉" 经常一起出现 → 它们的向量越来越接近
"苹果" 和 "汽车" 很少一起出现 → 它们的向量差距很大

最终状态:
"苹果" → [有语义的向量]
方式二:预训练词向量

先单独训练词向量,再用到大模型中:

Word2Vec、GloVe、FastText...
(专门训练词向量的方法)

6.4 词向量的神奇之处

词向量最神奇的是:它能捕捉语义关系

咱们来做个计算:

"国王" 的向量 - "男人" 的向量 + "女人" 的向量
    ≈ "女王" 的向量

这不是巧合,而是词向量真正学到了语义

咱们用一张图来感受一下(想象在二维空间):

         国王
           ↑
           |
      男 ──┼── 女
           ↓
         王后

"国王" - "男" + "女" ≈ "女王"

6.5 词向量怎么表示语义?

通过向量之间的距离

距离近 → 语义相似
"苹果" 和 "香蕉" 距离近(都是水果)
"苹果" 和 "汽车" 距离远(没啥关系)

距离远 → 语义不同
"开心" 和 "难过" 距离远(情感相反)

词向量把"意思"变成了"距离"


七、核心概念五:Token 的大小和限制

了解了 Token 是啥,咱们再来说说使用中的实际问题。

7.1 Token 和字符数的换算

一个常见的疑问:

1 个 Token ≈ 多少个字符?

**没有固定答案,但有个经验值**:

语言 1 Token ≈ ?
英文 约 4 个字符
中文 约 1.5-2 个汉字
代码 约 3-4 个字符

举个例子:

英文:"Hello, world!"
→ 4 个 Token,13 个字符
→ 1 Token ≈ 3.25 个字符

中文:"你好,世界!"
→ 4 个 Token(可能),6 个汉字
→ 1 Token ≈ 1.5 个汉字

7.2 上下文窗口限制

大家可能听说过:

GPT-3.5 支持 4096 个 Token GPT-4 支持 8192/32768 个 Token Claude 3 支持 200000 个 Token

这就是 上下文窗口(Context Window)——模型能"记住"的 Token 数量。

超过这个数量会怎样?

你的对话历史 + 当前输入 > 上下文窗口
    ↓
模型会"遗忘"最早的内容
    ↓
只保留最近的 N 个 Token

咱们用一张图来感受一下:

┌────────────────────────────────────┐
│  上下文窗口(假设 8 个 Token)       │
├────────────────────────────────────┤
│ 你好 │ 今天 │ 天气 │ 真 │ 好 │ 啊 │ 是 │ 的 │
└────────────────────────────────────┘
         ↑
      新输入
┌────────────────────────────────────┐
│ 今天 │ 天气 │ 真 │ 好 │ 啊 │ 是 │ 的 │ 呢 │
└────────────────────────────────────┘
                              ↑
                           "你好"被挤掉了

7.3 Token 的成本

很多 AI 服务是按 Token 收费的:

GPT-4 定价(示例):
- 输入:$0.03 / 1K Token
- 输出:$0.06 / 1K Token

一篇文章(约 5000 字):
- 中文:约 3000-4000 Token
- 英文:约 1200-1500 Token

费用计算:
输入 4000 Token → $0.12
输出 1000 Token → $0.06
总计 → $0.18(约 1.3 元人民币)

中文更贵,因为中文需要更多 Token

7.4 实用技巧:如何节省 Token

技巧 说明
压缩提示词 用简洁的表达代替冗长的说明
删除无关内容 对话中及时清理无关信息
用英文 同样的内容,英文 Token 更少
分段处理 超长文本分段后合并结果

八、常见问题解答

Q1:为什么中文比英文费 Token?

因为分词器主要针对英文优化

英文:"I love you" → 3 个 Token
中文:"我爱你" → 可能 3-5 个 Token(取决于分词器)

大部分大模型的训练数据英文占主导,所以分词器对英文更友好。

Q2:可以自定义分词器吗?

可以!

如果你要训练自己的大模型,可以:

  1. 收集你的领域数据
  2. 在这些数据上训练专门的分词器
  3. 用这个分词器训练模型

这样可以在你的领域获得更高效的 Token 划分

Q3:为什么有时候一个词被切得很碎?

可能的原因:

原因 说明
词太生僻 训练数据中少见,没机会合并
拼写错误 分词器不认识
特殊符号 某些符号被单独处理
混合语言 中英混合时可能切得奇怪

Q4:Token 和字节的区别?

Token 字节
逻辑单位 物理单位
模型处理的最小单位 计算机存储的最小单位
数量取决于分词器 数量取决于编码(UTF-8)
1 Token ≈ 4 字节 1 汉字 = 3 字节(UTF-8)

九、本文小结

咱们今天主要讲了以下几点:

1. Token 是什么

  • 大模型处理文本的最小单位
  • 不是字,也不是词,而是模型训练出来的"单位"
  • 可以是字、词、词的一部分、标点等

2. 分词器的工作原理

  • 把文本切成 Token
  • 使用 BPE 等算法在大量文本上训练
  • 不同模型的分词器可能不同

3. 词向量——数字才是大模型的母语

  • 每个 Token 对应一个向量(一串数字)
  • 向量之间的距离表示语义相似度
  • 通过训练获得语义表示

4. Token 的实际应用

  • 上下文窗口限制
  • Token 计费
  • 中文比英文费 Token

5. 关键公式

文本 → 分词 → Token → 词向量 → 神经网络处理

十、今日思考题

今天留一个思考题:

如果你要为医疗领域训练一个专门的大模型,你觉得应该如何设计分词器?

提示:医疗文本有什么特点?应该让哪些词成为一个 Token?

大家先思考思考,欢迎在评论区说说你的想法!

如果这篇文章对你有帮助,欢迎点赞关注,我会持续用大白话讲解复杂的技术概念!

系列文章进度:

  • ✅ 微调
  • ✅ Transformer
  • ✅ 思考原理
  • ✅ 训练流程
  • ✅ Token(本文)

下一期预告: 什么是幻觉?大模型为什么会"一本正经地胡说八道"?

本文由 mdnice 多平台发布

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐