load_dataset 这个函数最常见、最强大的来源是 Hugging Face datasets 库,这个库提供了访问数千个数据集的便捷方式,是自然语言处理 领域事实上的标准工具之一。

下面我将分为几个部分来解释:
- 核心介绍:Hugging Face
datasets库 - 基本用法:加载数据集
- 常用参数和功能
- 数据处理和探索
- 其他来源的
load_dataset - 总结与最佳实践
核心介绍:Hugging Face datasets 库
Hugging Face datasets 库是一个快速、易用且功能强大的工具,用于访问和共享数据集,它的主要优点包括:
- 海量数据集:通过其 Hub,你可以轻松加载超过 10,000 个 NLP 数据集,以及越来越多的计算机视觉、音频等领域的多模态数据集。
- 高效处理:数据集被设计为“内存映射”文件,即使数据集比你的可用内存大得多,也能高效处理,它还支持流式加载,可以逐条处理数据,而无需一次性加载全部。
- 标准化 API:所有数据集都提供统一的 API,加载、访问、处理和分批数据的方式都非常一致。
- 内置功能:自动处理数据清洗、分词、格式转换等繁琐步骤。
基本用法:加载数据集
你需要安装这个库:
pip install datasets
你就可以用一行代码加载数据集了,最简单的用法是只提供数据集的名称。

示例1:加载一个经典的数据集(如 imdb 电影评论情感分析数据集)
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
})
unsupervised: Dataset({
features: ['text', 'label'],
num_rows: 25000
})
})
从输出可以看出,load_dataset 返回一个 DatasetDict 对象,它包含多个 Dataset 对象(通常是 train, test, validation 等)。
示例2:访问数据集中的样本
你可以像访问字典一样访问数据集中的数据。
# 访问训练集中的第一个样本 first_sample = dataset['train'][0] print(first_sample)
输出:

