理解 LLM 中的分词

SleepCloud

 

0 说明

本文是模式识别的一次小作业,凑合着看吧。

任务:尝试 https://tiktokenizer.vercel.app/https://aistudio.google.com/ 等网站,观察和分析目前大语言模型中的tokenizer、tokens计算方式

提示:分析多语言差异(语言、语种)、代码与格式、数字与符号、极端情况与Emoji。例如输入一段相同含义的英文和中文,观察两者的 Token 数量差异;输入一段包含大量空格、缩进的 Python 代码,对比压缩空格前后的 Token 数量;输入长串数字(如手机号、圆周率)、带有连字符的单词或邮箱地址,观察它们是如何被切分的;测试生僻字、网络流行语或者一长串 Emoji 表情,看看 Token 是如何分配的。文本格式之外的文件呢?例如图片和pdf文件(Qwen-VL系列、InternVL系列、MiMo-VL、DeepSeek-VL等)?

 

1 多语言

1.1 例子

下例由代码生成,见 Understanding Tokenization in LLMs




世界
然后开始世界主人
的大
出了自己
子的数量

或者

,从出生
但是世界如果创造必须
————世界」。



全部全部
开始天地创造
为了我们——的人现在

…………

:若使用 .md 或 .html 打开,鼠标悬浮在字符上会显示对应的 token(一个字符可能会对应多个 tokens,例如 “鸽”)。

 

1.2 统计

使用示例见 code/data/lang/<sub_type>/001.json

(1)英文 其他语言

results

使用《Attention is All You Need》摘要。

(2)中文 其他语言

results

使用原神《日月前事》节选。

(3)文言文 其他语言

results

使用《桃花源记》。

 

1.3 分析

(1)整体规律

(2)中英对比

(3)文言文

char/token≈1.0,几乎完全一一对应

(4)跨预料一致性

(5)token 级可视化观察

 

1.4 总表

语言char/token(典型)分词粒度特征结构特点压缩效率主要原因
英文≈ 4–5子词级(subword)明确空格分词高频词与词缀可合并(BPE有效)
简体中文≈ 1.0–1.5字级 / 近字级无显式词边界分词退化为单字,合并空间有限
繁体中文≈ 1.0–1.3字级 / 更细粒度字形更分散更低语料频率更分散,合并更困难
文言文≈ 1.0几乎完全字级高度压缩语义表达极低短词+低频组合,几乎不可合并
日文≈ 1.1–1.4混合(汉字+假名)部分有词边界信息假名提供一定结构,但仍接近字级
韩文≈ 1.5–1.8音节块级(syllable)黏着语,形态变化明显中低词形变化导致子词难稳定复用
意大利语≈ 3–4子词级屈折语中高词形变化存在,但词干稳定
芬兰语≈ 3子词级强黏着语长词+复杂形态,拆分较多
阿拉伯语≈ 2.8–3.2子词级词根-词形结构词形变化复杂但存在模式性

 

1.5 结论

(1)tokenization 的本质与影响

(2)启示

2 其他文本内容

2.1 代码与格式

2.1.1 分词示例

(1)标准格式

chars = 31, tokens = 11, chars/tokens = 2.82

def add(a, b):
return a + b


(2)压缩格式

chars = 23, tokens = 8, chars/tokens = 2.88

def add(a,b):return a+b


(3)过度空格

chars = 50, tokens = 19, chars/tokens = 2.63

def add( a, b ):
return a + b

注:原始内容为

使用 HTML 标签进行渲染,多余的空格会自动略去。仅适合看颜色区分不同 tokens,不适合看长度。


(4)单行多语句

chars = 13, tokens = 9, chars/tokens = 1.44

a=1;b=2;c=a+b

 

2.1.2 汇总图表

results

variant_idlanguagechar_counttoken_countchar_per_tokentoken_per_char
标准格式python31112.818180.354839
压缩格式python2382.8750.347826
过度空格python50192.631580.38
单行多语句python1391.444440.692308

 

2.1.3 讨论分析

(1)代码与格式对 tokenization 的影响

(2)结构化表达与线性表达的差异

(3)token级行为特征

(4)效率与可读性的权衡

