返回学习地图
llmPhase B · 第 16

2.9 LLM评估

Perplexity/BLEU/ROUGE/HumanEval:如何科学评价大语言模型

5 个章节·按类别展开/折叠
知识

为什么评估很重要?——没有尺子的裁缝

没有评估 = 没有方向。就像裁缝没有尺子,无法知道衣服是否合身。训练模型时,如果没有科学的评估方法,你不知道模型是在进步还是在退步。

评估的三个维度:

1. 能力评估:模型能做什么?(问答、翻译、代码、推理)

2. 安全评估:模型不应该做什么?(生成有害内容、泄露隐私、产生偏见)

3. 效率评估:模型的成本如何?(推理速度、内存占用、能耗)

常见评估指标:

指标衡量什么适用场景优缺点
Perplexity模型预测能力预训练、语言建模客观但只看概率,不评估质量
BLEU生成文本与参考的匹配度机器翻译、文本生成快速自动评估,但不考虑语义
ROUGE摘要与参考的重叠度文本摘要类似BLEU,关注召回率
HumanEval代码生成正确率代码能力直接测试功能性,最真实
MMLU多学科知识通用知识57个学科,全面但只是选择题
公式

Perplexity:模型的“困惑程度”

<p><b>Perplexity(PPL)是衡量语言模型预测能力的核心指标。</b></p><p><b>公式:</b></p><pre>PPL = exp( -(1/N) * Σ log P(wᵢ | w₁...wᵢ₋₁) ) = exp(L)
其中:L = 平均交叉熵损失
N = 词的总数</pre><p><b>直观理解:</b>PPL = 模型每次预测下一个词时,面临的等效选择数量。PPL=100意味着模型每次预测时,相当于从100个等概率词中猜。PPL=10意味着从10个词中猜。PPL越低越好。</p><p><b>类比:猜拳游戏。</b>如果我能100%猜中你出什么,PPL=1(没有选择)。如果我只能猜中10%,PPL=10(10个等概率选择)。如果完全随机猜,PPL=词汇表大小(几万个)。</p><p><b>数值例子:</b></p><pre>GPT-2 (1.5B参数): PPL ≈ 18.3 (WebText测试集)
GPT-3 (175B参数): PPL ≈ 12.0
GPT-4 (估计): PPL ≈ 8~10
人类水平: PPL ≈ 5~8 (估计)</pre><p><b>PPL的局限性:</b>PPL只衡量预测能力,不衡量生成质量、安全性、有用性。一个PPL很低的模型可能生成有害内容或胡说八道。</p><p><b>参数说明:</b></p><table border="1"><tr><th>参数</th><th>含义</th><th>典型值</th><th>太大/太小</th></tr><tr><td>PPL</td><td>困惑度</td><td>8~20 (越好越小)</td><td>太大→预测能力差;太小→可能过拟合</td></tr><tr><td>测试集</td><td>评估用的数据</td><td>与训练集不同分布</td><td>同分布→过拟合;差距太大→评估不准</td></tr></table>
知识

HumanEval与MMLU:直接测试能力

HumanEval:代码能力的终极测试。OpenAI 2021年发布。包含164个编程问题,每个问题有函数签名、文档字符串和若干测试用例。模型需要补全函数体,让测试用例全部通过。

HumanEval例子:

def has_close_elements(numbers: List[float], threshold: float) -> bool:
    """ Check if in given list of numbers, any two numbers are closer than given threshold."""
    # 模型需要补全这里
    pass

# 测试用例:
assert has_close_elements([1.0, 2.0, 3.0], 0.5) == False
assert has_close_elements([1.0, 2.0, 2.5], 0.6) == True
assert has_close_elements([1.0, 2.0, 2.4], 0.5) == True
assert has_close_elements([1.0, 2.0, 2.3], 0.3) == False
assert has_close_elements([1.0, 2.0, 2.2], 0.2) == True

# 正确补全:
for i in range(len(numbers)):
    for j in range(i+1, len(numbers)):
        if abs(numbers[i]-numbers[j]) < threshold:
            return True
return False

HumanEval分数:

