利用pytorch和torchtext预处理数据

本文介绍了如何使用PyTorch和Torchtext进行数据预处理,包括广播矩阵的概念,数据预处理流程,如加载CSV/TSV文件,构建词汇表,以及使用Field和TabularDataset。此外,还探讨了BucketIterator的作用和如何构建简单的NLP模型,包括加载预训练的Embedding权重。
摘要由CSDN通过智能技术生成

pytorch

广播矩阵

当自定义矩阵来和一个 batch 的数据 X 做乘法的时候,设X.shape = [batch_size, dimx, dimy],那么自定义的矩阵 W.shape = [input_dim, output_dim]只需要input_dim==dimy就可以使用torch.matmul(X, W),pytorch在计算的时候会自动广播矩阵W,但计算完 W.shape 不会发生变化,也可以使用torch.matmul(W, X),同理只需要output_dim==dimx即可。

还有一个方法是torch.bmm,其实 bmm 就是 batch matrix multiply 的意思,用法和上面是一样的。

X = torch.randn(3, 2, 3) 
W = torch.randn(3, 3, 4)
result = torch.matmul(X, W) 
# result = torch.bmm(X, W) 与上面那行效果一致

result.size()
# torch.Size([3, 2, 4])

torchtext

数据预处理流程

Load data:加载各种文件格式的语料 corpus

Tokenization: 将每个句子分解成其包含的单词组成的列表

Build vocab: 构建当前 corpus 的词汇表

Numericalize: 将单词映射成在词汇表中的索引 index

Embedding: 构建 word embedding 矩阵

torchtext.data.Field

Field对象定义了如何处理数据

# tokenizer = lambda x: x.split() 如果语料已经全部是处理好的句子,直接分词就可以了

import spacy
spacy_en = spacy.load('en')

def tokenizer(text):
    return [toke.text for toke in spacy_en.tokenizer(text)]
# 也可以直接在Field里用 tokenize='spacy',效果等同于上面自定义的tokenizer函数,只不过需要先link好,这里不展开说了
# REVIEW 用来存储用户评论,include_lengths 设为 True 方便后续使用 pack_padded_sequence
REVIEW = data.Field(sequential=True,tokenize=tokenizer, include_lengths=True)
ASPECT = data.Field(sequential=False)
POLARITY = data.LabelField(sequential=False, dtype = torch.float)
# fields字典里,元组的第一个元素将成为接下来从数据sample出的每个batch的属性,里面存放着对应的数据,第二个元素是对应的Field
fields = [('review', REVIEW), ('aspect', ASPECT), ('polarity', POLARITY)]

torchtext.data.TabularDataset

加载csv/tsv文件

csv文件的每一列必须和fields字典存储的数据顺序相对应,即第一列存放 review,第二列 aspect,第三列 polarity,如果需要跳过aspect,那么应该写成这样fields = [('review', REVIEW), (

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值