如何使用Hugging Face load_dataset按比例加载部分数据集?
问题原因
split参数的切片逻辑是全量数据集下载到本地后才执行的筛选操作,不会限制下载阶段的文件大小,所以你还是会先拉取完整29GB的归档包,导致空间不足崩溃- 你传入的第二个参数
'clean'是LibriSpeech的clean合集配置,本身包含train.100、train.360、validation、test四个子拆分的全部数据,下载阶段会把这四个子拆分的归档全部拉取,额外产生很多你不需要的下载量
正确实现方式
方案1:启用流式加载(最适合Colab小空间场景)
不需要下载完整数据集,直接按需流式读取数据,不会占用本地磁盘空间,代码如下:
from datasets import load_dataset # 加streaming=True参数启用流式加载 dataset = load_dataset("librispeech_asr", 'clean', split=['train.360[:50%]', 'validation'], streaming=True)
流式加载得到的数据集可以像普通数据集一样迭代读取,唯一区别是不能用随机下标访问,需要迭代遍历或者用take()方法取指定条数。
方案2:单独指定需要的子拆分配置,避免下载冗余数据
如果你确实需要下载到本地,可以不用clean合集配置,直接指定你需要的子拆分对应的独立配置,只下载对应拆分的归档再做切片:
from datasets import load_dataset # 分别下载train.360的50%和validation拆分,只会拉取对应两个拆分的归档,不会下载train.100、test等冗余数据 train_set = load_dataset("librispeech_asr", "train.360", split="train[:50%]") val_set = load_dataset("librispeech_asr", "validation", split="validation")
这种方式下载的总大小只有train.360全量(18GB)的一半+validation全量(1GB),总共10GB左右,远小于全量clean合集的30GB。
内容的提问来源于stack exchange,提问作者dev1ce
相关产品推荐
相关产品推荐

