4. Token(词元),5分钟彻底搞懂

0 阅读1分钟

Token(词元)是 AI 处理信息的最小单位。它既不是字,也不是词,而是由模型自行切分出来的 “文字碎片”。通常来说,1 个 Token 约等于 4 个字母,或 1~2 个汉字。

如果你习惯看视频,就看《4. Token(词元),看会动画敲下代码,就彻底搞懂了》,喜欢看文章就接着往下看。

 Token的优化过程如下

 大模型单次调用的总消耗 Token 由两部分组成:总消耗 Token = 输入 Token + 输出 Token。其中,输入 Token 的构成更为细致,包括当前用户提问 Token、系统提示词 Token、历史对话上下文 Token,以及消息格式开销 Token。

需要注意的是,Token 的实际切分由各模型厂商自研的 Tokenizer(分词器)独立完成,因此相同文本在不同模型上会产生不同的 Token 数量与序列。以上提及的换算比例等数据,均为行业通用估算参考。

下面通过代码实战,带你彻底搞懂。首先打开命令行窗口,使用 pip 命令安装 transformers和PyTorch 开发库。

pip install transformers torch

安装完成后,我们便可以借助 transformers 库加载主流的分词器,直观地观察文本到 Token 的切分过程。以下是具体代码示例:

# 首先从 transformers 库中导入 AutoTokenizer 类,它能自动适配不同大模型的分词规则
from transformers import AutoTokenizer
 
# 接着从预训练权重加载 Qwen2 模型的分词器
# 注意: "Qwen2_tokenizer"是下载到本地自命名的分词器 ,下载地址见文章最后链接
tokenizer = AutoTokenizer.from_pretrained("Qwen2_tokenizer")
 
# 定义待处理的输入文本
text = "你好,我是cool。"
 
# ---------------------------------------------------------
# 第1步:分词 (Tokenization)
# ---------------------------------------------------------
# 使用 BPE算法将文本切分为“子词单元”
# 规则是:常见词为1个Token,复杂词会拆开,标点也算Token。
bpe_codes = tokenizer.tokenize(text)
# 先打印出来看一下结果
print(bpe_codes)
 
# 为了让分词结果可读,需要做一下处理
decoded_result = []
for bpe_code in bpe_codes:
    # 先将子词转换为模型词汇表中的ID
    id = tokenizer.convert_tokens_to_ids(bpe_code)
# 再将单个ID解码回文本并将结果存起来
decoded = tokenizer.decode([id])
    decoded_result.append(decoded)
 
# 输出最终的分词列表
print("分词结果:", decoded_result)
 
# ---------------------------------------------------------
# 第2步:向量化 (Numericalization)
# ---------------------------------------------------------
# 将字符串形式的 Token 列表转换为模型能处理的整数 ID 列表
# 这是大模型的“输入语言”(模型只认识数字,不认识文字)
token_ids = tokenizer.convert_tokens_to_ids(bpe_codes)
print("向量ID:", token_ids)
 
# ---------------------------------------------------------
# 第3步:统计 Token 数量
# ---------------------------------------------------------
# 计算 Token 总数
count = len(token_ids)
print("Token总数:", count)
 
# 将 ID 列表完整解码回原始文本
print("解码结果:", tokenizer.decode(token_ids))

Qwen2_tokenizer分词器下载:分词器