datasets
库是Hugging Face平台的,用于轻松访问和共享用于音频、计算机视觉和自然语言处理任务的数据集的库。该库整合、规范出了一种简单的方式来加载、处理和使用数据。以下是使用datasets
库加载数据方法总结:load_dataset()
方法。
load_dataset()
是Hugging Face的datasets
库中的一个核心函数,可以从各种来源加载数据集,返回Dataset对象或DatasetDict对象。以下是一些常见的使用方法:
-
从远程仓库加载:这是最常见的使用方式,只需要提供数据集的名称即可,在能正常访问huggingface的情况下简单易行。例如,加载
rotten_tomatoes
数据集和加载cnn_dailymail
数据集:from datasets import load_dataset dataset = load_dataset("rotten_tomatoes") # 有些数据集区分了【子集】的概念(称作版本或配置),对于这类数据集,需要在后面声明加载哪一个子集。 from datasets import load_dataset dataset = load_dataset("cnn_dailymail", "3.0.0")
-
如果不指明参数
split
,则返回DatasetDict对象,所有的split(如:train、validation、test)一起返回。如上例的rotten_tomatoes
数据集返回结果。DatasetDict({
train: Dataset({
features: [‘text’, ‘label’],
num_rows: 8530
})
validation: Dataset({
features: [‘text’, ‘label’],
num_rows: 1066
})
test: Dataset({
features: [‘text’, ‘label’],
num_rows: 1066
})
}) -
如果指明split参数
split
,则返回Dataset对象,为具体的split。如:from datasets import load_dataset dataset = load_dataset("rotten_tomatoes", split="train")
Dataset({
features: [‘text’, ‘label’],
num_rows: 8530
})
-
-
从本地文件加载:根据本地文件的格式而异。
-
JSON文件:如果格式为JSON文件,则使用
load_dataset()
按如下方式来加载它。from datasets import load_dataset dataset = load_dataset('json', data_files='path_to_file.json')
默认会把所有样本作为训练集。json中所有出现过的键构成这个返回的Dataset对象的features属性。
DatasetDict({
train: Dataset({
features: [‘content’, ‘basename’, ‘article’, ‘summary’, ‘result’],
num_rows: 160
})
}) -
CSV文件:如果格式为CSV文件,则使用
load_dataset()
按如下方式来加载它。from datasets import load_dataset dataset = load_dataset('csv', data_files='path_to_file.csv')
-
Arrow文件:Arrow文件是
datasets
库的默认存储格式,加载它们会非常快速。from datasets import load_dataset dataset = load_dataset('path_to_file.arrow')
可以以字典的形式赋值给
data_files参数
,来自由定义返回DatasetDict对象的split
。一般地,大多以arrow格式存储的数据集,会很规范地将3个split分为3个文件,如:数据集
cnn_dailymail
的文件分为了cnn_dailymail-train.arrow
,cnn_dailymail-validation.arrow
,cnn_dailymail-test.arrow
三部分。arrow_dir_cnndm = r'D:\datasets\cnn_dailymail\3.0.0' from datasets import load_dataset import os dataset = load_dataset(path=arrow_dir_cnndm, data_files= {'train': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-train.arrow'), 'validation': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-validation.arrow'), 'test': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-test.arrow')})
DatasetDict({
train: Dataset({
features: [‘article’, ‘highlights’, ‘id’],
num_rows: 287113
})
validation: Dataset({
features: [‘article’, ‘highlights’, ‘id’],
num_rows: 13368
})
test: Dataset({
features: [‘article’, ‘highlights’, ‘id’],
num_rows: 11490
})
})
-
最后分析一下我整理datasets加载方法的初衷:笔者在服务器上复现代码时,便出现了
dataset = load_dataset("cnn_dailymail", "3.0.0")
然而学校的服务器因某种原因,不能在代码中远程访问huggingface,因而整个程序便会卡在这行代码。
为了顺利将实验进行下去,笔者不得不先将自己的本地电脑执行此代码,获得cnn_dailymail
的本地文件。而后将文件传输至服务器,再在服务器上通过load_dataset()
本地加载的方式顺利执行了下去。
arrow_dir_cnndm = './data/cnn_dailymail/3.0.0'
dataset = load_dataset(path=arrow_dir_cnndm, data_files=
{'train': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-train.arrow'),
'validation': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-validation.arrow'),
'test': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-test.arrow')})
修改后的代码与原代码得到的dataset
效果一模一样!最终得以过了这一关。
笔者非常喜欢huggingface提供的transformer库
和datasets库
,最主要的原因便在于,它们将各式各样的模型和数据,在格式上和加载方式上实现了规范统一,我只需要记住几行模板,而后便能轻松加载各类模型和数据,不会将大把时间浪费在查看浩如烟海的API或者接口文档上。非常感谢huggingface提供的便利!