我正在尝试构建一个 datasetDictionary 对象来在 PyTorch 上训练 QA 模型。我有这两个不同的数据集:
test_dataset
Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 21489
})
和
train_dataset
Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 54159
})
在数据集的文档中我没有找到任何东西。我是个菜鸟,因此解决方案可能非常简单。我希望获得的是这样的:
dataset
DatasetDict({
train: Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 54159
})
test: Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 21489
})
})
我真的不知道如何使用两个数据集来创建dataserDict或如何设置键。此外,我希望将训练集“切割”为两部分:训练集和验证集,但这段话对我来说很难处理。最终结果应该是这样的:
dataset
DatasetDict({
train: Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 54159 - x
})
validation: Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: x
})
test: Dataset({
features: ['answer_text', 'answer_start', 'title', 'context', 'question', 'answers', 'id'],
num_rows: 21489
})
})
提前感谢您,请原谅我是个菜鸟:)
要获取验证数据集,您可以这样做:
train_dataset, validation_dataset= train_dataset.train_test_split(test_size=0.1).values()
此函数会将训练数据集的 10% 划分为验证数据集。
要获取“DatasetDict”,你可以这样做:
import datasets
dd = datasets.DatasetDict({"train":train_dataset,"test":test_dataset})
为了子孙后代;) 添加有关答案的更多信息。
from datasets.dataset_dict import DatasetDict
from datasets import Dataset
d = {'train':Dataset.from_dict({'label':y_train,'text':x_train}),
'val':Dataset.from_dict({'label':y_val,'text':x_val}),
'test':Dataset.from_dict({'label':y_test,'text':x_test})
}
DatasetDict(d)
我在创建直接从 csv 文件加载数据的 DatasetDict 时解决了类似的问题。 正如文档所述,只需要像这样加载文件:
from datasets import load_dataset
dataset = load_dataset('csv', data_files='my_file.csv')
如果有人需要加载多个 csv 文件也是可能的。
之后,按照@Lin的建议,通过训练集和验证集进行分割的简单方法如下
train_dataset, validation_dataset= dataset['train'].train_test_split(test_size=0.1).values()
最后,像这样设置DatasetDict:
dataset = DatasetDict({'train': train_dataset, 'val': validation_dataset})
根据@Saha Millis的回答,我设法将两个不同的jsonl文件组合成一个DatasetDict,如下所示:
test = load_dataset('json', data_files='file1.jsonl')
train = load_dataset('json', data_files='file2.jsonl')
dataset = DatasetDict({'train':train['train'], 'test':test['train']})