赞
踩
Field 包含一写文本处理的通用参数的设置,同时还包含一个词典对象,可以把文本数据表示成数字类型,进而可以把文本表示成需要的tensor类型
参数 sequential: 是否把数据表示成序列,如果是False, 不能使用分词 默认值: True. use_vocab: 是否使用词典对象. 如果是False 数据的类型必须已经是数值类型. 默认值: True. init_token: 每一条数据的起始字符 默认值: None. eos_token: 每条数据的结尾字符 默认值: None. fix_length: 修改每条数据的长度为该值,不够的用pad_token补全. 默认值: None. tensor_type: 把数据转换成的tensor类型 默认值: torch.LongTensor. preprocessing:在分词之后和数值化之前使用的管道 默认值: None. postprocessing: 数值化之后和转化成tensor之前使用的管道默认值: None. lower: 是否把数据转化为小写 默认值: False. tokenize: 分词函数. 默认值: str.split. include_lengths: 是否返回一个已经补全的最小batch的元组和和一个包含每条数据长度的列表 . 默认值: False. batch_first: Whether to produce tensors with the batch dimension first. 默认值: False. pad_token: 用于补全的字符. 默认值: "<pad>". unk_token: 不存在词典里的字符. 默认值: "<unk>". pad_first: 是否补全第一个字符. 默认值: False. 方法: pad(minibatch): 在一个batch对齐每条数据 build_vocab(): 建立词典 numericalize(): 把文本数据数值化,返回tensor
例如:
TEXT = data.Field(tokenize=data.get_tokenizer('spacy'), init_token='<SOS>', eos_token='<EOS>',lower=True)
torchtext的Dataset是继承自pytorch的Dataset,提供了一个可以下载压缩数据并解压的方法(支持.zip, .gz, .tgz)
splits方法可以同时读取训练集,验证集,测试集
TabularDataset可以很方便的读取CSV, TSV, or JSON格式的文件,例子如下:
train, val, test = data.TabularDataset.splits(
path='./data/', train='train.tsv',
validation='val.tsv', test='test.tsv', format='tsv',
fields=[('Text', TEXT), ('Label', LABEL)])
加载数据后可以建立词典,建立词典的时候可以使用与训练的word vector
TEXT.build_vocab(train, vectors="glove.6B.100d")
Iterator是torchtext到模型的输出,它提供了我们对数据的一般处理方式,比如打乱,排序,等等,可以动态修改batch大小,这里也有splits方法 可以同时输出训练集,验证集,测试集
参数: dataset: 加载的数据集 batch_size: Batch 大小. batch_size_fn: 产生动态的batch大小 的函数 sort_key: 排序的key train: 是否是一个训练集 repeat: 是否在不同epoch中重复迭代 shuffle: 是否打乱数据 sort: 是否对数据进行排序 sort_within_batch: batch内部是否排序 device: 建立batch的设备 -1:CPU ;0,1 ...:对应的GPU
使用方式如下:
train_iter, val_iter, test_iter = data.Iterator.splits(
(train, val, test), sort_key=lambda x: len(x.Text),
batch_sizes=(32, 256, 256), device=-1)
torchtext提供常用文本数据集,并可以直接加载使用:
train,val,test = datasets.WikiText2.splits(text_field=TEXT)
现在包含的数据集包括:
例子
import spacy import torch from torchtext import data, datasets spacy_en = spacy.load('en') def tokenizer(text): # create a tokenizer function return [tok.text for tok in spacy_en.tokenizer(text)] TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True, fix_length=150) LABEL = data.Field(sequential=False, use_vocab=False) train, val, test = data.TabularDataset.splits( path='./data/', train='train.tsv', validation='val.tsv', test='test.tsv', format='tsv', fields=[('Text', TEXT), ('Label', LABEL)]) TEXT.build_vocab(train, vectors="glove.6B.100d") train_iter, val_iter, test_iter = data.Iterator.splits( (train, val, test), sort_key=lambda x: len(x.Text), batch_sizes=(32, 256, 256), device=-1) vocab = TEXT.vocab
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。