torchtext

NLP预处理过程:
(1)Train/Validation/Test数据集划分
(2)文本数据的导入
(3)分词(Tokenization),将文本字符串切分为词语列表
(4)构建词典(Vocabulary)
(5)数字映射(Numericalize),根据词典,将数据从词语映射成数字
(6)导入预训练好的词向量
(7)将数据分Batch
(8)Embedding Lookup,将每个词语对应的索引值变成词语向量

1.数据集划分

一般使用pandas

2.文本数据导入 与 3.分词

1)torchtext.data.Field 3.分词
对要导入的每个字段设置处理方法,比如分词

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)
参数描述
tokenize句子分词的方法,如果是’spacy’,则使用spacy分词器,对英文文本分词;
lower是否将文本的所有字母变成小写;
include_lengths是否返回一个带有各自长度的padded的minibatch数据;
fix_length是所有的Text都是固定的长度,长度不足的用padding补全,超过的截取;
sequential是否连续的数据,如果False,则不用分词;如果True,则要分词,并且默认是True的。

Label数据来说,并不是连续的,所以sequential要设置为False,同时并不需要用到vocab,所以也设置为False。

2)torchtext.data.TabularDataset 2.文本数据导入
加载csv,tsv或json格式

train = data.TabularDataset(path='/home/chiyeung/Desktop/Code/DL/Try/data/smallTrain.csv',
                           format="csv",
                           skip_header=True,
                           fields=[('sentence', text_field), ('label', Label_field)])
print(len(train.examples))
参数描述
path数据文件地址;
format数据文件格式,可以是’csv’, ‘tsv’, or ‘json’;
skip_header是否跳过数据文件的第一行;
fields是一个包含很多个tuple的list,(name, field)。

也可以同时加载训练集和验证集。

train, dev = data.TabularDataset.splits(path='/home/chiyeung/Desktop/Code/DL/Try/data',
                                       train='smallTrain.csv',
                                       validation='smallDev.csv',
                                       format='csv',
                                       skip_header=True,
                                       fields=[('sentence', text_field), ('label', Label_field)])

4.构建词典 &5.数字映射 &6导入预训练好的词向量

上述代码所做的事情就是把预训练的glove.6B.300d词向量读取到vocabularyvec中。

vec = vocab.Vectors(name='/home/chiyeung/Datasets/glove/glove.6B.300d.txt')
Label_field.build_vocab(train, dev)
text_field.vocab.stoi['you']
text_field.vocab.itos[271]
text_field.vocab.vectors[text_field.vocab.stoi['you']] # 查看词向量embedding,可以通过词向量计算词语的相似性

参数描述
max_size詞典的最大词数,
vectors所使用的词向量,
min_freq=50词典中的词语保证至少出现50次,
unk_init词典中没有的词语对应的向量统一用torch.Tensor.normal_填充。

7.将数据分Batch

train_iter = data.BucketIterator(train, batch_size=5, sort_key=lambda x:len(x.sentence), sort_within_batch=True,
                                shuffle=True, repeat=False)
参数描述
trainTabularDataset构造的训练集;
batch_size批量的大小;
sort_key数据的排序方法;
sort_within_batch在一个批量中是否存储;
shuffle是否随机打乱数据;
repeat是否重复迭代器;
device放在CPU还是GPU

参考:
http://ziyangluo.tech/2020/01/17/torchtext1/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值