【Hugging Face】datasets 库:加载、处理和分享大规模数据集

Hugging Face Datasets 库

Hugging Face 的 datasets 库是一个 轻量级、高性能 的库,用于 加载、处理和分享大规模数据集,特别适用于 自然语言处理(NLP)、计算机视觉(CV)和语音任务


1. 为什么使用 Datasets?

在深度学习中,处理大规模数据集通常面临以下挑战:

  • 数据集太大,无法一次性加载到内存
  • 不同任务的数据格式不统一
  • 数据预处理和转换较慢
  • 需要快速流式加载数据

datasets 库提供了解决方案:

  • 支持数千个开源数据集,可直接加载 Hugging Face Hub 上的数据
  • 流式加载(Streaming),可处理超大规模数据
  • 兼容 PyTorch、TensorFlow、JAX
  • 原生支持 Apache Arrow,加快数据加载
  • 提供强大的数据预处理、切分、格式转换功能

2. 安装 Datasets

可以直接使用 pip 安装:

pip install datasets

3. 主要功能

3.1. 直接加载预训练数据集

from datasets import load_dataset

dataset = load_dataset("imdb")
print(dataset)

输出:

DatasetDict({
    train: Dataset({
        features: ['text', 'label'],
        num_rows: 25000
    })
    test: Dataset({
        features: ['text', 'label'],
        num_rows: 25000
    })
})

这表示 imdb 数据集有 traintest 两个子集,每个样本包含 textlabel


3.2. 访问数据

你可以像操作字典一样访问不同的数据集:

train_data = dataset["train"]
print(train_data[0])  # 访问第一条数据

输出:

{'text': 'This is a great movie!', 'label': 1}

如果要取出所有数据:

texts = dataset["train"]["text"]
labels = dataset["train"]["label"]
print(texts[:5])  # 查看前5条文本

3.3. 过滤和转换数据

如果你只想保留正面评论(label = 1),可以使用 .filter()

positive_reviews = dataset["train"].filter(lambda x: x["label"] == 1)
print(positive_reviews)

如果你想对 text 进行转换,例如变成小写:

dataset = dataset.map(lambda x: {"text": x["text"].lower()})

这样 text 字段的所有内容都会变成小写。


3.4. 数据集切分

你可以手动切分训练和测试数据:

train_test_split = dataset["train"].train_test_split(test_size=0.2)
print(train_test_split)

这样 train_test_split 就会包含 traintest 两部分数据。


3.5. 数据批量加载

如果数据集很大,你可以使用 batch_size 进行批量加载:

dataset = dataset.map(preprocessing_function, batched=True)

这可以大幅加快数据处理速度。


3.6. 数据格式转换

datasets 允许数据集转换成 PyTorch 或 TensorFlow 兼容的格式:

dataset.set_format(type="torch", columns=["text", "label"])

或者:

dataset.set_format(type="tensorflow", columns=["text", "label"])

这样就可以直接用于 PyTorch 或 TensorFlow 训练。


3.7. 流式加载超大数据集

如果数据集太大,无法一次性加载到内存,可以使用 Streaming 模式:

dataset = load_dataset("c4", split="train", streaming=True)
for sample in dataset:
    print(sample)
    break

这样 datasets逐行读取数据,不会占用大量内存。


4. 自定义数据集

如果你有自己的数据集(例如 CSV、JSON、TXT),可以使用 load_dataset 直接加载。

4.1. 加载 CSV 数据

dataset = load_dataset("csv", data_files="my_data.csv")
print(dataset)

4.2. 加载 JSON 数据

dataset = load_dataset("json", data_files="my_data.json")

4.3. 加载本地文本数据

dataset = load_dataset("text", data_files="my_text.txt")

5. 适用于不同任务的数据集

5.1. NLP 任务

可以加载 SQuAD 问答数据集:

dataset = load_dataset("squad")

5.2. 计算机视觉任务

可以加载 CIFAR-10 数据集:

dataset = load_dataset("cifar10")

5.3. 语音任务

可以加载 Common Voice 语音数据集:

dataset = load_dataset("mozilla-foundation/common_voice_11_0", "zh-CN")

6. Hugging Face Datasets 和 PyTorch Dataset 的对比

功能datasetstorch.utils.data.Dataset
直接加载预训练数据集
高效数据预处理
自动流式加载
兼容 PyTorch/TensorFlow
轻松支持大规模数据

如果你使用 PyTorch 的 DatasetDataLoader ,但希望用 datasets 加速,可以这样转换:

from torch.utils.data import DataLoader

dataloader = DataLoader(dataset["train"], batch_size=16, shuffle=True)

7. 总结

  1. datasets 是 Hugging Face 提供的 高效数据加载和处理库,支持 NLP、CV、语音等任务。
  2. 可以直接加载数千个 Hugging Face 预训练数据集,例如 imdbsquadcifar10
  3. 支持 CSV、JSON、TXT 等本地数据格式,可以轻松加载自定义数据集。
  4. 支持 PyTorch 和 TensorFlow,并提供流式加载,适用于超大规模数据。
  5. 提供强大的数据切分、过滤、转换功能,让数据处理变得简单高效。
### 使用Hugging Face Datasets处理数据集 #### 加载本地或远程数据集 对于未托管于Hugging Face Hub上的自定义数据集,可以通过`datasets.load_dataset()`函数指定路径来加载。此方法同样适用于从网络链接获取资源[^1]。 ```python from datasets import load_dataset # 加载本地CSV文件作为数据集 dataset = load_dataset('csv', data_files='./data/myfile.csv') ``` #### 数据集切片操作 为了高效地对大型数据集执行筛选、转换等预处理工作,可利用内置API实现灵活的数据子集选取功能。即使面对超大规模数据源也能够保持流畅体验。 ```python import pandas as pd from datasets import DatasetDict, Dataset def filter_by_length(example): return len(example['text']) > 50 filtered_ds = dataset.filter(filter_by_length) # 或者使用Pandas DataFrame方式快速浏览前几条记录 df = filtered_ds.to_pandas() print(df.head()) ``` #### 处理海量数据集 针对那些可能超出个人计算机物理内存容量限制的大规模数据集合,推荐采用流式读取模式(streaming mode),这样可以在遍历过程中按需加载必要部分而无需一次性全部驻留于RAM之中[^3]。 ```python streaming_dataset = load_dataset('oscar', 'unshuffled_deduplicated_en', split='train', streaming=True) for sample in streaming_dataset.take(5): # 只取出并打印前五个样本用于测试目的 print(sample) ``` #### 创建新数据集并向Hub推送 完成自有数据整理后,还可以借助工具链轻松构建结构化的Dataset对象,并将其分享至社区平台供他人复用。 ```bash huggingface-cli login ``` ```python new_dataset.save_to_disk('./my_custom_dataset') # 将创建好的数据保存到磁盘上某个位置 repo_url = new_dataset.push_to_hub("username/new-dataset-name") # 推送到远端仓 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值