OpenCompass项目中的LLM作为评估者技术解析
引言
在大模型评估领域,传统的基于规则的评估方法(如正则表达式匹配)往往难以应对复杂场景。OpenCompass项目提供的GenericLLMEvaluator组件创新性地采用大语言模型(LLM)作为评估者,为解决这一难题提供了新思路。
为什么需要LLM作为评估者
传统评估方法存在以下局限性:
- 当模型输出不含选项标识符时难以判断
- 事实性判断数据集难以用规则覆盖
- 开放式回答需要复杂的理解和推理能力
- 需要设计大量规则才能完成评估
LLM作为评估者的优势在于其强大的自然语言理解能力,可以处理这些复杂场景。
数据集准备
使用LLM评估需要准备特定格式的数据集,支持JSON Lines和CSV两种格式。数据集应至少包含:
- 问题或任务描述
- 参考答案或标准答案
- (模型预测将在评估过程中生成)
JSONL格式示例
{
"problem": "法国的首都是哪里?",
"answer": "巴黎"
}
CSV格式示例
problem,answer
"法国的首都是哪里?","巴黎"
评估配置详解
通过命令行使用LLM评估
OpenCompass支持通过环境变量快速配置LLM评估服务:
export OC_EVAL_MODEL=Qwen/Qwen2.5-32B-Instruct
export OC_EVAL_API_KEY=sk-1234
export OC_EVAL_API_BASE=http://172.30.56.1:4000/v1
通过配置文件使用LLM评估
完整的LLM评估配置包含三个核心部分:
- 数据集读取配置:指定输入输出列名
reader_cfg = dict(
input_columns=['problem'], # 问题列名
output_column='answer' # 答案列名
)
- 推理配置:定义如何提示被测模型
infer_cfg = dict(
prompt_template=dict(
type=PromptTemplate,
template=dict(
round=[
dict(role='HUMAN', prompt='{problem}'),
]
),
),
retriever=dict(type=ZeroRetriever),
inferencer=dict(type=GenInferencer),
)
- 评估配置:定义LLM评估逻辑
eval_cfg = dict(
evaluator=dict(
type=GenericLLMEvaluator,
prompt_template=dict(...), # 评估提示模板
dataset_cfg=dict(...), # 数据集配置
eval_cfg=YOUR_EVAL_MODEL_CONFIG, # 评估模型配置
dict_postprocessor=dict(type=generic_llmeval_postprocess),
),
)
评估模板设计技巧
评估模板的质量直接影响评估效果。以下是设计模板的建议:
- 明确评估标准:清晰定义什么是"正确"回答
- 提供参考答案:让评估者有明确依据
- 简化输出格式:如强制要求返回"A"或"B"
- 包含系统提示:设定评估者的角色
示例模板:
请评估以下回答是否正确。
问题:{problem}
参考答案:{answer}
模型回答:{prediction}
如果回答正确请回复"A",错误请回复"B"。
级联评估器(CascadeEvaluator)
OpenCompass还提供了结合规则评估和LLM评估的级联评估器,有两种工作模式:
-
级联模式(parallel=False):
- 先用规则评估所有样本
- 仅对规则评估失败的样本使用LLM重新评估
- 降低评估成本同时保持准确性
-
并行模式(parallel=True):
- 同时使用规则和LLM评估所有样本
- 任一评估方法通过即视为正确
- 提高评估宽松度但成本较高
级联评估器配置示例
cascade_evaluator = dict(
type=CascadeEvaluator,
llm_evaluator=llm_eval_evaluator,
rule_evaluator=rule_evaluator,
parallel=False # 级联模式
)
评估结果解析
评估结果包含丰富的信息:
{
'accuracy': 85.0, # 最终准确率
'cascade_stats': {
'total_samples': 100,
'rule_correct': 70, # 规则评估正确的样本数
'llm_evaluated': 30, # LLM评估的样本数
'llm_correct': 15, # LLM评估正确的样本数
'final_correct': 85 # 总正确样本数
},
'details': [...] # 详细评估结果
}
最佳实践建议
- 对于简单任务优先使用规则评估
- 复杂任务可结合级联评估器
- 设计评估模板时进行充分测试
- 关注评估成本与准确性的平衡
- 使用
--dump-eval-details
获取详细评估日志
通过OpenCompass的LLM评估功能,开发者可以更全面、准确地评估大模型在各种复杂场景下的表现,为模型优化提供可靠依据。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考