使用pytorch和torchtext怎么对文本进行分类?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强> 1。文本数据预处理强>
首先数据存储在三个csv文件中,分别是train.csv, valid.csv, test.csv,第一列存储的是文本数据,例如情感分类问题经常是用户的评论审查,例如imdb或者亚马逊数据集。第二列是情感极性极性、N分类问题的话就有N个值,假设值得范围是0 ~ N - 1 .
下面是很常见的文本预处理流程,英文文本的话不需要分词,直接按空格分裂就行了,这里只会主要说说第4点。
1,去除非文本部分
2,分词
3,去除停用词
4,对英文单词进行词干提取(阻止)和词型还原(词元化)
5,转为小写
6,特征处理
袋的话
Tf-idf
语法
Word2vec
<强>词干提取和词型还原强>
得到nltk.stem import SnowballStemmer 时间=stemmer SnowballStemmer (“english"), #,选择语言 得到nltk.stem import  WordNetLemmatizer wnl =, WordNetLemmatizer ()
SnowballStemmer较为激进,转换有可能出现错误,这里较为推荐使用WordNetLemmatizer,它一般只在非常肯定的情况下才进行转换,否则会返回原来的单词。
stemmer.stem(& # 39;刀# 39;) #,有趣 wnl.lemmatize(& # 39;刀# 39;) #,刀
因为我没有系统学习和研究过NLTK的代码,所以就不多说了,有兴趣的可以自己去阅读NLTK的源码。
<强> 2。使用torchtext加载文本数据强>
本节主要是用的模块是torchtext里的数据模块,处理的数据同上一节所描述。
首先定义一个记号赋予器用来处理文本,比如分词,小写化,如果你已经根据上一节的词干提取和词型还原的方法处理过文本里的每一个单词后可以直接分词就够了。
tokenize =, lambda x:, x.split ()
或者也可以更保险点,使用宽大的库,不过就肯定更耗费时间了。
import 宽大的 时间=spacy_en spacy.load (& # 39; en # 39;) def 记号赋予器(文本): ,return [toke.text for  toke 拷贝spacy_en.tokenizer(文本)]
然后要定义,至于字段是啥,你可以简单地把它理解为一个能够加载,预处理和存储文本数据和标签的对象。我们可以用它根据训练数据来建立词表,加载预训练的手套词向量等等。
def DataLoader ():=,,tokenize  lambda x:, x.split () ,#用户评论,include_lengths设为真正是为了方便之后使用火炬的pack_padded_sequence=,,REVIEW  data.Field(顺序=True,=标记,标记,include_lengths=True) ,#情感极性=,,POLARITY  data.LabelField(顺序=False, use_vocab=False,, dtype =, torch.long) ,#假如train.csv文件并不是只有两列,比如1,第三列是审查和极性,第2列是我们不需要的数据, ,#那么就要添加一个全是没有的元组,,字段列表存储的字段的顺序必须和csv文件中每一列的顺序对应, ,#否则审查可能就加载到polarity 领域里去了 ,fields =,((& # 39;回顾# 39;,,评论),,(没有,没有),(& # 39;极性# 39;,,极性)) , ,#加载火车,有效,测试数据 ,train_data, valid_data, test_data =, data.TabularDataset.splits ( ,,,,,,,,path =, & # 39;亚马逊# 39; ,,,,,,,,train =, & # 39; train.csv& # 39; ,,,,,validation =, & # 39; valid.csv& # 39; ,,,,,test =, & # 39; test.csv& # 39; ,,,,,,,,format =, & # 39; csv # 39; ,,,,,,,,fields =,字段, ,,,,,,,,skip_header =, False #,是否跳过文件的第一行 ,) ,return 审查,极性,,train_data
加载完数据可以开始建词表。如果本地没有预训练的词向量文件,在运行下面的代码时会自动下载到当前文件夹下的& # 39;.vector_cache& # 39;文件夹内,如果本地已经下好了,可以用向量指定文件名的名字,路径缓存,还可以使用手套。
得到torchtext.vocab import 向量,手套 import 火炬 评论,极性,train_data =, DataLoader ()=#,vectors 向量(name=& # 39; glove.6B.300d.txt& # 39;,,缓存=& # 39;.vector_cache& # 39;) REVIEW.build_vocab (train_data, #,建词表是用训练集建,不要用验证集和测试集 ,,,,max_size=400000,, #,单词表容量 ,,,,向量=& # 39;glove.6B.300d& # 39;,, #,还有& # 39;glove.840B.300d& # 39;已经很多可以选 ,,,,unk_init=torch.Tensor.normal_ #,初始化train_data中不存在预训练词向量词表中的单词 ) #,print (REVIEW.vocab.freqs.most_common(20),数据集里最常出现的20个单词 #,print (REVIEW.vocab.itos[10]),,列表,index 用的词 #,打印(REVIEW.vocab.stoi),,,,字典,word 用指数使用pytorch和torchtext怎么对文本进行分类