采样你的指数数据#

一句话:基于已定义的 Collection Schema,将多个数据集按指定策略抽样生成一个混合 JSONL,用于一次性统一评测。

产出物#

  • 单一 JSONL 文件(混合样本),用于后续 evalscope eval

  • 每行代表一个标准化后的样本。

字段说明#

字段

说明

index

样本序号(在混合集中重新编号)

prompt

原始输入结构(可能包含 question / context / code 等)

tags

合并的标签(数据集自身 + 上层层级)

task_type

任务类型或能力分类

weight

叶子节点归一化权重(用于解释,不等于实际样本重复权重)

dataset_name

原始数据集名称

subset_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"
}

三种采样策略(公式与适用场景)#

设:

  • 总采样量:\(N\)

  • 数据集数:\(K\)

  • Schema 权重:\(w_i\)

  • 数据集原始样本量:\(m_i\)

1. 加权采样 (Weighted)#

公式(期望样本数): $\( n_i \approx N \cdot \frac{w_i}{\sum_{j=1}^{K} w_j} \)$ 适用:你已经用权重表达业务优先级,希望“高权重能力”占更多资源。
特点:强化价值观;若某数据集权重远大,会显著占比。

2. 分层采样 (Stratified)#

公式: $\( n_i \approx N \cdot \frac{m_i}{\sum_{j=1}^{K} m_j} \)$ 适用:保留原始分布(例如让语料规模大的数据集更具代表性)。
特点:不体现业务倾向;避免过度放大小数据集。至少保证每个数据集 ≥1 样本。

3. 均匀采样 (Uniform)#

公式: $\( n_i \approx \frac{N}{K} \)$ 适用:希望各能力“平均发声”,便于模型在各能力上的对齐对比。
特点:忽略原始规模与权重;让结果更容易比较单项能力短板。

策略选择建议:

  • 做“业务决策指数”:Weighted

  • 做“客观覆盖 / 保持语料结构”:Stratified

  • 做“能力对齐 / 诊断”:Uniform

前置示例 Schema#

from evalscope.collections import CollectionSchema, DatasetInfo  

schema = CollectionSchema(
    name='reasoning_index',
    datasets=[
        DatasetInfo(name='arc', weight=2.0, task_type='reasoning', tags=['en']),
        DatasetInfo(name='ceval', weight=3.0, task_type='reasoning', tags=['zh'], args={'subset_list': ['logic']}),
    ],
)

加权采样(突出业务重要性)#

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

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

预期:arc : ceval ≈ 2 : 3 → 4 : 6

分层采样(保持源数据规模分布)#

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

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

预期:按各数据集原始样本量近似分配(示例:若 arc=2000, ceval=10 → 约 9 : 1)

均匀采样(对齐能力对比)#

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

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

预期:arc : ceval = 5 : 5

常见问题#

  • 权重不影响 Uniform / Stratified 分配(仅 Weighted 使用)。

  • 某数据集样本过少:分层采样会强制至少 1 条,继续扩大 N 或改用 Weighted。

  • JSONL 中的 weight 字段为叶子归一化权重,不等于该样本出现概率(分层与均匀策略下尤是)。