如何在HuggingFace Dataset中创建4个自定义拆分?
如何在Hugging Face数据集仓库中创建自定义拆分(alpha/beta/delta/gamma)
我有4个结构一致、数据量相同但内容不同的JSON文件,上传到Hugging Face数据集仓库后,尝试过直接放根目录、改名、分文件夹,结果都被自动合并成一个train拆分。现在想加载时得到包含alpha、beta、delta、gamma四个自定义拆分的DatasetDict,不想创建多个独立仓库,解决方案如下:
核心方案:自定义数据集加载脚本
通过在仓库根目录添加加载脚本,明确指定每个拆分对应的文件,让Hugging Face按照你定义的规则加载数据集,而非自动合并。
1. 创建加载脚本dataset.py
在仓库根目录新建dataset.py,写入以下代码:
from datasets import DatasetDict, load_dataset def _load_custom_splits(): # 自定义拆分与对应JSON文件的映射 split_file_map = { "alpha": "data-1.json", "beta": "data-2.json", "delta": "data-3.json", "gamma": "data-4.json" } dataset_dict = DatasetDict() for split_name, file_path in split_file_map.items(): # 加载单个文件作为一个独立拆分 dataset_dict[split_name] = load_dataset("json", data_files=file_path, split="train") return dataset_dict # 适配load_dataset调用逻辑 def load_dataset(**kwargs): return _load_custom_splits()
2. 整理仓库目录结构
确保仓库文件结构如下:
my-dataset/ ├── data-1.json ├── data-2.json ├── data-3.json ├── data-4.json └── dataset.py
3. 测试加载效果
运行以下代码即可得到目标DatasetDict:
from datasets import load_dataset ds = load_dataset("myusername/my-dataset") print(ds)
输出结果:
DatasetDict({ alpha: Dataset({ features: ['translation'], num_rows: 137991 }), beta: Dataset({ features: ['translation'], num_rows: 137991 }), delta: Dataset({ features: ['translation'], num_rows: 137991 }), gamma: Dataset({ features: ['translation'], num_rows: 137991 }) })
替代方案:使用YAML配置文件
如果不想写Python脚本,可在仓库根目录创建config.yaml文件:
splits: - name: alpha data_files: data-1.json - name: beta data_files: data-2.json - name: delta data_files: data-3.json - name: gamma data_files: data-4.json
加载时需指定数据目录:
ds = load_dataset("myusername/my-dataset", data_dir="./")
不过脚本方式更稳定,其他用户无需额外参数即可直接加载到自定义拆分。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

