李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 左邻右舍
  • 博友圈
  • 关于我
    • 关于我
    • 另一个网站
    • 我的导航站
    • 网站地图
    • 赞助
  • 留言
  • 走心评论
  • 系列文章
  • Now
  • 每日心情
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. AI
  3. 正文

揭秘大模型Token的诞生:从字节到子词的分词逻辑与底层算法

2025年12月9日 约 3,872 字13 分钟 31点热度 0人点赞 0条评论
本文最后更新于 2025年12月9日,距今已 242 天,其中的信息可能已经发生变化,请注意甄别。

在大模型的技术体系中,Token(词元)是连接自然语言与模型理解的核心桥梁——它决定了模型的上下文处理能力、API调用的计费标准,甚至影响着Prompt工程的优化方向。但你是否真正理解:这些Token究竟是如何从一段普通文本中“拆解”出来的?为何模型不直接以我们熟悉的“字”或“词”作为处理单元?本文将从底层原理到实战应用,全方位解析大模型分词的核心逻辑,带你看透Token的诞生全过程。

一、先做个直观体验:Token到底长什么样?

在深入理论前,我们可以先通过工具直观感受Token的切分规律,建立初步认知。
打开OpenAI官方分词工具(platform.openai.com/tokenizer),分别输入以下文本,观察分词结果:

  1. 英文句子:I'm a front-end programmer exploring AI.
    切分结果会呈现“子词”特征,比如front-end可能被拆为front、-、end,programmer大概率是一个完整Token;
  2. 中文句子:八百标兵奔北坡,炮兵并排跑
    中文不会按单个汉字切分,高频组合如标兵、炮兵会被合并为独立Token,低频或生僻组合则保留更小单元;
  3. 混合文本:GPT-4o能处理代码print(1+1)和😊表情
    代码片段、Emoji会被转化为特殊Token,且跨类型文本的分词逻辑保持统一。

通过体验你会发现两个关键特征:

  • Token既不是“单字/字符”,也不是“完整词汇”,而是兼顾语义与效率的子词单元;
  • 不同语言、不同类型的文本,都能被统一的分词逻辑处理,这背后是一套精妙的算法体系。

二、核心追问:为何不用“字”或“词”作为处理单元?

大模型选择子词作为基础单元,本质是在词汇表规模与语义信息保留之间寻求平衡。我们先分析直接使用“字”或“词”的弊端:

1. 以“完整词汇”为单元:词表膨胀与OOV难题

如果模型直接将“完整词汇”作为处理单元,会面临两大致命问题:

  • 词表无限扩张:语言中存在大量变体词汇(如apple→apples→applepie,跑步→跑了步→跑步机),仅英文常用词汇就超10万,中文常用词更是突破百万,庞大的词表会让模型训练的计算量呈指数级增长;
  • 未登录词(OOV)陷阱:当模型遇到训练语料中没有的新词(如网络流行语、专业术语),会因无法识别而“卡壳”,比如早期模型面对ChatGPT这类新词汇时,只能标记为[UNK](未知Token),完全丧失理解能力。

2. 以“单字/字符”为单元:序列过长与语义稀疏

若退而求其次,用“单字/字符”作为处理单元,同样存在无法规避的缺陷:

  • 序列长度爆炸:一个100词的中文句子,若拆为单个汉字,序列长度会增至200-300字符;英文句子拆为字母后,序列长度会膨胀10倍以上,这会让模型的上下文窗口快速耗尽,且计算效率大幅下降;
  • 语义信息碎片化:单个字符的语义承载能力极弱,比如“炮”在“炮兵”和“火炮”中的含义完全不同,仅靠单字无法让模型学习到复杂的语言结构和语义关联。

正是在这样的困境下,子词(Subword)分词法应运而生,而其中最具代表性的就是BPE算法,它也成为了现代大模型分词体系的基石。

三、基础分词算法:BPE的迭代合并逻辑

BPE(Byte Pair Encoding,字节对编码)是一种基于频率统计的迭代式子词生成算法,其核心思想是在语料库中不断合并高频相邻符号对,逐步构建出从基础单元到复杂子词的层级体系。

1. BPE的核心原理

BPE的工作流程可概括为三个步骤,且全程不依赖任何语法规则,仅靠统计数据驱动:

  1. 初始化:将文本拆分为最小的初始符号单元(如汉字、字母),每个单元为独立Token;
  2. 统计频率:扫描整个语料库,统计所有相邻符号对的出现频次;
  3. 迭代合并:将频次最高的相邻符号对合并为新Token,重复此过程直至达到预设的词表大小或合并阈值。

