如何在GLM-130B大模型上评估自定义任务
前言
GLM-130B作为千亿参数规模的双语大语言模型,其评估过程需要特殊的配置和处理。本文将详细介绍如何在GLM-130B上评估自定义任务,包括任务配置、数据准备、指标实现等关键环节。
任务配置基础
评估任务通过YAML文件进行定义,这种配置方式具有以下优势:
- 支持批量评估多个任务
- 允许递归扫描目录下的所有YAML文件
- 便于任务参数的独立配置
基本配置参数
每个任务YAML文件都需要包含以下核心参数:
name: '任务名称' # 如glue_cola
type: 'mul' # 任务类型:'gen'(生成)或'mul'(多选)
path: '数据路径' # 相对于DATA_PATH的路径
use_task_mask: False # 是否使用[gMASK]标记
unidirectional: False # 是否使用单向注意力
max_seq_length: 2048 # 最大序列长度
micro-batch-size: 30 # 微批次大小(生成任务目前仅支持1)
数据准备规范
推荐目录结构
为便于管理不同提示模板(prompt)的评估数据,建议采用以下目录结构:
数据根目录
└── 任务名称
├── prompt_1
│ ├── test.jsonl # 测试集
│ └── val.jsonl # 验证集
├── prompt_2
│ ├── test.jsonl
│ └── val.jsonl
└── prompt_3
├── test.jsonl
└── val.jsonl
数据文件格式
多选任务格式
每行JSON数据应包含:
{
"inputs_pretokenized": "上下文和问题",
"choices_pretokenized": ["选项1", "选项2", "选项3"],
"label": 正确答案索引
}
默认评估指标为准确率(Accuracy)。
生成任务格式
每行JSON数据应包含:
{
"inputs_pretokenized": "上下文和问题",
"targets_pretokenized": ["目标答案1", "目标答案2"],
"label": 正确答案索引
}
默认评估指标为精确匹配(EM)和F1值。
自定义评估指标
如需实现自定义评估指标,可按以下步骤操作:
- 在metrics.py文件中实现您的指标函数
- 将函数名添加到DEFAULT_METRICS字典中
- 在任务YAML文件中通过metric参数指定您的指标名称
高级定制评估流程
对于需要特殊处理的评估任务,可以通过继承基础任务类实现完全定制:
可继承的基础类
MultiChoiceTask
: 多选任务基类GenerationTask
: 生成任务基类
关键方法实现
需要重写process_single_batch
方法,定义如何处理输入批次并获取预测结果。GLM-130B提供了两个核心API:
cond_log_prob()
: 计算给定输出的条件概率generate_text()
: 根据输入生成文本
配置方法
实现自定义任务类后,需要在YAML文件中通过module字段指定类的导入路径。例如LAMBADA任务就定制了beam search生成策略。
评估执行命令
单节点评估
bash scripts/evaluate.sh 任务配置.yaml
多节点评估
bash scripts/evaluate_multiple_node.sh 任务配置.yaml
最佳实践建议
- 对于生成任务,建议先在小规模验证集上测试不同参数配置
- 多选任务可以尝试更大的micro-batch-size以提高评估效率
- 复杂任务建议先实现简化版本,再逐步增加功能
- 注意max_seq_length的设置,过长会影响性能,过短可能导致截断
通过以上方法,您可以充分利用GLM-130B的强大能力,对各种自定义任务进行专业、高效的评估。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考