如果你是pytorch的用户,可能你会很熟悉pytorch生态圈中专门预处理图像数据集的torchvision库。
从torchtext这个名字我们也能大概猜到该库是pytorch圈中用来预处理文本数据集的库,但这方面的教程网络上比较少,今天我就讲讲这个特别有用的文本分析库。
简介
torchtext在文本数据预处理方面特别强大,但我们要知道ta能做什么、不能做什么,并如何将我们的需求用torchtext实现。虽然torchtext是为pytorch而设计的,但是也可以与keras、tensorflow等结合使用。
官方文档地址 https://torchtext.readthedocs.io/en/latest/index.html
# 安装 !pip3 install torchtext
自然语言处理预处理的工作流程:
1、Train/Validation/Test数据集分割
2、文件数据导入(File Loading)
3、分词(Tokenization) 文本字符串切分为词语列表
4、构建词典(Vocab) 根据训练的预料数据集构建词典
5、数字映射(Numericalize/Indexify) 根据词典,将数据从词语映射成数字,方便机器学习
6、导入预训练好的词向量(word vector)
7、分批(Batch) 数据集太大的话,不能一次性让机器读取,否则机器会内存崩溃。解决办法就是将大的数据集分成更小份的数据集,分批处理
8、向量映射(Embedding Lookup) 根据预处理好的词向量数据集,将5的结果中每个词语对应的索引值变成 词语向量
上面8个步骤,torchtext实现了2-7。第一步需要我们自己diy,好在这一步没什么难度
"The quick fox<span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码网%</span> jumped over a lazy dog." # 分词 ["The", "quick", "fox", "jumped", "over", "a", "lazy", "dog", "."] # 构建词典 {"The" -> 0, "quick"-> 1, "fox" -> 2, ...} # 数字映射(将每个词根据词典映射为对应的索引值) [0, 1, 2, ...] # 向量映射(按照导入的预训练好的词向量数据集,把词语映射成向量) [ [0.3, 0.2, 0.5], [0.6, 0., 0.1], [0.8, 01., 0.4], ... ]
一、数据集分割
一般我们做机器学习会将数据分为训练集和测试集,而在深度学习中,需要多轮训练学习,每次的学习过程都包括训练和验证,最后再进行测试。所以需要将数据分成训练、验证和测试数据。
import pandas as pd import numpy as np def split_csv(infile, trainfile, valtestfile, seed=999, ratio=0.2): df = pd.read_csv(infile) df["text"] = df.text.str.replace("\n", " ") idxs = np.arange(df.shape[0]) np.random.seed(seed) np.random.shuffle(idxs) val_size = int(len(idxs) * ratio) df.iloc[idxs[:val_size], :].to_csv(valtestfile, index=False) df.iloc[idxs[val_size:], :].to_csv(trainfile, index=False) #先将sms_spam.csv数据分为train.csv和test.csv split_csv(infile='data/sms_spam.csv', trainfile='data/train.csv', valtestfile='data/test.csv', seed=999, ratio=0.2) #再将train.csv分为dataset_train.csv和dataset_valid.csv split_csv(infile='data/train.csv', trainfile='data/dataset_train.csv', valtestfile='data/dataset_valid.csv', seed=999, ratio=0.2)
1.1 参数解读
split_csv(infile, trainfile, valtestfile, seed, ratio)
infile:待分割的csv文件
trainfile:分割出的训练cs文件
valtestfile:分割出的测试或验证csv文件