趋近智
正如我们所知,困惑度是评估语言模型的基础固有指标,量化 (quantization)模型预测给定文本序列的优劣。它直接源于模型对该序列中词元 (token)分配的概率。然而,一个常被忽视的重要事项是,计算出的困惑度对所用的特定分词 (tokenization)方案高度敏感。回顾困惑度公式:
困惑度是评估语言模型的一种基本内在指标,它量化了模型预测给定文本序列的能力。它直接来源于模型赋予该序列中令牌的概率。一个经常被忽视的事实是,计算出的困惑度对所使用的特定分词方案高度敏感。困惑度公式如下:
这里, 表示序列中的第 个词元, 是词元总数。这表示单个概率 和序列长度 都直接取决于原始文本如何被分割成词元。
考虑一个简单句子:“分词影响困惑度。”
来看看不同分词器 (tokenizer)如何处理此句:
["Tokenization", "impacts", "perplexity", "."] -> 个词元。模型会预测在给定“Tokenization”的情况下“impacts”的概率,然后在给定前两个词的情况下“perplexity”的概率,依此类推。['T', 'o', 'k', 'e', 'n', 'i', 'z', 'a', 't', 'i', 'o', 'n', ' ', 'i', 'm', 'p', 'a', 'c', 't', 's', ' ', 'p', 'e', 'r', 'p', 'l', 'e', 'x', 'i', 't', 'y', '.'] -> 个词元。模型会预测在给定“T”的情况下“o”,在给定“To”的情况下“k”等。预测任务非常不同。["Token", "ization", "Ġimpacts", "Ġperplex", "ity", "."] -> 个词元(假设是 GPT-2 风格的分词器,其中 Ġ 表示空格)。在这里,模型会预测在给定“Token”的情况下“ization”,在给定“Tokenization”的情况下“Ġimpacts”,依此类推。此示例显示了两个主要影响:
让我们用一个简短的 PyTorch 示例,使用 transformers 库来说明词元差异:
import torch
from transformers import AutoTokenizer
# 加载两个不同的分词器
tokenizer_bert = AutoTokenizer.from_pretrained('bert-base-uncased')
tokenizer_gpt2 = AutoTokenizer.from_pretrained('gpt2')
text = "Tokenization impacts perplexity."
# 使用 BERT 分词器 (WordPiece) 进行分词
tokens_bert = tokenizer_bert.tokenize(text)
ids_bert = tokenizer_bert.encode(text)
print(f"BERT Tokens ({len(tokens_bert)}): {tokens_bert}")
# 输出: BERT 词元 (6): ['token', '##ization', 'impacts', 'per',
# '##plex', '##ity', '.']
print(f"BERT IDs ({len(ids_bert)}): {ids_bert}")
# 输出: BERT ID (9): [101, 19204, 17260, 7296, 2361, 18049, 4234,
# 1012, 102]
# 注意:包含 [CLS] 和 [SEP] 词元
# 使用 GPT-2 分词器 (BPE) 进行分词
tokens_gpt2 = tokenizer_gpt2.tokenize(text)
ids_gpt2 = tokenizer_gpt2.encode(text)
print(f"GPT-2 Tokens ({len(tokens_gpt2)}): {tokens_gpt2}")
# 输出: GPT-2 词元 (6): ['Token', 'ization', 'Ġimpacts', 'Ġperplex',
# 'ity', '.']
print(f"GPT-2 IDs ({len(ids_gpt2)}): {ids_gpt2}")
# 输出: GPT-2 ID (6): [11934, 10004, 33333, 21119, 2138, 13]
# 注意:GPT-2 分词器默认不在此处添加特殊词元,
# 长度与词元匹配
请注意,即使在两个子词分词器(BERT 的 WordPiece 和 GPT-2 的 BPE)之间,分段也不同('token', '##ization' 与 'Token', 'ization'),并且 BERT 的 encode 方法默认包含 [CLS] 和 [SEP] 等特殊词元,这会影响标准困惑度计算中使用的序列长度 ()。
直接结果是,只有当模型在评估数据集上使用完全相同的分词器和词汇表时,它们的困惑度得分才可以直接比较。 比较一个使用 50,000 次合并的 BPE 模型与一个使用 30,000 词汇表的 WordPiece 模型的困惑度,就像比较苹果和橘子。底层的预测单元不同。
上图说明了对于相同的底层文本,困惑度得分仅因所选分词器不同就可能发生显著变化。较低的值表明模型认为每个词元的预测任务更容易,但这并不能直接比较不同分词方案下模型质量。
此外,在分词之前应用的预处理步骤,例如转换为小写或 Unicode 规范化,也会对此产生影响。如果一项评估将文本转换为小写而另一项没有,则区分大小写的词元分析器会生成不同的词元,导致困惑度得分无法比较。
在报告或解释困惑度时,请务必清楚了解使用了哪种分词器,包括其词汇表大小和任何相关的预处理步骤。没有这些背景信息,一个原始的困惑度数值对于比较在不同分词机制下评估的其他模型的相对能力提供的信息有限。最可靠的比较是在使用相同评估设置(包括分词器)评估不同模型或检查点时进行的。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•