目录
- 困惑度 Perplexity
- 如何计算?
- BLEU分数
- 步骤 1:计算 n-gram 精度。
- 第 2 步:简洁惩罚(BP)
- ROUGE 分数
- ROUGE-N
- ROUGE-L
- ROUGE-S
- ROUGE-SU
- ROUGE-W
- MRR平均倒数排名
- BERT 分数
-
- 标记化和嵌入生成
-
- 余弦相似度计算
-
- 最佳匹配策略
-
- 准确率、召回率、F1 分数计算
-
LLM评估有哪些指标? ROUGE 分数、BLEU、困惑度、MRR、BERTScore 数学和示例
困惑度 Perplexity
不要将它与 ChatGPT 的竞争对手困惑度 (Perplexity) 混淆,但它是用于评估语言模型预测答案中单词序列的能力的关键指标。此外,它不需要 Ground Truth!
困惑度衡量模型在预测序列中的下一个单词时的“困惑”或“混乱”程度。
困惑度越低,意味着混乱程度越低,这意味着它能够更好地预测下一个单词。
相反,困惑度越高,表示混乱程度越高,这意味着模型很难正确预测下一个单词。
所以,
如果Perplexity=1,则模型以 100% 的准确率完美地预测该序列。
Perplexity=10可以解释为模型在序列中的每个点上平均有 10 个同样可能的选项。因此非常困惑。
如何计算?
exp(- (1/N) * Σ log(P(w_i | w_1, w_2, …, w_i-1)))
P(w_i | w_1, w_2, …, w_i-1) = 给定前面的单词 (w_1, w_2, …, w_i-1) 作为上下文,语言模型分配给序列中第 i 个单词 (w_i) 的条件概率。
N =长度
假设 LLM 预测某些提示为“猫坐在垫子上。”。
**步骤 1:**根据前面的单词计算每个单词的概率。对于此示例,我们假设以下值:
P(“The”) = 0.5
P(“cat”|“The”) = 0.4
P(“sat”|“The cat”) = 0.3
P(“on”|“The cat sat”) = 0.4
P(“the”|“The cat sat”) = 0.5
P(“mat”|“The cat sat on”) = 0.6
**第 2 步:**应用对数并将这些概率加在一起
log(P(“The”)) +
log(P(“cat”|”The”)) +
log(P(“sat”|”The cat”)) +
log(P(“on”|”The cat sat”)) +
log(P(“the”|”The cat sat”)) + log(P(“the”|”The cat sat on”)) +
log(P(“mat”|”The cat sat on”)) = abc
**步骤 3:**对上述对数总和取平均值(除以总词数),并应用指数
exp(-abc/6) = 2.275 (暂时假设)
因此,Perplexity=2.275 意味着模型需要在约 2.275 个单词中进行选择来选择序列中的下一个单词。
***注意:*要计算困惑度,您需要掌握预测概率。因此,在使用 OpenAI 或 Anthropic 等无法获取概率分数的 API 时,困惑度就毫无用处了。
对于 HuggingFace 加载的模型,您可以使用评估包,使用下面的代码来更改模型的名称。
BLEU分数
另一个非常流行的指标是 BLEU(Bilingual Evaluation Understudy,双语评估替补),它评估输出与 Ground Truth 的相似程度(因此与 Perplexity 不同,需要 Ground Truth),主要用于机器翻译问题。
BLEU 分数 = BP * exp(∑(weightᵢ* log(pᵢ)))
这里
*BP=简洁惩罚 *Brevity Penalty
weightᵢ = 分配给每个 n-gram 的准确率的权重
pᵢ = 每个 n-gram 的准确率
让我们通过以下示例来理解数学和每个术语:
假设,
参考句子:“猫在垫子上。”
候选句子:“猫坐在垫子上。”
步骤 1:计算 n-gram 精度。
假设 n=2
因此,我们需要计算 1-gram 和 2-gram 的精度。如果 n=3,我们将计算 1-gram、2-gram 和 3-gram
1-gram 精度
参考:猫在垫子上
生成: The cat sat on the mat
匹配:The cat on the mat (5)
=匹配数/生成的单元总数= 5 / 6
2-gram 精度
参考:猫,猫在,在,垫子上
***生成:*猫,猫坐,坐在,垫子上
匹配:垫子 上的 猫 (3)
=匹配数/生成的二元组总数= 3 / 5 = 0.6
第 2 步:简洁惩罚(BP)
简洁性惩罚用于惩罚简短的候选句子。
如果候选长度≥参考长度,则BP = 1,
BP = ***exp(1 — 参考长度/候选长度) *如果候选长度 < 参考长度。
在这种情况下,参考句子和候选句子都有 6 个单词,因此:BP = 1
现在,我们已经拥有计算 BLEU 所需的一切,即 BP 项和 n-gram 精度值。每个 n-gram 的权重通常相等,因此假设权重ᵢ=0.5(权重总和应等于 1)
BLEU = 1exp(0.5log(5/6) + 0.5log(0.6))=0.86***
ROUGE 分数
与 BLEU 分数类似,ROUGE 分数也是一个需要 Ground Truth 的指标,并且也有多个版本。此外,它不是一个单一的分数,而是计算召回率、准确率和 F1,这被称为 ROUGE-Recall、ROUGE-Precision 和 ROUGE-F1。一些常用的 ROUGE 分数版本是
ROUGE-N:测量生成文本和参考文本之间的 n-gram(如二元语法、三元语法)的重叠。
ROUGE-L:关注单词的最长公共子序列(longest common subsequence, LCS),突出序列相似性。
ROUGE-W:根据 LCS 的长度对其进行加权,为较长的匹配给予更多信任。
ROUGE-S:查看跳过二元词组,即保持其顺序但其间可能有间隙的单词对。
ROUGE-SU:查看跳过二元词组,即保持其顺序但中间可能有间隙的单词对。
让我们快速了解每个变体背后的数学原理
假设,
**ground truth:**猫坐在垫子上
**预测:**猫躺在垫子上
注意:我们将对所有 ROUGE 解释使用相同的示例
ROUGE-N
ROUGE-1(单元词unigrams):
- 参考中的单字:{The, cat, sat, on, the, mat}
- 生成的单元词组:{The, cat, lay, on, the, mat}
- 重叠:{The、cat、on、the、mat}
- 精度:5/6(匹配的生成单元词组/生成的单元词组总数)
- 召回率:5/6(匹配的参考单元数/总参考单元数)
- F1 分数:5/6(因为准确率和召回率相等)
ROUGE-2 (二元语法bigrams):
- 参考中的二元词组:{猫,猫坐,坐在,在,垫子上}
- 生成的二元词组:{The cat, cat lay, lay on, on the, the mat}
- 重叠:{猫,在,垫子上}
- 准确度:3/5
- 召回率:3/5
- F1 评分:3/5
ROUGE-L
对于 ROUGE-L,我们需要计算最长公共子序列,即在两个序列中以相同顺序出现但不一定连续的序列。它用于通过识别两个序列共同的最长子序列来衡量两个序列之间的相似性。
- 最长公共子序列 (LCS):“垫子上的猫”
- 精度:5/6(LCS 长度/生成文本长度)
- 召回率:5/6(LCS长度/参考文本长度)
- F1 评分:5/6
ROUGE-S
ROUGE-S 测量生成文本和参考文本之间的跳过二元词组的重叠。
跳跃二元词组(Skip-bigrams)是指在两个文本中以相同顺序出现的单词对,但它们不必是连续的。这允许更灵活地衡量文本相似度。
- 参考中的跳过二元词组:{The cat, The sat, The on, The the, The mat, cat sat, cat on, cat the, cat mat, sat on, sat the, sat mat, on the, on mat, the mat}
- 生成的跳过二元组:{The cat, The lay, The on, The the, The mat, cat lay, cat on, cat the, cat mat, lay on, lay the, lay mat, on the, on mat, the mat}
- 重叠:{猫,在,在,垫子上,猫在,猫,猫垫,在,在垫子上,垫子}
- 准确度:10/15
- 召回率:10/15
- F1 评分:10/15
ROUGE-SU
ROUGE-SU 是 ROUGE-S 的扩展,其评估中同时包括跳过二元词组和一元词组(单个单词)。这有助于在没有匹配的单词对的情况下给予一些分数,而 ROUGE-S 本身可能会漏掉这些单词对。
ROUGE-S 关注生成文本和参考文本中出现的单词对。如果不存在这样的单词对,ROUGE-S 会给出零分,即使句子有些相似。
例子:
- 参考句(S1):“警察杀死了枪手。”
- 生成的句子(S5):“枪手杀死警察”
在这种情况下,S5 与 S1 完全相反,因此没有匹配的单词对,ROUGE-S 会将其评分为 0。
对于 ROUGE-SU,除了二元语法之外,甚至单元语法匹配也会被考虑,因此在上述情况下 ROUGE-SU 不会为 0。
ROUGE-W
ROUGE-W(ROUGE 加权最长公共子序列)改进了基本的 LCS 方法,为连续单词匹配赋予更多权重,奖励按顺序更接近匹配的序列。这个想法很简单:为 LCS 的较长子部分分配更多权重
***基本 LCS 的问题:***基本 LCS 测量在两个文本中以相同顺序出现的最长单词序列的长度,但不区分连续匹配和分散匹配。
例子:
- 参考文本(X):[ABCDEFG]
- 生成的文本 1(Y1):[ABCDHIK]
- 生成的文本 2(Y2):[AHBKCID]
Y1 和 Y2 具有相同的 LCS 长度 4(ABCD),但是 Y1 应该被认为更好,因为它具有连续匹配。
**ROUGE-W 通过为较长的连续匹配分配更高的权重来改善这一点。**在这里,我们需要计算加权 LCS。让我们了解如何计算 WLCS:
参考文本(X):[ABCDEFG]
生成的文本 1(Y1):[ABCDHIK]
生成的文本 2(Y2):[AHBKCID]
对于Y1:
比赛:ABCD(连续4场比赛)
加权 LCS:f(4)
对于Y2:
匹配:ABCD(不连续,每个字母都是独立的,因此此子序列中有 4 个长度为 1 的子部分)
加权 LCS:f(1)+f(1)+f(1)+f(1)
其中f()是权重分配函数。
**注意:**选择一个函数,使得 f(x+y)>f(x)+f(y)
因此,如果 f(x)=x²,
Y1加权LCS=4²=16
Y2加权LCS=1²+1²+1²+1²=4
ROUGE-W 召回: f − 1 ( W L C S ( X , Y 1 ) ) / l e n ( X ) f⁻¹ (WLCS(X,Y1))/len(X) f−1(WLCS(X,Y1))/len(X)
ROUGE-W 精度: f − 1 ( W L C S ( X , Y 1 ) ) / l e n ( Y 1 ) f⁻¹ (WLCS(X,Y1))/len(Y1) f−1(WLCS(X,Y1))/len(Y1)
其中 f⁻¹=f() 的逆,即 √x
MRR平均倒数排名
最简单的方法是平均倒数排名 (Mean Reciprocal Rank, MRR) 指标,它检查 LLM 将正确答案放在列表顶部的能力。因此,它是分类或检索任务的良好指标。
考虑一个简单的例子:
- 你问一个问题: “法国的首都是哪里?”
- LLM 答案(排序):
第一名:伦敦
第二名:巴黎
第三名:柏林
正确答案“巴黎”排在第二位。
计算此答案的倒数等级 (RR):
- 倒数排名 = 1/正确答案的位置
- 因此,RR = 1/2 = 0.5
如果你对几个问题都这样做,那么你可以计算每个问题的 RR,然后求出平均值。这个平均值就是 MRR。如果助手经常在最前面的位置得到正确答案,那么 MRR 就会很高,接近 1。如果很少得到正确答案,那么 MRR 就会较低,接近 0。
BERT 分数
BERTScore 使用预先训练的 BERT 模型来评估生成的文本与参考文本相比的质量。它使用 BERT 嵌入来测量两个文本之间的语义相似度。
1. 标记化和嵌入生成
***Tokenization:*将生成的文本和参考文本都 token 化为子词单元(比如 BERT 中的 WordPieces),并转换成 BERT 模型可以理解的 token ID。
***BERT 嵌入:*两个文本的标记 ID 都被输入到预先训练的 BERT 模型中。BERT 将每个标记转换为高维向量(嵌入),该向量根据周围的标记捕获其上下文含义。
2. 余弦相似度计算
***余弦相似度:*获得生成文本和参考文本的嵌入后,计算每对嵌入之间的余弦相似度(逐个标记)。
***相似度矩阵:*创建一个相似度矩阵,其中每个元素表示生成文本和参考文本中相应标记之间的余弦相似度。
3. 最佳匹配策略
最佳匹配: BERTScore 使用贪婪算法来找到生成文本中的标记与参考文本中的标记之间的最佳匹配。目标是最大化整体相似度得分。
***最佳匹配:*该算法确保生成文本中的每个标记与参考文本中的最多一个标记匹配,反之亦然。
4. 准确率、召回率、F1 分数计算
***BERT-Precision:*生成文本中每个标记与参考文本中最接近的标记的平均相似度得分。
***BERT-Recall:*参考文本中每个标记与生成文本中最接近的标记的平均相似度得分。
***BERT-F1 分数:*准确率和召回率的调和平均值。
让我们用一个例子来说明这一点:
参考文本: “猫坐在垫子上。”
生成的文本: “一只猫坐在垫子上。”
**步骤 1:**标记化和嵌入生成
- 参考标记: [“The”,“cat”,“sat”,“on”,“the”,“mat”,“。”]
- 生成的标记: [“A”,“cat”,“was”,“sitting”,“on”,“the”,“mat”,“。”]
**步骤 2:**使用 BERT 模型对这些 token 进行嵌入生成
**步骤 3:**使用每个 token 嵌入之间的余弦相似度创建相似度矩阵。类似于下图
**步骤 4:**从参考文本和生成的文本中获取最佳匹配对。假设你得到
(“A”,“The”),(“cat”,“cat”),(“was”,“sat”),(“sitting”,“sat”),(“on”,“on”),(“the”,“the”),(“mat”,“mat”)
**步骤5:**计算BERTScore:
- **BERT-Precision:**生成文本中标记的平均相似度。
- **BERT-Recall:**参考文本中标记的平均相似度。
- BERT-F1: 2 * (准确率 * 召回率) / (准确率 + 召回率)