启示

 

2.2 数字与符号

2.2.1 分词示例

(1)URL

chars = 32, tokens = 9, chars/tokens = 3.56

https://example.com/path?query=1


(2)电话号码

chars = 13, tokens = 8, chars/tokens = 1.62

+65-9123-4567


(3)连字符单词

chars = 16, tokens = 4, chars/tokens = 4.00

state-of-the-art


(4)邮箱

chars = 24, tokens = 6, chars/tokens = 4.00

test.email-123@gmail.com


(5)圆周率

chars = 24, tokens = 10, chars/tokens = 2.40

3.1415926535897932384626


(6)长整数

chars = 20, tokens = 7, chars/tokens = 2.86

12345678901234567890

 

2.2.2 汇总图表

results

variant_idchar_counttoken_countchar_per_tokentoken_per_char
长整数2072.857140.35
圆周率24102.40.416667
电话号码1381.6250.615385
邮箱24640.25
URL3293.555560.28125
连字符单词16440.25

 

2.2.3 讨论分析

(1)数字与符号的分词特征

(2)结构化字符串的局部可压缩性

(3)非结构化数字序列的低效率

(4)符号对分词的影响

(5)token级行为特征

(6)效率与表达形式的关系

启示

 

2.3 极端情况

2.3.1 分词示例

(1)Base64

chars = 16, tokens = 11, chars/tokens = 1.45

SGVsbG8gd29ybGQ=


(2)生僻字

chars = 4, tokens = 8, chars/tokens = 0.50


(3)随机字符串

chars = 12, tokens = 10, chars/tokens = 1.20

x9Q#@!asD12z


(4)重复字符

chars = 20, tokens = 3, chars/tokens = 6.67

aaaaaaaaaaaaaaaaaaaa

 

2.3.2 汇总图表

image-20260419165536168

variant_idlanguagechar_counttoken_countchar_per_tokentoken_per_char
生僻字zh480.52
重复字符text2036.666670.15
随机字符串text12101.20.833333
Base64text16111.454550.6875

 

2.3.3 讨论分析

(1)极端输入的分词退化行为

(2)低频字符的异常开销

(3)高重复模式的压缩效应

(4)核心结论

tokenizer 本质是基于频率的统计压缩器

启示

 

2.4 表情包

2.4.1 分词示例

(1)单个表情

chars = 1, tokens = 1, chars/tokens = 1.00

😀

(2)连续表情

chars = 10, tokens = 15, chars/tokens = 0.67

😀😃😄😁😆😅😂🤣🥲😊

(3)文本 + 表情

chars = 15, tokens = 4, chars/tokens = 3.75

hello 😀 world 😂

(4)重复表情

chars = 7, tokens = 7, chars/tokens = 1.00

😂😂😂😂😂😂😂

 

2.4.2 讨论分析

(1)Emoji 的分词不稳定性

(2)上下文与模式影响显著

(3)编码层面的差异

例子

而 2.4.1(3)中可见不会额外增加 tokens。

3 其他模态

3.1 图片

3.1.1 示例

使用 Google AI Studio,其算法未开源,仅能尝试+观察。

使用同一张图的不同缩放倍率:

1

由此可以认为图像分辨率不会影响 Google AI Studio 的输入 tokens。因此使用这类工具时,可以借鉴 LLaVA 1.5 的思路,大的图像可以裁剪后分别输入以提供局部信息,再整体缩放后输入以提供全局信息

 

3.1.2 原理

图像 → 视觉编码器(ViT 等) → 视觉特征 → 适配器(projector / connector) → 映射至语言嵌入空间 → 与文本 token 一同输入 LLM。

有一些变体,下图是 LLaVA1.5 的方案。

image-20260419204958633

 

 