2. 实战演示:用中文绕口令理解BPE的合并过程

我们以绕口令八百标兵奔北坡,北坡炮兵并排跑,炮兵怕把标兵碰,标兵怕碰炮兵炮为例,完整还原BPE的迭代步骤:

步骤1:初始符号拆分

首先将文本拆分为最小单元(此处以汉字为初始符号,仅作原理演示):

['八', '百', '标', '兵', '奔', '北', '坡', ',', '北', '坡', '炮', '兵', '并', '排', '跑', ',', '炮', '兵', '怕', '把', '标', '兵', '碰', ',', '标', '兵', '怕', '碰', '炮', '兵', '炮']

步骤2:第一次合并(高频对“标-兵”)

扫描语料库,统计所有相邻符号对的频次,发现('标', '兵')共出现4次,为当前最高频对,将其合并为新Token标兵:

['八', '百', '标兵', '奔', '北', '坡', ',', '北', '坡', '炮', '兵', '并', '排', '跑', ',', '炮', '兵', '怕', '把', '标兵', '碰', ',', '标兵', '怕', '碰', '炮', '兵', '炮']

步骤3:第二次合并(高频对“炮-兵”)

再次扫描,('炮', '兵')的频次升至3次,成为新的最高频对,合并为Token炮兵:

['八', '百', '标兵', '奔', '北', '坡', ',', '北', '坡', '炮兵', '并', '排', '跑', ',', '炮兵', '怕', '把', '标兵', '碰', ',', '标兵', '怕', '碰', '炮兵', '炮']

步骤4:第三次合并(高频对“北-坡”)

此时('北', '坡')的频次为2次,执行合并得到Token北坡:

['八', '百', '标兵', '奔', '北坡', ',', '北坡', '炮兵', '并', '排', '跑', ',', '炮兵', '怕', '把', '标兵', '碰', ',', '标兵', '怕', '碰', '炮兵', '炮']

步骤5:终止合并

当剩余符号对的频次均低于预设阈值(如2次),或词表达到目标大小,合并过程终止。最终语料中的高频语义单元(标兵、炮兵、北坡)都被转化为独立Token,既压缩了序列长度,又保留了核心语义。

3. BPE的局限性

尽管BPE实现了子词的高效生成,但直接以字符为初始符号仍存在明显短板:

  • 初始词表规模过大:中文常用汉字超3500个,加上英文、符号等,初始词表会轻松突破万级,抵消了子词合并的效率优势;
  • 跨语言兼容困难:不同语言的字符集差异极大(如中文汉字、英文字母、阿拉伯语字符),难以用同一套初始符号体系覆盖所有场景;
  • 仍存OOV风险:对于超出初始字符集的特殊符号(如新型Emoji、生僻字符),模型依然无法识别。

为解决这些问题,工程师将BPE的逻辑下沉到字节层面,催生了现代大模型的标配分词算法——BBPE。

四、大模型的终极方案:BBPE的字节级分词逻辑

BBPE(Byte-Level BPE,字节级BPE)是BPE的升级版本,它将分词的起点从“字符”改为“字节”,彻底解决了跨语言兼容和OOV问题,成为GPT-4、Claude、LLaMA等顶级模型的核心分词方案。

1. 前置知识:Unicode与UTF-8的字节编码逻辑

要理解BBPE,必须先厘清“字符-字节”的转换关系:

  • Unicode:给全球所有字符分配唯一的数字标识(如“八”对应U+516B,“a”对应U+0061,“😊”对应U+1F60A),解决了字符的“身份唯一性”问题;
  • UTF-8:将Unicode标识转化为计算机可存储的字节序列,采用变长编码规则:
    • 英文/数字等ASCII字符:1个字节(如“a”→0x61);
    • 常用汉字:3个字节(如“八”→0xE5 0x85 0xAB);
    • Emoji/特殊符号:4个字节(如“😊”→0xF0 0x9F 0x98 0x8A)。

简单来说,Unicode是字符的“身份证”,UTF-8则是将身份证转化为计算机能读懂的“字节语言”,而BBPE的分词逻辑,就建立在这串“字节语言”之上。

2. BBPE的核心工作流程

BBPE的本质是从字节序列出发,通过迭代合并构建跨语言子词体系,其工作流程可分为三步:

