使用torchtext加载数据

torchtext基本组件。

  • Field :主要包含以下数据预处理的配置信息,比如指定分词方法,是否转成小写,起始字符,结束字符,补全字符以及词典等等
  • Dataset :继承自pytorch的Dataset,用于加载数据,提供了TabularDataset可以指点路径,格式,Field信息就可以方便的完成数据加载。同时torchtext还提供预先构建的常用数据集的Dataset对象,可以直接加载使用,splits方法可以同时加载训练集,验证集和测试集。
  • Iterator : 主要是数据输出的模型的迭代器,可以支持batch定制
  1. Field

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)
  1. Dataset

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")
  1. Iterator

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)
  1. 其他

torchtext提供常用文本数据集,并可以直接加载使用:

train,val,test = datasets.WikiText2.splits(text_field=TEXT)

现在包含的数据集包括:

  • Sentiment analysis: SST and IMDb
  • Question classification: TREC
  • Entailment: SNLI
  • Language modeling: WikiText-2
  • Machine translation: Multi30k, IWSLT, WMT14

例子

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SST-2是Stanford Sentiment Treebank的一部分,是一个二元分类任务,目标是将电影评论分为正面和负面两类。数据集包含了10,662个训练样本和1,427个测试样本,每个样本都有一个文本句子和其对应的标签(0表示负面情感,1表示正面情感)。 在使用torchtext加载SST-2数据集时,可以使用以下代码: ```python from torchtext.datasets import SST from torchtext.data.utils import get_tokenizer from torchtext.vocab import build_vocab_from_iterator tokenizer = get_tokenizer('basic_english') train_iter = SST(split='train', tokenizer=tokenizer) test_iter = SST(split='test', tokenizer=tokenizer) # 构建词汇表 vocab = build_vocab_from_iterator(map(tokenizer, train_iter), min_freq=1) ``` 在此代码中,我们首先导入了`SST`数据集和`get_tokenizer`函数,后者是用于将文本句子分词的。然后,我们使用`SST`数据集的`split`参数来指定是否加载训练集或测试集,使用`tokenizer`参数指定分词器。最后,我们使用`build_vocab_from_iterator`函数从训练集中构建词汇表。 构建好词汇表后,我们可以使用以下代码将文本句子转换为数字序列: ```python from torchtext.data.utils import numericalize_tokens_from_iterator train_iter = SST(split='train', tokenizer=tokenizer) test_iter = SST(split='test', tokenizer=tokenizer) # 将文本转换为数字序列 train_data = list(numericalize_tokens_from_iterator(vocab, map(tokenizer, train_iter))) test_data = list(numericalize_tokens_from_iterator(vocab, map(tokenizer, test_iter))) ``` 在此代码中,我们首先重新加载了`SST`数据集,并使用`numericalize_tokens_from_iterator`函数将文本句子转换为数字序列。最后,我们将训练集和测试集的数字序列分别存储在`train_data`和`test_data`中。 使用torchtext加载SST-2数据集非常方便,可以大大简化数据预处理的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值