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)
参数 | 描述 |
---|---|
train | TabularDataset构造的训练集; |
batch_size | 批量的大小; |
sort_key | 数据的排序方法; |
sort_within_batch | 在一个批量中是否存储; |
shuffle | 是否随机打乱数据; |
repeat | 是否重复迭代器; |
device | 放在CPU还是GPU |
参考:
http://ziyangluo.tech/2020/01/17/torchtext1/