步骤1:文本转字节序列

无论输入是何种语言、何种类型的文本,首先将其转化为UTF-8编码的字节序列。例如:

  • 中文“八”→UTF-8字节序列0xE5 0x85 0xAB;
  • 英文“apple”→字节序列0x61 0x70 0x70 0x6C 0x65;
  • 混合文本“GPT-4o😊”→字节序列0x47 0x50 0x54 0x2D 0x34 0x6F 0xF0 0x9F 0x98 0x8A。

步骤2:字节级BPE迭代合并

BBPE的初始词表仅包含256个基础字节(0x00-0xFF),这是计算机字节的全部可能取值,从根本上实现了初始词表的最小化。随后执行迭代合并:

  1. 统计字节序列中相邻字节对的频次,比如“八”对应的(0xE5, 0x85)字节对高频共现;
  2. 合并该字节对为新单元,再统计新单元与后续字节0xAB的频次,进一步合并为完整的“八”对应的字节组合;
  3. 继续向上合并,比如“八”和“百”的字节组合高频共现,就会合并为Token八百。

步骤3:生成最终Token

经过多轮合并,字节序列会被转化为层级化的子词Token——底层是基础字节,中层是字符/子词,上层是高频词汇。这些Token既保留了语义信息,又实现了跨语言的统一处理。

3. BBPE的核心优势

相较于传统BPE,BBPE的优势体现在三个关键维度:

  • 彻底解决OOV问题:256个基础字节可覆盖所有文本的UTF-8编码,无论遇到多生僻的字符、多新的网络词汇,都能转化为字节序列进行处理,不会出现[UNK]标记;
  • 跨语言/跨类型兼容:中文、英文、代码、Emoji等所有文本的底层都是字节,BBPE用同一套逻辑就能完成分词,实现了模型的“全场景理解”;
  • 词表规模可控:初始词表仅256个字节,通过迭代合并可精准控制最终词表大小(如GPT-4的词表约10万Token),平衡模型的存储与计算成本。

五、扩展认知:主流分词算法对比

除了BPE/BBPE,大模型领域还有两种常见的分词算法,它们各有适用场景:

算法类型 核心原理 优势 局限 典型应用模型
BPE/BBPE 高频字节/字符对迭代合并 词表可控、跨语言兼容、无OOV 对低频词切分过细 GPT系列、LLaMA、Qwen
WordPiece 基于概率的子词拆分(最大化语言模型概率) 语义连贯性强 依赖预训练语料的概率分布 BERT、Gemini
Unigram 基于子词出现概率的集束搜索拆分 支持多粒度子词选择 训练成本高、计算复杂 T5、XLNet

六、实战应用:Token分词的实际价值与操作技巧

1. 用tiktoken库实战分词

OpenAI开源的tiktoken库可直接调用GPT系列模型的分词器,我们用代码演示实际分词过程:

import tiktoken

# 加载gpt-4o的分词器
enc = tiktoken.encoding_for_model("gpt-4o")

# 测试不同文本的分词
texts = [
    "八百标兵奔北坡",
    "I'm a front-end programmer",
    "print(1+1) and 😊"
]

for text in texts:
    tokens = enc.encode(text)
    token_count = len(tokens)
    token_strs = [enc.decode_single_token_bytes(token).decode("utf-8", errors="replace") for token in tokens]
    print(f"文本:{text}")
    print(f"Token数量:{token_count}")
    print(f"Token序列:{token_strs}\n")

运行代码后,你会直观看到不同文本的Token数量和切分结果,这也是Prompt优化中“控制Token长度”的核心依据。

2. Token在实际场景中的应用

  • 上下文窗口管理:模型的上下文窗口(如GPT-4o的128K Token)决定了可处理的文本长度,需通过分词工具预估Prompt和回复的Token数,避免超限;
  • API计费优化:大模型API按Token计费,合理拆分长文本、精简冗余表述,可大幅降低调用成本;
  • Prompt工程技巧:高频子词(如标兵)比零散字符更易被模型理解,因此在Prompt中使用完整语义单元,能提升模型的响应准确性。

七、总结:Token分词的技术本质与意义

大模型的Token分词,本质是从字节到子词的层级化语义提取过程:

  • 它摒弃了“字”或“词”的固有认知,以子词为核心单元,实现了词汇表规模与语义保留的平衡;
  • BPE通过高频合并奠定了子词生成的基础,而BBPE则下沉到字节层面,解决了跨语言兼容和OOV的终极难题;
  • 这些分词算法不仅是模型理解文本的前提,更是大模型实现全场景、多语言能力的底层支撑。

