torchtext常用函数整理

先介绍一下torchtext的常用的组件

Data:常用的是里边的Field,然是是迭代器BucketIterator,Iterator等
Dataset:里边有很多的数据集,比如分类,问答等,其中的splits函数和split函数经常用。

1.Field

Field 包含一写文本处理的通用参数的设置,同时还包含一个词典对象,可以把文本数据表示成数字类型,进而可以把文本表示成需要的tensor类型

以下是Field对象包含的参数:

参数描述
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_firstWhether to produce tensors with the batch dimension first. 默认值: False.
pad_token用于补全的字符. 默认值: “”.
unk_token不存在词典里的字符. 默认值: “”.
pad_first是否补全第一个字符. 默认值: False.

用法:

text_field = data.Field(tokenize='spacy', lower=True, include_lengths=True, fix_length=60)
Label_field = data.Field(sequential=False, use_vocab=False, dtype=torch.long)
#或者label_field = data.LabelField(dtype = torch.float)

重要的几个方法:

pad(minibatch): 在一个batch对齐每条数据

build_vocab(): 建立词典

参数描述
max_size词典的最大数目
vectors所使用预训练的词向量
min_freq保证词典中的词语最少出现多少次
unk_init词典中没有词语对应的向量统一用torch.Tensor.normal_

numericalize(): 把文本数据数值化,返回tensor
例如:

TEXT = data.Field(lower=True, tokenize='spacy', tokenizer_language='en_core_web_md')

2.Dataset

torchtext的Dataset是继承自pytorch的Dataset,提供了一个可以下载压缩数据并解压的方法(支持.zip, .gz, .tgz)

splits方法可以同时读取训练集,验证集,测试集

TabularDataset可以很方便的读取CSV, TSV, or JSON格式的文件,参数如下:

参数描述
path数据文件地址;
format数据文件格式,可以是’csv’, ‘tsv’, or ‘json’;
skip_header是否跳过数据文件的第一行;
fields是一个包含很多个tuple的list,(name, field)

例子如下

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")

同时还可以这样直接加载内带的数据集:

train_data, test_data = datasets.IMDB.splits(TEXT, LABEL)

3.Iterator

Iterator是torchtext到模型的输出,它提供了我们对数据的一般处理方式,比如打乱,排序,等等,可以动态修改batch大小,这里也有splits方法 可以同时输出训练集,验证集,测试集

参数如下:

参数描述
dataset加载的数据集
batch_sizeBatch 大小.
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)

另外我们在想使用GPU加速的时候可以这样定义

device = torch.device('cuda' if torch.cuda.is_avaiable else 'cpu')
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值