{'text': "I watched this movie for 10 minutes and could not stand it anymore. The plot is just plain bad, the acting is mediocre and the whole thing looks like a cheap TV soap opera. I gave this movie a 1 out of 10 because I am a very forgiving person, but really it deserves a 0. I can't understand why anyone would like this movie. It's just plain bad. I have seen better acting in a kindergarten play. The only good thing I can say about this movie is that it is not as bad as some other movies I have seen, but that's not saying much. Avoid this movie at all costs.", 'label': 0}
常用参数和功能
load_dataset 函数提供了许多有用的参数。
split 参数:指定加载哪个子集
默认情况下,它会加载所有子集,如果你只需要训练集或测试集,可以使用 split 参数。
# 只加载训练集
train_dataset = load_dataset("imdb", split="train")
# 只加载测试集的前1000个样本
small_test_dataset = load_dataset("imdb", split="test[:1000]")
# 只加载验证集的最后500个样本
val_dataset = load_dataset("imdb", split="validation[-500:]")
# 加载训练集和测试集,但不加载unsupervised
train_test_dataset = load_dataset("imdb", split=["train", "test"])
print(type(train_test_dataset)) # <class 'list'>
data_dir 和 data_files 参数:加载本地文件
如果你有自己的数据文件(如 CSV, JSON, TXT),可以使用这两个参数。
假设你有一个本地目录 my_local_data,结构如下:
my_local_data/
├── train.csv
├── test.csv
Python 代码:
# 使用 data_dir 指定目录
# load_dataset("csv", data_dir="my_local_data")
# 或者使用 data_files 明确指定文件路径
local_dataset = load_dataset("csv", data_files={"train": "my_local_data/train.csv", "test": "my_local_data/test.csv"})
print(local_dataset)
cache_dir 参数:指定缓存路径
datasets 库会自动下载并缓存数据集,以便下次加载时更快,你可以使用 cache_dir 指定缓存位置。
dataset = load_dataset("imdb", cache_dir="./my_cache")
数据处理和探索
加载数据后,通常需要进行一些预处理。
map 方法:应用函数到数据集
map 方法是 datasets 库的核心功能之一,它允许你对数据集中的每个样本应用一个函数。
from datasets import load_dataset
dataset = load_dataset("imdb")
# 定义一个预处理函数,将文本转换为大写
def to_uppercase(example):
example['text'] = example['text'].upper()
return example
# 使用 map 函数将这个函数应用到整个训练集
# batched=True 表示函数会批量处理数据,效率更高
dataset = dataset.map(to_uppercase, batched=True)
# 查看处理后的第一个样本
print(dataset['train'][0]['text'][:100] + "...")
set_format 方法:转换为 PyTorch/TensorFlow 张量
如果你想将数据集直接用于 PyTorch 或 TensorFlow,可以设置其格式。
import torch # 将数据集的格式设置为 PyTorch 张量 # columns 参数指定哪些列需要转换为张量 dataset.set_format(type="torch", columns=["text", "label"]) # 现在可以直接访问张量 sample = dataset['train'][0] print(sample['text'].shape) # 注意:文本数据通常还不是张量,需要先分词 print(sample['label']) # label 已经是标量张量
注意:上面的 text 列还不是张量,因为它还是字符串,在实际应用中,你需要使用 Hugging Face 的 Tokenizer 将文本转换为数字 ID。
cast_column 方法:转换列的数据类型
# 将 label 列从 int64 转换为 int32
dataset = dataset.cast_column("label", "int32")
其他来源的 load_dataset
虽然 Hugging Face 的版本是最主流的,但其他库也可能有同名或类似功能的函数。
sklearn.datasets
Scikit-learn 库也有自己的数据加载函数,但通常不叫 load_dataset,而是更具体的名称,如 load_iris, load_digits, load_breast_cancer 等。
from sklearn.datasets import load_iris # sklearn 的加载方式 iris_data = load_iris() # 它返回的是一个类似字典的对象,而不是 Hugging Face 的 DatasetDict print(iris_data.keys()) print(iris_data.data.shape)
torchvision.datasets
PyTorch 的 torchvision 库也提供了许多计算机视觉数据集的加载函数。
from torchvision import datasets # torchvision 的加载方式 mnist_data = datasets.MNIST(root='./data', train=True, download=True) # 它返回的是一个 torch.utils.data.Dataset 对象 print(len(mnist_data)) # 一个样本是 (image, label) 的元组 image, label = mnist_data[0] print(image.size(), label)
重要区别:
- Hugging Face
datasets:现代、高效、API 统一,尤其适合大规模数据和 NLP。 sklearn/torchvision:更传统,与各自的机器学习框架深度集成,适合中小规模数据和特定领域的经典数据集。
总结与最佳实践
| 特性 | Hugging Face datasets |
sklearn.datasets / torchvision.datasets |
|---|---|---|
| 主要用途 | NLP, 多模态,大规模数据集 | 机器学习,计算机视觉,经典小数据集 |
| 核心对象 | DatasetDict, Dataset |
字典, Dataset (PyTorch), Bunch (sklearn) |
| 内存效率 | 非常高 (内存映射, 流式加载) | 较低 (通常全部加载到内存) |
| API 一致性 | 非常高 (所有数据集 API 相同) | 较低 (不同数据集加载函数不同) |
| 生态系统 | 与 transformers, tokenizers 紧密集成 |
与 sklearn, torch 模型紧密集成 |
最佳实践建议:
- 优先使用
datasets.load_dataset:特别是当你处理 NLP 任务或需要处理大型数据集时,它是目前最灵活、最高效的选择。 - 熟悉
DatasetDict和Dataset:理解它们是datasets库操作的基础。 - 善用
map和set_format:这是进行数据预处理和与深度学习框架(PyTorch/TensorFlow)集成的关键。 - 查看官方文档:Hugging Face 的文档非常完善,当你遇到问题时,官方文档 是最好的资源。
