1. 构建自定义评估数据集

构建自定义评估数据集 学习卡片

任务目标

构建一个用于大模型评估实验的小型自定义数据集。数据集包含三个核心字段:输入(模型待处理的提示)、参考输出(理想答案或基准答案)、评估标准(针对该样本的评分维度与判定说明)。该数据集将作为后续评估实验的统一输入格式。

数据集格式设计

采用 JSON 格式存储,每个样本包含以下字段:

  • id:样本唯一标识
  • input:发送给模型的提示文本
  • reference_output:期望的理想输出,用于与模型生成结果对比
  • eval_criteria:评估该样本时使用的具体标准,包含评分维度与通过条件

完整实现代码

import json
from typing import List, Dict

def create_eval_dataset() -> List[Dict]:
    """创建包含输入、参考输出和评估标准的小型评估数据集。"""
    dataset = [
        {
            "id": "sample_001",
            "input": "请用一句话解释什么是梯度消失。",
            "reference_output": "梯度消失是指在深度神经网络反向传播过程中,梯度随层数增加而指数级减小,导致浅层参数难以更新的现象。",
            "eval_criteria": {
                "dimensions": ["准确性", "简洁性"],
                "pass_condition": "必须包含'反向传播'和'梯度减小'两个关键概念,且不超过30个字。"
            }
        },
        {
            "id": "sample_002",
            "input": "将以下句子翻译成英文:'机器学习是人工智能的一个分支。'",
            "reference_output": "Machine learning is a branch of artificial intelligence.",
            "eval_criteria": {
                "dimensions": ["翻译准确性", "语法正确性"],
                "pass_condition": "核心术语'machine learning'和'artificial intelligence'必须正确,语法无错误。"
            }
        },
        {
            "id": "sample_003",
            "input": "给定数字列表 [3, 1, 4, 1, 5],请返回排序后的结果。",
            "reference_output": "[1, 1, 3, 4, 5]",
            "eval_criteria": {
                "dimensions": ["结果正确性"],
                "pass_condition": "输出必须与参考输出完全一致,包括顺序和格式。"
            }
        },
        {
            "id": "sample_004",
            "input": "请列出深度学习中常用的三种激活函数。",
            "reference_output": "ReLU、Sigmoid、Tanh",
            "eval_criteria": {
                "dimensions": ["完整性", "准确性"],
                "pass_condition": "必须包含ReLU、Sigmoid、Tanh中的至少两个,且不能包含错误函数名。"
            }
        }
    ]
    return dataset

def save_dataset(dataset: List[Dict], filepath: str = "eval_dataset.json") -> None:
    """将数据集保存为JSON文件。"""
    with open(filepath, "w", encoding="utf-8") as f:
        json.dump(dataset, f, ensure_ascii=False, indent=2)
    print(f"数据集已保存至: {filepath}")

def load_dataset(filepath: str = "eval_dataset.json") -> List[Dict]:
    """从JSON文件加载数据集。"""
    with open(filepath, "r", encoding="utf-8") as f:
        return json.load(f)

if __name__ == "__main__":
    # 创建并保存数据集
    data = create_eval_dataset()
    save_dataset(data)
    
    # 验证:加载并打印样本数量与首条记录
    loaded = load_dataset()
    print(f"数据集样本总数: {len(loaded)}")
    print(f"首条样本ID: {loaded[0]['id']}")
    print(f"字段完整性验证: {all(all(k in item for k in ['id', 'input', 'reference_output', 'eval_criteria']) for item in loaded)}")

运行与验证方法

  1. 运行环境:Python 3.6+,无需额外安装第三方库(仅使用标准库 json)。
  2. 执行方式:将上述代码保存为 build_dataset.py,在终端运行 python build_dataset.py。
  3. 通过条件:程序正常结束,控制台输出以下信息即表示数据集构建成功:
    • 输出 数据集已保存至: eval_dataset.json
    • 输出 数据集样本总数: 4
    • 输出 首条样本ID: sample_001
    • 输出 字段完整性验证: True
  4. 产物检查:打开生成的 eval_dataset.json 文件,确认每个样本均包含 id、input、reference_output、eval_criteria 四个字段,且 eval_criteria 内含 dimensions 与 pass_condition 子字段。

后续使用说明

该数据集文件 eval_dataset.json 即为后续评估实验的标准输入。评估时,将每个样本的 input 发送给待测模型,获取模型输出后,依据 reference_output 和 eval_criteria 进行打分或判定。如需扩展数据集,按相同字段结构向列表中添加新字典即可。