
评估LLM性能的统计方法
作者 | Ideogram 提供图片
引言
大型语言模型(LLM)已成为许多人工智能应用的核心。随着企业越来越多地依赖 LLM 工具来完成从客户支持到内容生成等各种任务,了解这些模型的运作方式并确保其质量比以往任何时候都更加重要。在本文中,我们将探讨用于评估 LLM 性能的统计方法,这是确保稳定性和有效性——尤其是在模型针对特定任务进行微调时——的关键步骤。
一个经常被忽视的方面是 LLM 输出的严格评估。许多应用程序仅依赖预训练模型,而不进行进一步的微调,认为默认性能已足够。然而,系统评估对于确认模型在生产环境中生成准确、相关且安全的内容至关重要。
评估 LLM 性能的方法有很多,但本文将重点介绍评估的统计方法。这些方法是什么?让我们来看看。
统计 LLM 评估指标
评估 LLM 具有挑战性,因为它们的输出并不总是关于预测离散标签——它们通常涉及生成连贯且与上下文相关的文本。在评估 LLM 时,我们需要考虑几个因素,包括
- 给定提示输入,输出的相关性如何?
- 与真实情况相比,输出的准确性如何?
- 模型在其响应中是否表现出幻觉?
- 模型输出是否包含任何有害或有偏见的信息?
- 模型是否正确执行了分配的任务?
由于 LLM 评估需要考虑许多方面,因此没有单一指标可以涵盖性能的各个方面。即使是下面讨论的统计指标也只能解决 LLM 行为的某些方面。值得注意的是,虽然这些方法对于测量表面级相似性等方面的效果很好,但它们可能无法完全捕捉更深层次的推理或语义理解。为了进行全面评估,可能需要额外的或补充的评估方法(例如,像 BERTScore 这样的较新指标)。
让我们来探讨几种用于评估 LLM 性能的统计方法、它们的优点、局限性以及如何实现它们。
BLEU (Bilingual Evaluation Understudy)
BLEU,即双语评估替补,是一种用于评估生成文本质量的统计方法。它常用于翻译和文本摘要场景。
该方法由 Papineni 等人(2002)首次提出,并在 2000 年代初成为机器翻译系统评估的标准。BLEU 的核心思想是使用 n-gram 比率来衡量模型输出与一个或多个参考文本的接近程度。
更确切地说,BLEU 使用 n-gram 精度结合简短惩罚来衡量输出文本与参考文本的匹配程度。BLEU 的总体方程如下图所示。
在上式中,BP 代表简短惩罚,它会惩罚过短的候选句子,N 是考虑的最大 n-gram 阶数,w 代表每个 n-gram 精度的权重,p 是 n 阶 n-gram 的修改精度。
让我们分解一下简短惩罚和 n-gram 精度。简短惩罚确保较短的输出会受到惩罚,从而促进完整且信息丰富的响应。
在此方程中,c 是输出句子的长度,而 r 是参考句子的长度(如果存在多个参考句子,则为最接近的参考句子)。请注意,当输出比参考句子长时,不会应用任何惩罚;只有当输出较短时才会产生惩罚。
接下来,我们检查 n-gram 精度方程
此方程用于调整模型可能过度生成某些 n-gram 的可能性。它会裁剪输出中每个 n-gram 的计数,使其不超过在参考文本中找到的最大计数,从而防止重复短语导致的人为高精度得分。
让我们通过一个例子来阐明该方法。考虑以下数据
参考:The cat is on the mat
LLM 输出:The cat on the mat
为了计算 BLEU 分数,我们首先对句子进行分词
参考:["The", "cat", "is", "on", "the", "mat"]
LLM 输出:["The", "cat", "on", "the", "mat"]
接下来,我们计算 n-gram 精度。虽然 n-gram 阶数是灵活的(通常最高为四),但让我们以双 n-gram 为例。我们比较参考文本和输出中的双 n-gram,并应用裁剪以确保输出中的计数不超过参考文本中的计数。
例如
1-gram 精度 = 5 / 5 = 1
2-gram 精度 = 3 / 4 = 0.75
然后,由于输出比参考文本短,我们计算简短惩罚
exp(1 − 6/5) ≈ 0.8187
将所有内容组合起来,BLEU 分数计算如下
BLEU = 0.8187 ⋅ exp((1/2)*log(1) + (1/2)*log(0.75))
BLEU ≈ 0.709
此计算显示 BLEU 分数约为 0.709,即约 70%。鉴于 BLEU 分数介于 0 到 1 之间——1 为完美——对于许多用例来说,0.7 的分数都非常出色。但是,需要注意的是,BLEU 相对简单,可能无法捕捉语义细微差别,因此它在翻译和摘要等应用中最有效。
对于 Python 实现,可以使用 NLTK 库
1 2 3 4 5 6 7 |
from nltk.translate.bleu_score import sentence_bleu reference = ["The cat is on the mat".split()] candidate = "The cat on the mat".split() bleu_score = sentence_bleu(reference, candidate, weights=(0.5, 0.5)) print(f"BLEU Score: {bleu_score}") |
输出
1 |
BLEU Score: 0.7090416310250969 |
在上面的代码中,weights = (0.5, 0.5)
表示仅考虑 1-gram 和 2-gram 精度。
这是关于 BLEU 分数你需要知道的基础。接下来,让我们研究另一个重要的指标。
ROUGE (Recall-Oriented Understudy for Gisting Evaluation)
ROUGE,即用于摘要评估的召回导向替补,是一系列用于从召回角度评估 LLM 输出性能的指标。ROUGE 最初由 Lin(2004)发布,用于评估自动摘要,但此后已应用于包括翻译在内的各种语言模型任务。
与 BLEU 类似,ROUGE 衡量生成输出与参考文本之间的重叠。然而,ROUGE 更侧重于召回,使其在旨在捕获参考文本中的所有关键信息时特别有用。
ROUGE 有几种变体
ROUGE-N
ROUGE-N 计算为输出和参考文本之间 n-gram 的重叠。下图显示了其方程
该指标计算重叠 n-gram 的比率,通过裁剪计数来避免过度表示,并按参考文本中 n-gram 的总数进行归一化。
ROUGE-L
与 ROUGE-N 不同,ROUGE-L 使用最长公共子序列 (LCS) 来衡量句子相似性。它查找同时出现在输出和参考文本中的最长单词序列,即使这些单词不是连续的,只要它们保持相同的顺序。
该指标特别适用于评估文本摘要和生成任务中的流畅性和语法连贯性。
ROUGE-W
ROUGE-W 是 ROUGE-L 的加权版本,为连续匹配增加了重要性。由于二次加权,较长的连续序列会产生更高的分数。
这里,Lw 表示加权 LCS 长度,计算如下
在此方程中,k 是连续匹配的长度,k² 是其权重。
ROUGE-S
ROUGE-S 允许跳跃双 n-gram 匹配,这意味着它会考虑以正确顺序出现但并非连续出现的单词对。这提供了灵活的语义相似性度量。
ROUGE-S 的灵活性使其适用于评估那些精确短语匹配不如捕捉整体意义重要的输出。
让我们尝试一个用于 ROUGE 计算的 Python 实现。首先,安装包
1 |
pip install rouge-score |
然后,使用以下代码测试 ROUGE 指标
1 2 3 4 5 6 7 8 9 10 11 |
from rouge_score import rouge_scorer reference = "The cat is on the mat" candidate = "The cat on the mat" scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True) scores = scorer.score(reference, candidate) print("ROUGE-1:", scores['rouge1']) print("ROUGE-2:", scores['rouge2']) print("ROUGE-L:", scores['rougeL']) |
输出
1 2 3 |
ROUGE-1: Score(precision=1.0, recall=0.8333333333333334, fmeasure=0.9090909090909091) ROUGE-2: Score(precision=0.75, recall=0.6, fmeasure=0.6666666666666665) ROUGE-L: Score(precision=1.0, recall=0.8333333333333334, fmeasure=0.9090909090909091) |
ROUGE 分数通常介于 0 到 1 之间。在许多应用中,高于 0.4 的分数被认为是好的。上面的示例表明,根据这些指标,LLM 输出表现良好。本节说明,虽然 ROUGE 提供了关于召回率和流畅性的宝贵见解,但它最好与其它指标结合使用以进行全面评估。
METEOR (Metric for Evaluation of Translation with Explicit ORdering)
METEOR,即具有显式排序的翻译评估指标,是由 Banerjee 和 Lavie(2005)引入的一项指标,用于通过将 LLM 输出与参考文本进行比较来评估 LLM 输出。虽然 METEOR 与 BLEU 和 ROUGE 类似,但它通过纳入同义词、词干提取和词序的考虑来改进它们。
METEOR 基于 F1 分数——精度和召回率的调和平均值——并额外加重召回率。这种侧重确保指标能够奖励那些捕获了更多参考文本内容的输出。
METEOR 公式如下
在此方程中,P 代表分配给惩罚的权重,F1 是精度和召回率的调和平均值。
为了更详细地说明,F1 分数定义为
这里,精度 (P) 侧重于输出 (candidate),而召回率 (R) 考虑参考文本。由于召回率的权重更大,METEOR 会奖励捕获了更多参考文本内容的输出。
最后,对碎片化匹配应用惩罚。以下方程显示了该惩罚的计算方法
在此方程中,C 是块的数量(连续匹配的单词序列),M 是匹配令牌的总数,γ(通常为 0.5)是权重,δ(通常为 3)是惩罚缩放的指数。
通过结合以上所有方程,得出 METEOR 分数,该分数通常介于 0 到 1 之间,其中高于 0.4 的分数被认为是好的。
让我们尝试一个用于 METEOR 分数的 Python 实现。首先,确保已下载所需的 NLTK 语料库
1 2 3 |
import nltk nltk.download('punkt_tab') nltk.download('wordnet') |
然后,使用以下代码计算 METEOR 分数
1 2 3 4 5 6 7 8 9 10 11 |
from nltk.translate.meteor_score import meteor_score 从 nltk.分词 导入 word_tokenize reference = "The cat is on the mat" candidate = "The cat on the mat" reference_tokens = word_tokenize(reference) candidate_tokens = word_tokenize(candidate) score = meteor_score([reference_tokens], candidate_tokens) print(f"METEOR Score: {score}") |
输出
1 |
METEOR Score: 0.8203389830508474 |
METEOR 分数通常高于 0.4 被认为是好的,并且与 BLEU 和 ROUGE 分数结合使用时,通过捕获表面级准确性和更深层次的语义内容,为 LLM 性能提供了更全面的评估。
结论
大型语言模型 (LLM) 已成为各个领域的关键工具。随着组织努力开发针对其特定用例既强大又可靠的 LLM,使用多种指标来评估这些模型势在必行。
在本文中,我们重点介绍了三种用于评估 LLM 性能的统计方法
- BLEU
- ROUGE
- METEOR
我们探讨了每种指标背后的目的,详细介绍了它们的底层方程,并演示了如何在 Python 中实现它们。虽然这些指标在评估 LLM 输出的某些方面(如精度、召回率和整体文本相似性)方面很有价值,但它们也有局限性,尤其是在捕捉语义深度和推理能力方面。为了进行全面评估,这些统计方法可以辅以额外的指标和定性分析。
我希望本文能为您提供关于 LLM 性能统计评估的有用见解,并作为进一步探索高级评估技术的起点。
暂无评论。