求助:Hugging Face用split参数仍无法仅下载部分数据集
解决MLCommons/peoples_speech数据集部分下载的问题
你遇到的问题是因为MLCommons/peoples_speech数据集采用分片存储,直接使用split="train[:10%]"会先下载所有分片文件再执行切片操作,所以无法实现仅下载部分数据的需求。以下是两种可行的解决方案:
方案1:流式加载并截取样本
通过streaming=True参数启用流式加载,此时数据集不会一次性下载到本地,而是按需获取样本,再通过take()方法截取指定比例的样本:
from datasets import load_dataset # 流式加载训练集,截取前10%样本 train_stream = load_dataset("MLCommons/peoples_speech", "clean", split="train", streaming=True) # 获取总样本数并计算10%的数量 train_sample_count = int(len(train_stream) * 0.1) train = train_stream.take(train_sample_count) # 测试集同理操作 test_stream = load_dataset("MLCommons/peoples_speech", "clean", split="test", streaming=True) test_sample_count = int(len(test_stream) * 0.1) test = test_stream.take(test_sample_count)
如果需要将流式数据集转换为可离线使用的普通数据集,可以再执行:
from datasets import Dataset train = Dataset.from_list(list(train)) test = Dataset.from_list(list(test))
方案2:手动指定要下载的分片文件
先查看数据集的分片文件列表,然后选择部分分片下载,避免下载全部文件:
- 先获取数据集的分片信息:
from datasets import get_dataset_infos # 获取数据集的详细信息 dataset_info = get_dataset_infos("MLCommons/peoples_speech", "clean") # 打印训练集的所有分片文件路径 print(dataset_info["train"].splits["train"].data_files)
- 根据输出的文件列表,选择部分分片加载(比如前2个分片):
train = load_dataset( "MLCommons/peoples_speech", "clean", split="train", data_files=dataset_info["train"].splits["train"].data_files[:2] ) test = load_dataset( "MLCommons/peoples_speech", "clean", split="test", data_files=dataset_info["train"].splits["test"].data_files[:2] )
这种方式可以精准控制下载的文件数量,适合需要固定大小数据的场景。
内容的提问来源于stack exchange,提问作者FOXASDF
相关产品推荐
相关产品推荐

