1. 文本 Token 的计算
1.1 什么是文本 Token?
文本 Token 是将原始文本数据分解为模型能够处理的最小单元,这些单元可能是单词、子词或字符。不同的分词器会对文本进行不同的分解,例如:
- 单词级别分割:按空格或标点将句子分解为单词。
- 子词级别分割:将单词进一步分解为子词(如 BPE 编码或 WordPiece)。
- 字符级别分割:直接将每个字符视为一个独立的 Token。
这些 Token 会被分配一个唯一的 ID,模型利用这些 ID 进行计算和推理。
1.2 文本 Token 的计算公式
计算文本 Token 数量的基本公式为:
Token 数 = 分词器输出的 Token 长度 \text{Token 数} = \text{分词器输出的 Token 长度} Token 数=分词器输出的 Token 长度
1.3 示例分析
示例 1:英文文本
输入文本:"Hello, world!"
-
按单词分割:
- 分词器将逗号和感叹号视为标点,与单词分开。
- 输出:
["Hello", ",", "world", "!"]
- Token 数:4
-
按子词分割(如 BPE 编码):
- 分词器可能将单词进一步分解:
- 输出:
["Hel", "lo", ",", "world", "!"]
- Token 数:5
- 输出:
- 分词器可能将单词进一步分解:
-
按字符分割:
- 每个字符作为一个独立的 Token:
- 输出:
["H", "e", "l", "l", "o", ",", " ", "w", "o", "r", "l", "d", "!"]
- Token 数:13
- 输出:
- 每个字符作为一个独立的 Token:
示例 2:中文文本
输入文本:"你好,世界!"
-
按字符分割:
- 每个字符独立为 Token:
- 输出:
["你", "好", ",", "世", "界", "!"]
- Token 数:6
- 输出:
- 每个字符独立为 Token:
-
按短语分割:
- 分词器可能结合上下文将字符合并:
- 输出:
["你好", ",", "世界", "!"]
- Token 数:4
- 输出:
- 分词器可能结合上下文将字符合并:
1.4 影响 Token 数的因素
- 语言特性:
- 英文以空格分词,单词较长,Token 数较少。
- 中文以字符或短语为单位,Token 数可能更多。
- 分词器规则:
- 不同的分词器(如 WordPiece 和 BPE)对同一句话的分割方式可能不同。
- 文本格式:
- 特殊字符(如标点、缩写)会增加 Token 数。
1.5 优化策略
- 减少不必要的 Token:
- 预处理文本,去除多余的标点和空格。
- 选用高效的分词器:
- 针对语言特性(如中文),选择适配的分词方法(如字级或短语级分词)。
- 优化文本结构:
- 使用一致的缩写和语法,避免过多重复的 Token。
2. 音频 Token 的计算
2.1 什么是音频 Token?
音频数据是一种连续信号,为了让模型能够处理,需要将音频转化为离散 Token。这通常通过以下步骤完成:
- 预处理:对音频信号进行采样,将其转换为固定长度的数字信号。
- 分帧:将音频切分为固定时间长度的帧。
- 特征提取:从每帧中提取特征向量(如 Mel 频谱)。
- 量化:将特征向量映射为离散的 Token。
2.2 音频 Token 的计算公式
Token 数 = ⌈ 音频时长 (秒) 帧步长 (秒) ⌉ ⋅ 每帧 Token 数 \text{Token 数} = \left\lceil \frac{\text{音频时长 (秒)}}{\text{帧步长 (秒)}} \right\rceil \cdot \text{每帧 Token 数} Token 数=⌈帧步长 (秒)音频时长 (秒)⌉⋅每帧 Token 数
2.3 示例分析
示例 1:短音频
音频时长:1 秒
帧步长:0.01 秒
每帧生成 Token:10 个
Token 数 = 1 0.01 ⋅ 10 = 100 \text{Token 数} = \frac{1}{0.01} \cdot 10 = 100 Token 数=0.011⋅10=100
示例 2:长音频
音频时长:5 秒
帧步长:0.025 秒
每帧生成 Token:20 个
Token 数 = 5 0.025 ⋅ 20 = 4000 \text{Token 数} = \frac{5}{0.025} \cdot 20 = 4000 Token 数=0.0255⋅20=4000
2.4 影响 Token 数的因素
- 采样率:
- 高采样率会生成更多帧,导致 Token 数增加。
- 帧步长:
- 帧步长越小,帧数越多,Token 数越多。
- 特征维度:
- 每帧提取的特征越多,生成的 Token 也越多。
2.5 优化策略
- 调整帧步长:
- 增大帧步长以减少帧数,同时保证语音信息不丢失。
- 简化特征提取:
- 使用低维特征代替高维特征。
- 分段处理长音频:
- 将长音频划分为多个短片段,逐段处理,减少计算复杂度。
3. 视频 Token 的计算
3.1 什么是视频 Token?
视频由连续帧组成,每帧可以看作一张图片,视频 Token 通常通过以下方式生成:
- 帧提取:根据固定帧率,从视频中提取帧。
- 特征提取:从每帧中提取视觉特征。
- 量化:将视觉特征量化为 Token。
3.2 视频 Token 的计算公式
Token 数 = 视频时长 (秒) ⋅ 帧率 (fps) ⋅ 每帧 Token 数 \text{Token 数} = \text{视频时长 (秒)} \cdot \text{帧率 (fps)} \cdot \text{每帧 Token 数} Token 数=视频时长 (秒)⋅帧率 (fps)⋅每帧 Token 数
3.3 示例分析
示例 1:标准视频
视频时长:10 秒
帧率:30 fps
每帧生成 Token:100 个
Token 数 = 10 ⋅ 30 ⋅ 100 = 30 , 000 \text{Token 数} = 10 \cdot 30 \cdot 100 = 30,000 Token 数=10⋅30⋅100=30,000
示例 2:低帧率视频
视频时长:10 秒
帧率:15 fps
每帧生成 Token:50 个
Token 数 = 10 ⋅ 15 ⋅ 50 = 7500 \text{Token 数} = 10 \cdot 15 \cdot 50 = 7500 Token 数=10⋅15⋅50=7500
3.4 影响 Token 数的因素
- 帧率:
- 帧率越高,帧数越多,Token 数越多。
- 分辨率:
- 高分辨率帧会生成更多特征,增加 Token 数。
- 特征量化方法:
- 不同的量化方法会生成不同数量的 Token。
3.5 优化策略
- 降低帧率:
- 减少帧数以降低计算复杂度。
- 使用关键帧:
- 提取视频中的关键帧,而不是处理每一帧。
- 简化特征表示:
- 使用低维特征减少每帧的 Token 数。
4. 图片 Token 的计算
4.1 什么是图片 Token?
图片 Token 是通过将图像划分为小块(patch),并对每个小块提取特征后生成的。这种方法被广泛应用于视觉 Transformer 模型(如 ViT)。
4.2 图片 Token 的计算公式
Token 数 = 图像宽度 块大小 ⋅ 图像高度 块大小 \text{Token 数} = \frac{\text{图像宽度}}{\text{块大小}} \cdot \frac{\text{图像高度}}{\text{块大小}} Token 数=块大小图像宽度⋅块大小图像高度
4.3 示例分析
示例 1:标准图片
图像分辨率:(256 \times 256)
块大小:(16 \times 16)
Token 数 = 256 16 ⋅ 256 16 = 16 ⋅ 16 = 256 \text{Token 数} = \frac{256}{16} \cdot \frac{256}{16} = 16 \cdot 16 = 256 Token 数=16256⋅16256=16⋅16=256
示例 2:高分辨率图片
图像分辨率:(512 \times 512)
块大小:(32 \times 32)
Token 数 = 512 32 ⋅ 512 32 = 16 ⋅ 16 = 256 \text{Token 数} = \frac{512}{32} \cdot \frac{512}{32} = 16 \cdot 16 = 256 Token 数=32512⋅32512=16⋅16=256
4.4 影响 Token 数的因素
- 分辨率:
- 高分辨率图像会生成更多小块,增加 Token 数。
- 块大小:
- 块越小,生成的 Token 越多。
- 特征维度:
- 每个块生成的特征越多,Token 数也会增加。
4.5 优化策略
- 降低分辨率:
- 对图片进行下采样以减少 Token 数。
- 调整块大小:
- 增大块大小以减少分块数量。
- 压缩特征:
- 对每个块生成的特征进行降维处理。
5. 总结
5.1 各数据类型 Token 公式对比
数据类型 | Token 数公式 |
---|---|
文本 | Token 数 = 分词器输出的 Token 长度 \text{Token 数} = \text{分词器输出的 Token 长度} Token 数=分词器输出的 Token 长度 |
音频 | Token 数 = ⌈ 音频时长 (秒) 帧步长 (秒) ⌉ ⋅ 每帧 Token 数 \text{Token 数} = \lceil \frac{\text{音频时长 (秒)}}{\text{帧步长 (秒)}} \rceil \cdot \text{每帧 Token 数} Token 数=⌈帧步长 (秒)音频时长 (秒)⌉⋅每帧 Token 数 |
视频 | Token 数 = 视频时长 (秒) ⋅ 帧率 (fps) ⋅ 每帧 Token 数 \text{Token 数} = \text{视频时长 (秒)} \cdot \text{帧率 (fps)} \cdot \text{每帧 Token 数} Token 数=视频时长 (秒)⋅帧率 (fps)⋅每帧 Token 数 |
图片 | Token 数 = 图像宽度 块大小 ⋅ 图像高度 块大小 \text{Token 数} = \frac{\text{图像宽度}}{\text{块大小}} \cdot \frac{\text{图像高度}}{\text{块大小}} Token 数=块大小图像宽度⋅块大小图像高度 |
5.2 优化方法汇总
- 文本:选择合适的分词器,减少不必要的 Token。
- 音频:优化帧步长,简化特征提取。
- 视频:降低帧率或只提取关键帧。
- 图片:调整分辨率和块大小。
通过合理优化 Token 数,可以有效降低计算复杂度,提升模型性能。希望本文对您理解和计算 Token 数有所帮助!