加载文本数据集
Linux
Ascend
GPU
CPU
数据准备
初级
中级
高级
概述
MindSpore提供的mindspore.dataset
模块可以帮助用户构建数据集对象,分批次地读取文本数据。同时,在各个数据集类中还内置了数据处理和数据分词算子,使得数据在训练过程中能够像经过pipeline管道的水一样源源不断地流向训练系统,提升数据训练效果。
此外,MindSpore还支持分布式场景数据加载,用户可以在加载数据集时指定分片数目,具体用法参见数据并行模式加载数据集。
下面,本教程将简要演示如何使用MindSpore加载和处理文本数据。
准备
准备文本数据如下。
Welcome to Beijing! 北京欢迎您! 我喜欢English!
创建
tokenizer.txt
文件并复制文本数据到该文件中,将该文件存放在./test
路径中,目录结构如下。└─test └─tokenizer.txt
导入
mindspore.dataset
和mindspore.dataset.text
模块。import mindspore.dataset as ds import mindspore.dataset.text as text
加载数据集
MindSpore目前支持加载文本领域常用的经典数据集和多种数据存储格式下的数据集,用户也可以通过构建自定义数据集类实现自定义方式的数据加载。各种数据集的详细加载方法,可参考编程指南中数据集加载章节。
下面演示使用mindspore.dataset
中的TextFileDataset
类加载数据集。
配置数据集目录,创建数据集对象。
DATA_FILE = "./test/tokenizer.txt" dataset = ds.TextFileDataset(DATA_FILE, shuffle=False)
创建迭代器,通过迭代器获取数据。
for data in dataset.create_dict_iterator(output_numpy=True): print(text.to_str(data['text']))
获取到分词前的数据:
Welcome to Beijing! 北京欢迎您! 我喜欢English!
数据处理
MindSpore目前支持的数据处理算子及其详细使用方法,可参考编程指南中数据处理章节。
在生成dataset
对象后可对其进行数据处理操作,比如SlidingWindow
、shuffle
等。
SlidingWindow
下面演示使用
SlidingWindow
对文本数据进行切片操作。加载数据集。
inputs = [["大", "家", "早", "上", "好"]] dataset = ds.NumpySlicesDataset(inputs, column_names=["text"], shuffle=False)
原始数据输出效果。
for data in dataset.create_dict_iterator(output_numpy=True): print(text.to_str(data['text']).tolist())
输出结果如下:
['大', '家', '早', '上', '好']
执行操作。
dataset = dataset.map(operations=text.SlidingWindow(2, 0), input_columns=["text"])
执行之后输出效果。
for data in dataset.create_dict_iterator(output_numpy=True): print(text.to_str(data['text']).tolist())
输出结果如下:
[['大', '家'], ['家', '早'], ['早', '上'], ['上', '好']]
shuffle
下面演示在加载数据集时使用
shuffle
对文本数据进行混洗操作。加载数据集。
inputs = ["a", "b", "c", "d"] dataset = ds.NumpySlicesDataset(inputs, column_names=["text"], shuffle=True)
数据输出效果。
for data in dataset.create_dict_iterator(output_numpy=True): print(text.to_str(data['text']).tolist())
输出结果如下:
c a d b
数据分词
MindSpore目前支持的数据分词算子及其详细使用方法,可参考编程指南中分词器章节。
下面演示使用WhitespaceTokenizer
分词器来分词,该分词是按照空格来进行分词。
创建
tokenizer
。tokenizer = text.WhitespaceTokenizer()
执行操作
tokenizer
。dataset = dataset.map(operations=tokenizer)
创建迭代器,通过迭代器获取数据。
for i in dataset.create_dict_iterator(num_epochs=1, output_numpy=True): token = text.to_str(i['text']).tolist() print(token)
获取到分词后的数据:
['Welcome', 'to', 'Beijing!'] ['北京欢迎您!'] ['我喜欢English!']