AI 基础 | | 约 6 分钟 | 2,121 字

Token 与 Tokenization 入门

理解 AI 模型如何处理文本,包括分词方法、词表大小对模型的影响

什么是 Token

Token 是 AI 模型处理文本的基本单位。它可以是一个单词、一个子词(subword)、一个字符,甚至是一个标点符号。

原文本: "我在学习 AI"
Token 化后: ["我", "在", "学习", "AI"]

为什么需要 Tokenization

计算机无法直接理解文字,只能处理数字。Tokenization 就是把文字转换为数字(token ID)的过程:

文字 → Token → Token ID → 嵌入向量 → 模型

Tokenization 方法

1. 词级分词 (Word-level)

按空格和标点分割:

"Hello, world!" → ["Hello", ",", "world", "!"]

缺点

  • 词表太大(英语常用词约 10 万+)
  • 未登录词(OOV)问题
  • 无法处理拼写错误

2. 字符级分词 (Character-level)

每个字符作为一个 token:

"hello" → ["h", "e", "l", "l", "o"]

优点

  • 词表很小
  • 没有 OOV 问题

缺点

  • 序列太长
  • 语义理解能力弱

3. 子词分词 (Subword-level) - 主流方法

结合词级和字符级的优点:

"unhappiness" → ["un", "##happ", "##ness"]

常见算法:

BPE (Byte Pair Encoding)

  • 统计相邻字节对出现的频率
  • 逐步合并高频对
  • OpenAI GPT、GPT-2 使用

WordPiece

  • 基于概率选择合并
  • Google BERT 使用

SentencePiece

  • 统一框架
  • 支持 BPE 和 Unigram
  • 端到端训练,不需要预处理

词表大小的影响

词表大小特点
小 (3k-10k)序列短,但 token 语义弱
中 (30k-50k)平衡之选,如 GPT-2
大 (50k-100k+)token 语义丰富,但序列长,如 GPT-4

关键点

  • 上下文窗口限制的是 token 数量,不是词数
  • 相同含义,用更多 token 表示可能更精确

Token 的限制

1. 上下文窗口

模型一次能处理的 token 数量有限:

模型上下文窗口
GPT-3.54K / 16K
GPT-48K / 32K / 128K
Claude200K

2. 费用计算

API 通常按 token 收费:

  • 输入 token + 输出 token = 总消耗
  • 中文 token 化后通常比英文长

3. 注意力复杂度

O(n²) 复杂度是长序列的主要瓶颈。


实战:查看你的文本有多少 Token

# 使用 tiktoken (OpenAI)
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
tokens = enc.encode("我在学习 AI")
print(f"Token 数量: {len(tokens)}")
print(f"Token IDs: {tokens}")
// 使用 tokenizer 库
import { Tokenizer } from "@anthropic/tokenizer";
const tokenizer = new Tokenizer();
const result = tokenizer.encode("我在学习 AI");
console.log(result.tokens.length);

编写提示时的 Token 优化

  1. 简洁表达:同样意思,用更少的词
  2. 避免重复:模板化的废话会浪费 token
  3. 利用上下文:一次性把相关要求说清楚
  4. 中文特殊性:中文 token 化后较长,有时英文反而省 token
# 对比
"请帮我写一个函数,计算斐波那契数列"  # 约 15 tokens
"写一个 fibonacci 函数"  # 约 6 tokens

总结

  • Token 是模型处理文本的基本单位
  • 子词分词是目前的主流方法
  • 理解 token 有助于优化提示和估算成本
  • 上下文窗口限制的是 token 数量而非词数

评论

加载中...

相关文章

分享:

评论

加载中...