pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第1张图片
  • 分类是NLP处理中的一项基本任务,可以是两类,多类甚至多标签分类。可以基于tensorflow,keras或者pytorch来完成。本文采用训练好的词向量+LSTM模型来完成分类。本文是英文分类的样例,中文分类类似,可以先按文章路径下载词向量文件,然后准备训练数据,依次准备,进行训练。
  • 如果需要数据和完整源代码请在文章后留言。
  1. 预训练的词向量有很多,英文的包括glove的各种版本,实际上100维或者200维的足够满足日常使用。glove.6B.100d。中文的也很多,可以到这个路径下载:Embedding/Chinese-Word-Vectors
  2. 情感分类通常包括:生成数据集,训练或使用现成的词向量进行数据表示,准备训练模型,准备验证函数等,下面依次描述。
  3. 生成数据集。可以使用torchtext进行数据集生成。

torchtext的使用可以参考这个链接:Torchtext使用教程

数据文件包括:train.txt,eval.txt,test.txt,格式如下:

文本内容,标签(0/1),用 t 分隔,比如:

it 's worth taking the kids to 1

without shakespeare 's eloquent language , the update is dreary and sluggish 0

dense , exhilarating documentary 1

下面定义数据集生成函数:

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第2张图片
  1. 训练或使用现有的词向量进行数据表示,完成模型的embeddings

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第3张图片
  • 其中load_bin_vec函数的主要功能是完成从词向量文件,生成向量词典:

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第4张图片
  1. 实现训练模型

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第5张图片
  • 完成一轮训练的函数train_epoch_progress()

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第6张图片
  • LSTM模型定义:模型比较简单,首先是embedding层,然后是LSTM层,然后是hidden2label,输出各类标签的概率,然后通过F.log_softmax()函数取最大概率的一类。
  • 另外,最新的torch版本不再使用Variable,可以使用init_hidden_plus()

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第7张图片
  • 准备验证函数

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第8张图片

其中,get_accuracy()函数完成实际类别和预测类别的对比,计算准确率。

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第9张图片

训练过程,两轮之后可以达到65.5%,6轮之后达到77.6%准确率。

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第10张图片

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第11张图片

还可以查看模型的相关信息:

pytorch训练lstm_使用pytorch,预训练词向量,lstm,torchtext完成情感分类_第12张图片

C:todotorchsentimentruns1607164778/best_model.pth

embeddings.weight torch.Size([16190, 100])

lstm.weight_ih_l0 torch.Size([600, 100])

lstm.weight_hh_l0 torch.Size([600, 150])

lstm.bias_ih_l0 torch.Size([600])

lstm.bias_hh_l0 torch.Size([600])

hidden2label.weight torch.Size([2, 150])

hidden2label.bias torch.Size([2])

你可能感兴趣的:(pytorch训练lstm)