🤗 Datasets 是一个轻量级库,提供了两个主要功能:
- 适用于许多公共数据集的一行代码数据加载器:通过一行代码即可下载和预处理 Hugging Face Datasets Hub 上提供的主要公共数据集(图像数据集、音频数据集、467种语言和方言的文本数据集等)。使用简单的命令如
squad_dataset = load_dataset("squad")
,可以将任何这些数据集准备好用于训练/评估机器学习模型的数据加载器(Numpy/Pandas/PyTorch/TensorFlow/JAX), - 高效的数据预处理:为公共数据集以及您自己本地的CSV、JSON、文本、PNG、JPEG、WAV、MP3、Parquet等数据集提供简单、快速且可重复的数据预处理。使用如
processed_dataset = dataset.map(process_example)
的简单命令,能够高效地准备数据集以进行检查和机器学习模型评估和训练。
🎓 文档 🔎 在Hub中查找数据集 🌟 在Hub上分享数据集
🤗 Datasets 被设计为让社区轻松添加和分享新数据集。
🤗 Datasets 具有许多其他有趣的功能:
- 处理大数据集:🤗 Datasets 自然解除用户的内存限制,所有数据集都使用高效的零序列化成本后端(Apache Arrow)进行内存映射。
- 智能缓存:避免多次等待数据处理。
- 轻量级且快速,具有透明且 python 风格的 API(多进程/缓存/内存映射)。
- 与 NumPy、pandas、PyTorch、TensorFlow 2 和 JAX 的内置互操作性。
- 原生支持音频和图像数据。
- 启用流模式以节省磁盘空间并立即开始遍历数据集。
🤗 Datasets 源自于令人敬仰的 TensorFlow Datasets 的一个分支,Hugging Face 团队深表感谢 TensorFlow Datasets 团队构建了这个了不起的库。更多关于 🤗 Datasets 和 tfds
之间区别的细节可以在章节🤗 Datasets 和 tfds
之间的主要区别 中找到。
安装
使用 pip
🤗 Datasets 可以从 PyPi 安装,并且需要在虚拟环境中安装(例如 venv 或 conda)
pip install datasets
使用 conda
🤗 Datasets 可以通过 conda 安装如下:
conda install -c huggingface -c conda-forge datasets
请跟随 TensorFlow 和 PyTorch 的安装页面查看如何通过 conda 安装它们。
更多关于安装的细节,请查看文档中的安装页面:https://huggingface.co/docs/datasets/installation
用于 PyTorch/TensorFlow/pandas 的安装
如果你计划将 🤗 Datasets 与 PyTorch (1.0+)、TensorFlow (2.2+) 或 pandas 一起使用,你也应该安装 PyTorch、TensorFlow 或 pandas。
更多关于如何与 NumPy、pandas、PyTorch 或 TensorFlow 一起使用该库的详细信息,请查看文档中的快速入门页面:https://huggingface.co/docs/datasets/quickstart
使用
🤗 Datasets 设计为非常简单使用 - API 以单个函数为中心,datasets.load_dataset(dataset_name, **kwargs)
,该函数实例化一个数据集。
该库可用于文本/图像/音频等数据集。以下是加载一个文本数据集的示例:
下面是一个快速示例:
from datasets import load_dataset
# 打印所有可用的数据集
from huggingface_hub import list_datasets
print([dataset.id for dataset in list_datasets()])
# 加载一个数据集并打印训练集中第一个示例
squad_dataset = load_dataset('squad')
print(squad_dataset['train'][0])
处理数据集 - 添加一个包含上下文文本长度的列 dataset_with_length = squad_dataset.map(lambda x: {"length": len(x["context"])})
处理数据集 - 对上下文文本进行标记化(使用来自 🤗 Transformers 库的标记化器) 来自 transformers 导入 AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('bert-base-cased')
tokenized_dataset = squad_dataset.map(lambda x: tokenizer(x['context']), batched=True)
如果您的数据集大于磁盘容量或不想等待下载数据,可以使用流媒体:
如果您想立即使用数据集并在遍历数据集时高效地流式传输数据 image_dataset = load_dataset('cifar100', streaming=True) for example in image_dataset["train"]: break
有关使用该库的更多详细信息,请查看文档中的快速开始页面:https://huggingface.co/docs/datasets/quickstart 以及以下具体页面:
- 加载数据集:https://huggingface.co/docs/datasets/loading
- 数据集中包含的内容:https://huggingface.co/docs/datasets/access
- 使用 🤗 Datasets 处理数据:https://huggingface.co/docs/datasets/process
- 流式传输数据集:https://huggingface.co/docs/datasets/stream
- 编写自己的数据集加载脚本:https://huggingface.co/docs/datasets/dataset_script
- 等等。
向 Hub 添加新的数据集
我们提供了非常详细的逐步指南以向 HuggingFace Datasets Hub 添加新的数据集:
您可以找到:
🤗 Datasets 和 tfds
的主要区别
如果您熟悉 TensorFlow Datasets,这里是 🤗 Datasets 和 tfds
的主要区别:
- 🤗 Datasets 中的脚本不在库内提供,而是在请求时查询、下载/缓存和动态加载的
- 🤗 Datasets 的后端序列化基于 Apache Arrow 而不是 TF Records,并且利用 Python 数据类记录信息和特性,其中一些功能有所不同(我们大多数情况下不进行编码并尽可能多地在后端序列化缓存中存储原始数据)
- 🤗 Datasets 的用户界面数据集对象不是
tf.data.Dataset
,而是一个内置的框架无关的数据集类,其方法受到了我们喜欢的tf.data
的启发(比如map()
方法)。它基本上包装了一个内存映射的 Arrow 表缓存。
免责声明
🤗 Datasets 可能会运行由数据集作者定义的 Python 代码,以解析某些数据格式或结构。出于安全原因,我们要求用户:
- 预先检查他们将要运行的数据集脚本
- 固定他们使用的存储库的
revision
如果您是数据集所有者并希望更新其任何部分(描述、引用、许可证等),或不希望您的数据集包含在 Hugging Face Hub 中,请通过在数据集页面的社区标签中打开讨论或拉取请求与我们联系。感谢您对机器学习社区的贡献!
BibTeX
如果您想引用我们的 🤗 Datasets 库,可以使用我们的论文:https://arxiv.org/abs/2109.02846:
@inproceedings{lhoest-etal-2021-datasets,
title = "Datasets: A Community Library for Natural Language Processing",
author = "Lhoest, Quentin and
Villanova del Moral, Albert and
Jernite, Yacine and
Thakur, Abhishek and
von Platen, Patrick and
Patil, Suraj and
Chaumond, Julien and
Drame, Mariama and
Plu, Julien and
Tunstall, Lewis and
Davison, Joe and
{\v{S}}a{\v{s}}ko, Mario and
Chhablani, Gunjan and
Malik, Bhavitvya and
Brandeis, Simon and
Le Scao, Teven and
Sanh, Victor and
Xu, Canwen and
Patry, Nicolas and
McMillan-Major, Angelina and
Schmid, Philipp and
Gugger, Sylvain and
Delangue, Cl{\'e}ment and
Matussi{\`e}re, Th{\'e}o and
Debut, Lysandre and
Bekman, Stas and
Cistac, Pierric and
Goehringer, Thibault and
Mustar, Victor and
Lagunas, Fran{\c{c}}ois and
Rush, Alexander and
Wolf, Thomas",
booktitle = "Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing: System Demonstrations",
month = nov,
year = "2021",
address = "Online and Punta Cana, Dominican Republic",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.emnlp-demo.21",
pages = "175--184",
abstract = "The scale, variety, and quantity of publicly-available NLP datasets has grown rapidly as researchers propose new tasks, larger models, and novel benchmarks. Datasets is a community library for contemporary NLP designed to support this ecosystem. Datasets aims to standardize end-user interfaces, versioning, and documentation, while providing a lightweight front-end that behaves similarly for small datasets as for internet-scale corpora. The design of the library incorporates a distributed, community-driven approach to adding datasets and documenting usage. After a year of development, the library now includes more than 650 unique datasets, has more than 250 contributors, and has helped support a variety of novel cross-dataset research projects and shared tasks. The library is available at https://github.com/huggingface/datasets.",
eprint={2109.02846},
archivePrefix={arXiv},
primaryClass={cs.CL},
}
如果您需要引用我们的 🤗 Datasets 库的特定版本以确保可重复性,可以使用此 列表 中相应版本的 Zenodo DOI。