判别式评测(PPL)与生成式评测(GEN)对比说明
1. 基本概念
判别式评测 (PPL - Perplexity-based)
- 计算模型对给定输入的困惑度(perplexity)或似然度(likelihood)
- 通过比较不同选项的困惑度/似然度来选择最优答案
- 适用于有限选项的分类任务
- 不需要模型生成文本,只需要评估已有选项
model.compute_perplexity(prompt) #
计算困惑度 是调用模型计算困惑度部署返回结
生成式评测 (GEN - Generation-based)
- 让模型直接生成答案
- 将生成的答案与标准答案进行比较
- 适用于开放式问答、摘要、翻译等任务
- 需要模型具备文本生成能力
2. 具体示例
示例1:情感分析任务
判别式评测(PPL)方式
text = "这部电影真的很棒!"
template = """评价:{text}
情感倾向:{option}"""
options = ["积极", "消极"]
scores = []
for opt in options:prompt = template.format(text=text, option=opt)score = model.compute_perplexity(prompt) scores.append(score)
predicted = options[argmin(scores)]
生成式评测(GEN)方式
text = "这部电影真的很棒!"
prompt = """请判断下面这段话的情感倾向(积极/消极):
评价:{text}
情感倾向:"""
generated = model.generate(prompt.format(text=text))
predicted = parse_generation(generated)
示例2:语义相似度任务(如AFQMC)
判别式评测(PPL)方式
text1 = "这个产品的质量很好"
text2 = "这件商品品质不错"
template = """句子1:{text1}
句子2:{text2}
这两句话的含义{option}"""
options = ["相似", "不相似"]
scores = []
for opt in options:prompt = template.format(text1=text1, text2=text2, option=opt)score = model.compute_perplexity(prompt)scores.append(score)predicted = options[argmin(scores)]
生成式评测(GEN)方式
text1 = "这个产品的质量很好"
text2 = "这件商品品质不错"
prompt = """请判断下面两句话的含义是否相似:
句子1:{text1}
句子2:{text2}
答案(相似/不相似):"""
generated = model.generate(prompt.format(text1=text1, text2=text2))
predicted = parse_generation(generated)
3. 两种方法的优劣对比
判别式评测(PPL)优势
- 计算效率高,只需计算困惑度
- 结果更稳定,不受生成随机性影响
- 答案范围受限,不会出现预期外的回答
- 适合处理分类类任务
判别式评测(PPL)劣势
- 只能处理有限选项的任务
- 需要精心设计prompt模板
- 对prompt格式较为敏感
生成式评测(GEN)优势
- 更接近真实应用场景
- 可以处理开放式问题
- prompt设计更灵活
- 可以生成解释性答案
生成式评测(GEN)劣势
- 计算成本较高
- 结果可能不够稳定
- 需要额外的答案解析步骤
- 可能生成预期外的答案
4. 适用场景建议
适合使用PPL的场景
- 分类任务
- 对任务/对错判断
- 多选题
- 需要高效率评测的场景
适合使用GEN的场景
- 开放式问答
- 文本生成任务
- 需要解释性答案的场景
- 翻译、摘要等生成任务