从字节到Token的转化,看似是技术细节,实则是大模型突破语言壁垒、实现通用智能的关键一步。理解了分词逻辑,你才能真正掌握Prompt工程的底层逻辑,让大模型的能力得到更精准的发挥。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/ren-gong-zhi-neng/4625

推荐阅读

  • 从Token到计费:大模型背后的文本编码逻辑与商业本质
  • 提示词工程终极指南:从入门到精通的全维度实战手册
  • LangGraph 深度实战指南:从基础架构到生产级 AI Agent 工作流构建
  • 解锁Claude全能力:从基础对话到效率神器的10大进阶技巧与实战工作流
  • 前端开发者进阶AI Agent开发:全栈知识体系与实战指南
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: ChatGPT LLM Prompt Token 词元
最后更新:2025年12月9日

岁月同一天 8 月 8 日

回望过去的今天,你在写什么

  • 4 年前 2022年8月8日
    减肥四个月~

    今年四月初开始每天跳绳减肥,到了今天刚好四个月了。从一开始的每天跳绳十分钟到半个小时,再从半个小时到一个小时,最后又稳定…

相关文章
  • 提示词工程终极指南:从入门到精通的全维度实战手册2026年1月4日
  • JWT、Cookie、Session、Token 区别与实战选型指南2025年11月14日
  • 企业级自动化 Agent 架构深析:Prompt 演进驱动的智能工作流落地2025年12月1日
  • 从Token到计费:大模型背后的文本编码逻辑与商业本质2025年11月6日
  • 深度解析 RAG 技术:从原理到落地,构建高精度检索增强生成系统2025年11月11日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

还没有评论,快来抢沙发吧~

九年没联系的女友突然问我借钱,我开口道:四十万行么?不够了再说话。”前女友很是高兴地回复说:“够用,还是我男朋友有办法啊,你放心,我日后一定还给你,九年多没见了你现在干啥呢,这么有钱?”我呵呵一笑:“没事,不够用您尽管说话,俺现在改做抵押贷款了。”

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Kratos+ v1.1.14版本更新说明 Spring Boot 指定外部配置文件的方式 Spring Boot 配置加载优先级总结 Claude Fable 5(claude-fable-5)深度详解 如何通过命令查看Java应用内存中对象数量 关于服务的探活端口和业务端口不一致有什么问题
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页这个域名注册整整十年了,十年时间,真快啊WordPress实现用户评论等级排行榜插件WordPress网站换了个字体,差点儿把样式换崩了
MybatisCodeHelperPro激活 解决kubectl exec -it xxxx-service-bfbd45bb9-ktvzj bash -n bit error: exec [POD] [COMMAND] is not supported anymore. Use exec [POD] -- [COMMAND] instead See 'kubectl exec -h' for help and examples Apollo配置中心中的protalDB的作用是什么 k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦 彻底搞懂mysql日志系统binlog,redolog,undolog Spring事件驱动深度指南:从单机异步到亿级流量,比MQ更轻的架构神器
最近评论
Huo 发布于 8 小时前(08月07日) 挺有特色的主题,还是感觉 WP 的确是强大
李锋镝 发布于 21 小时前(08月07日) 没理解你想说啥
aboss 发布于 21 小时前(08月07日) 你的后台web-login?
李锋镝 发布于 22 小时前(08月07日) 这个专门的插件实现的功能更好更全,还能对接支付之类的
李锋镝 发布于 22 小时前(08月07日) 自定义登录地址是为了防止大部分机器人通过WP固定登录页面暴力破解用户账号密码
标签聚合
K8s 日常 Claude docker JVM WordPress Redis AI编程 多线程 SQL 架构 MySQL IDEA JAVA SpringBoot Spring AI 数据库 ElasticSearch 分布式
友情链接
  • Blogs·CN
  • 懋和道人
  • 旧时繁华
  • Honesty
  • 拾趣博客导航
  • 搬砖日记
  • 知向前端
  • 临窗旋墨
  • 皮皮社
  • 瓦匠个人小站
  • 志文工作室
  • 韩小韩博客
  • 风渡言
  • 彬红茶日记
  • 老张博客
  • Mr.Sun的博客
  • 韩情脉脉
  • 哥斯拉
  • 林羽凡

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

域名年龄

Theme Kratos+ By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号