GPT-3.5: 48.1%
GPT-4: 67.0%
GPT-4o: 90.2%
Claude 3.5 Sonnet: 92.0%
人类程序员: ~80-95%

MMLU(Massive Multitask Language Understanding):加州大学伯克利分校发布。包含57个学科(数学、物理、化学、生物、历史、法律、计算机等),每个学科有多个选择题。测试模型的通用知识。

MMLU分数:

GPT-3: 43.9%
GPT-3.5: 70.0%
GPT-4: 86.4%
人类专家: 89.8%
Claude 3 Opus: 86.8%

其他重要基准:

基准测试什么代表模型分数
GSM8K小学数学推理GPT-4: 92.0%
HellaSwag常识推理GPT-4: 95.3%
TruthfulQA回答真实性GPT-4: 60.0% (仍有提升空间)
BBH复杂推理GPT-4: 83.1%
实例

例子:计算BLEU分数

实例

场景:机器翻译任务。参考翻译(人类翻译)和机器翻译结果如下。

参考翻译:The cat is on the mat.

机器翻译A:The cat is on the mat. (完美匹配)

机器翻译B:There is a cat on the mat. (语义相同,用词不同)

机器翻译C:The dog is under the table. (完全错误)

BLEU计算(简化版,只看1-gram):

参考的1-gram:The, cat, is, on, the, mat (6个)
机器翻译A的1-gram:The, cat, is, on, the, mat (6个,全部匹配)
机器翻译B的1-gram:There, is, a, cat, on, the, mat (7个,匹配:is, cat, on, the, mat = 5个)
机器翻译C的1-gram:The, dog, is, under, the, table (6个,匹配:The, is, the = 3个)

BLEU-A = 6/6 = 1.0 (100%)
BLEU-B = 5/7 ≈ 0.71 (71%)
BLEU-C = 3/6 = 0.5 (50%)

加上长度惩罚(防止生成短句):
翻译A长度=6,参考长度=6,惩罚=1.0
翻译B长度=7,参考长度=6,惩罚≈0.95
翻译C长度=6,参考长度=6,惩罚=1.0

最终BLEU:
A: 1.0 * 1.0 = 1.0
B: 0.71 * 0.95 ≈ 0.67
C: 0.5 * 1.0 = 0.5

结论:BLEU-A最高(完美匹配),BLEU-B次之(语义正确但用词不同),BLEU-C最差(完全错误)。但注意:BLEU-B的语义其实和A一样,只是BLEU没考虑语义,只看词匹配。

练习

练习:LLM评估

练习

Q1:PPL=20和PPL=5,哪个模型更好?如果PPL=1呢?

Q2:BLEU分数高是否一定代表翻译质量好?为什么?

Q3:HumanEval测试模型的什么能力?为什么它比PPL更能反映实际能力?

Q4:MMLU包含57个学科,为什么用选择题而不是开放题?

Q5:如果一个模型PPL很低但TruthfulQA分数也很低,说明什么问题?

查看答案

A1:PPL=5更好。PPL越低表示模型预测能力越强。PPL=1意味着模型能100%预测正确(不可能,因为语言有歧义)。PPL=1可能是过拟合或测试集泄露。

A2:不一定。BLEU只看词匹配,不考虑语义。例如“There is a cat on the mat”和“The cat is on the mat”语义相同,但BLEU可能不高。BLEU还受参考翻译数量影响(参考越多,BLEU越可靠)。

A3:HumanEval测试代码生成能力。它直接运行测试用例,看代码是否能正确执行。PPL只衡量语言预测能力,一个PPL很低的模型可能完全不会写代码。HumanEval是功能性测试,最贴近实际应用。

A4:选择题便于自动评估。开放题需要人工评判,成本高、主观性强、难以复现。选择题可以标准化评估,但局限性是只测试知识记忆,不测试创造性思维。

A5:说明模型虽然预测能力强(PPL低),但可能生成不真实的内容(幻觉)。TruthfulQA低表示模型经常编造事实、错误信息。这揭示了仅优化PPL的局限性——模型需要同时优化真实性和有用性。