Torchtext基础知识

一、Torchtext组建的基本构造

Field: 主要包含以下数据预处理的配置信息,比如指定的分词方法,是否转成小写,起始与结束字符,补全字符以及词典等等
LabelField: 用于指定标签类别的种类以及标签的表示方式
Dateset: 它是继承了Pytorch的Dataset,用于加载数据,提供了TabularDataset可以指定路径,格式,Field信息就可以方便的完成数据加载。如果部分数据无法使用TabularDateset进行加载,则可以继承Dataset类别进行自建类,但最后必须返回一个Examples够迭代类进行划分。同时torchtext还提供预先构建的常用数据集的Dataset对象 ,可以直接加载使用,splits方法可以同时加载训练集,验证集,测试集。
Iterator: 主要是数据输出的模型的迭代器,可以支持batch定制

二、Field组建

Field 包含一些文本处理的通用的参数设置,同时还包含了一个词典的对象,可以把文本数据表示为数字类型,进而可以把文本表示为需要的tensor类型。
1Field的对象主要参数包含
sequential:是否把数据表示成序列;如果是False,不能使用分词;默认值为True
use_vocab:是否使用词典对象;如果是False,数据的类型必须已经是数值类型;默认值为True
init_token:每一条数据的起始字符;默认值为None
eos_token:每一条数据的结尾字符;默认值为None
fix_length:修改每条数据的长度为该值,若句子的长度小于 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:是否依照第一个批次的维度去产生张量;默认值: False
pad_token:用于补全的字符;默认值为"" unk_token:不存在词典里的字符;默认为""
pad_first:是否补全第一个字符;默认值为False

TEXT = data.Field(tokenize=data.get_tokenizer('spacy'), 
           init_token='<SOS>',eos_token='<EOS>',lower=True)
tokenize = lambda x: x.split()
# fix_length指定了每条文本的长度,截断补长
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True, fix_length=200)
LABEL = data.Field(sequential=False, use_vocab=False)

2重要的几个方法
pad(minibatch):在一个batch中对齐每一条数据
build_vocab():建立词典
numericalize():文本进行数值化,返回tensor

三、Dataset

torchtext的Dataset是继承于pytorch的Dataset,提供了一个可以下载压缩数据并解压的方法(支持.zip .gz .tgz)
splits方法可以同时读取训练集,验证集,测试集
TabularDataset可以很方便的读取CSV,TSV,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

#使用trochtext默认支持的预训练向量
from torchtext.vocab import GloVe
from torchtext import data
TEXT = data.Field(sequential=True)
TEXT.build_vocab(train, vectors=GloVe(name='6B', dim=300))
#使用预训练好的词向量
vectors = Vectors(name='词向量的路径')
TEXT.build_vocab(train, vectors=vectors)

四、Iterator

Iterator是torchtext到模型的输出,它提供了我们对数据的一般处理方式,比如打乱,排序,等等,可以动态修改batch大小,这里也有splits方法 可以同时输出训练集,验证集,测试集
1Iterator的对象主要参数包含
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)

包含如下数据集
Sentiment analysis: SST and IMDbQuestion
classification: TRECEntailment: SNLI
Language modeling: WikiText-2Machine
translation: Multi30k, IWSLT, WMT14

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章