采样数据#

在数据混合评测中,采样数据是数据混合评测的第二步,目前支持加权采样、分层采样、均匀采样三种采样方式。

数据格式#

采样数据格式为jsonl,每行是一个json对象,包含indexprompttagstask_typeweightdataset_namesubset_name等属性。

{
    "index": 0,
    "prompt": {"question": "What is the capital of France?"},
    "tags": ["en", "reasoning"],
    "task_type": "question_answering",
    "weight": 1.0,
    "dataset_name": "arc",
    "subset_name": "ARC-Easy",
}

加权采样#

加权采样是根据数据集的权重进行采样,权重越大,采样数据越多。对于嵌套的schema,加权采样会根据每个schema的权重进行缩放,最终所有数据集的权重和为1。

例如,整体采样100条数据,schema中有两个数据集,数据集A的权重为3,数据集B的权重为1,那么数据集A的采样数量为75条,数据集B的采样数量为25条。

from evalscope.collections import WeightedSampler
from evalscope.utils.io_utils import dump_jsonl_data

sampler = WeightedSampler(schema)
mixed_data = sampler.sample(100)
dump_jsonl_data(mixed_data, 'outputs/weighted_mixed_data.jsonl')

分层采样#

分层采样是根据schema中每个数据集自身样本的数量进行采样,每个数据集的采样数量与自身样本数量成正比。

例如,整体采样100条数据,schema中有两个数据集,数据集A有800条数据,数据集B有200条数据,那么数据集A的采样数量为80条,数据集B的采样数量为20条。

from evalscope.collections import StratifiedSampler

sampler = StratifiedSampler(schema)
mixed_data = sampler.sample(100)
dump_jsonl_data(mixed_data, 'outputs/stratified_mixed_data.jsonl')

均匀采样#

均匀采样是根据schema中每个数据集的个数进行采样,每个数据集的采样数量相同。

例如,整体采样100条数据,schema中有两个数据集,数据集A有800条数据,数据集B有200条数据,那么数据集A的采样数量为50条,数据集B的采样数量为50条。

from evalscope.collections import UniformSampler

sampler = UniformSampler(schema)
mixed_data = sampler.sample(100)
dump_jsonl_data(mixed_data, 'outputs/uniform_mixed_data.jsonl')