3.1.3 代表模型的视觉接入
模型时间视觉接入方式高分辨率/多图策略这一代的代表意义
LLaVA-1.52023CLIP 类视觉编码器 + MLP projector + LLM以固定分辨率为主奠定“视觉编码器 + projector + LLM”的开源主路线
LLaVA-NeXT / OneVision2024延续 LLaVA 框架统一单图、多图、视频;强调跨场景迁移从“单图理解”走向统一视觉场景建模 (arXiv)
Qwen2-VL2024视觉编码器 + 连接器 + LLMNaive Dynamic Resolution;M-RoPE;支持任意分辨率动态分辨率成为主流公开方案之一 (arXiv)
Qwen2.5-VL2025延续 Qwen2-VL 路线更强定位、文档解析、长视频动态分辨率路线继续强化到“定位/文档/视频”任务 (arXiv)
InternVL 2.52024视觉编码器 + 语言模型 + 视觉压缩/缩放设计高分辨率处理、测试时缩放、视觉/语言共同扩展代表“高分辨率 + 开源高性能”路线 (arXiv)
DeepSeek-VL22024视觉编码器 + VL adaptor + MoE LLMdynamic tiling 处理高分辨率;语言侧引入 MoE代表“视觉动态切分 + 语言侧 MoE”路线 (arXiv)
Molmo2024视觉编码器 + connector + LLM侧重开放数据与可复现训练代表“开放数据、开放训练配方”的研究路线 (arXiv)
MiMo-VL2025ViT + projector + LLM使用 Qwen2.5-ViT,支持 native resolution 输入代表“在成熟动态分辨率视觉骨干上强化推理与 GUI/grounding”路线 (arXiv)
Llama 3.2 Vision2024Meta 的开源视觉 LLM 路线官方强调视觉识别、推理与边缘部署代表主流大模型厂商把视觉能力纳入通用 LLM 家族 (Meta AI)
Gemini(AI Studio 可观察对象)2025–2026细节未公开官方公开 media_resolution,可直接控制视觉 token 预算代表闭源商用模型把“视觉 token 预算”做成显式接口 (Google AI for Developers)

 

3.2 PDF

3.2.1 示例

以《日月前事》为例

  1. 存在 .md 里导出 PDF:1121 tokens。

  2. 直接发送文本:768 tokens。

如果 PDF 里除了文本,还存在图片,一般会对图片使用视觉模型得到 tokens。

做 RAG 也是如此(主流方案是嵌入 + 重排 + 视觉,其中重排和视觉可选)。

 

3.2.2 原理

PDF

Layout Analysis

Text

Table

Formula

Image

Code

Text Tokens

Structured Tokens / Visual Tokens

LaTeX Tokens / Visual Tokens

Visual Tokens

Code Tokens / Visual Tokens

LLM

 

3.3 其他模态

统一视角(跨模态)

(1)视频

(2)音频

(3)其他模态

模态原始结构token 数主要由什么决定
文本离散符号语言结构
图像空间二维分辨率
视频空间 + 时间分辨率 × 帧数
音频时间连续采样率 / 压缩方式
PDF混合结构解析路径

 

A 附录

A.1 代码说明

见附件 code 文件夹。

功能概览

功能说明
多语言统计遍历 data/ 下所有样例,计算字符数、token 数及比率
格式化导出JSON / CSV(utf-8-sig)/ Markdown 表格
学术图表分组柱状图 + 双纵轴折线,按 token 数升序排列
词元着色 MD每个变体独立 .md,HTML <span> 对每个可解码片段着色,鼠标悬停显示 token ID
任意层级目录data/ 支持单层(code/001.json)与多层(lang/en_main/001.json)混用
子任务过滤--subpath lang/en_main 只处理指定路径,输出自动镜像

项目结构

代码量

 

A.2 日月前事的分词




世界
然后开始世界主人
的大
出了自己
子的数量

或者

,从出生
但是世界如果创造必须
————世界」。



全部全部
开始天地创造
为了我们——的人现在

…………


,大
制造出了
一起制造出了最后出了
我们的不可
,我们



规划
幸福,它便


第一次
第一次
第一次


如果
如果,那
如果,那么声音回应
唯一禁止,就是。但是已经

…………


上的第二仿大战
一天
我们他们土地
年代开始

这里
我们的发生
使用,它
,所以不是
其他不能

太阳
,有的人生活
太阳,对生活太阳
无法理解,于
于是开始,以这个太阳甚至开始生活
,有,通过自己大的

统计数据:chars = 1007, tokens = 867, chars/tokens = 1.16。