没有合适的资源?快使用搜索试试~ 我知道了~
首页Pytorch框架下应用Bi-LSTM实现汽车评论文本关键词抽取
Pytorch框架下应用Bi-LSTM实现汽车评论文本关键词抽取
9 下载量 177 浏览量
更新于2023-04-28
1
收藏 54KB PDF 举报
需要调用的模块及整体Bi-lstm流程 import torch import pandas as pd import numpy as np from tensorflow import keras import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import DataLoader from torch.utils.data import TensorDataset import gensim from sklearn.model_s
资源详情
资源推荐
Pytorch框架下应用框架下应用Bi-LSTM实现汽车评论文本关键词抽取实现汽车评论文本关键词抽取
需要调用的模块及整体Bi-lstm流程
import torch
import pandas as pd
import numpy as np
from tensorflow import keras
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader
from torch.utils.data import TensorDataset
import gensim
from sklearn.model_selection import train_test_split
class word_extract(nn.Module):
def __init__(self,d_model,embedding_matrix):
super(word_extract, self).__init__()
self.d_model=d_model
self.embedding=nn.Embedding(num_embeddings=len(embedding_matrix),embedding_dim=200)
self.embedding.weight.data.copy_(embedding_matrix)
self.embedding.weight.requires_grad=False
self.lstm1=nn.LSTM(input_size=200,hidden_size=50,bidirectional=True)
self.lstm2=nn.LSTM(input_size=2*self.lstm1.hidden_size,hidden_size=50,bidirectional=True)
self.linear=nn.Linear(2*self.lstm2.hidden_size,4)
def forward(self,x):
w_x=self.embedding(x)
first_x,(first_h_x,first_c_x)=self.lstm1(w_x)
second_x,(second_h_x,second_c_x)=self.lstm2(first_x)
output_x=self.linear(second_x)
return output_x
将文本转换为数值形式
def trans_num(word2idx,text):
text_list=[] for i in text:
s=i.rstrip().replace('','').replace('','').split(' ')
numtext=[word2idx[j] if j in word2idx.keys() else word2idx['_PAD'] for j in s ] text_list.append(numtext)
return text_list
将Gensim里的词向量模型转为矩阵形式,后续导入到LSTM模型中
def establish_word2vec_matrix(model): #负责将数值索引转为要输入的数据
word2idx = {"_PAD": 0} # 初始化 `[word : token]` 字典,后期 tokenize 语料库就是用该词典。
num2idx = {0: "_PAD"}
vocab_list = [(k, model.wv[k]) for k, v in model.wv.vocab.items()]
# 存储所有 word2vec 中所有向量的数组,留意其中多一位,词向量全为 0, 用于 padding
embeddings_matrix = np.zeros((len(model.wv.vocab.items()) + 1, model.vector_size))
for i in range(len(vocab_list)):
word = vocab_list[i][0] word2idx[word] = i + 1
num2idx[i + 1] = word
embeddings_matrix[i + 1] = vocab_list[i][1] embeddings_matrix = torch.Tensor(embeddings_matrix)
return embeddings_matrix, word2idx, num2idx
训练过程
def train(model,epoch,learning_rate,batch_size,x, y, val_x, val_y):
optimizor = optim.Adam(model.parameters(), lr=learning_rate)
data = TensorDataset(x, y)
data = DataLoader(data, batch_size=batch_size)
for i in range(epoch):
for j, (per_x, per_y) in enumerate(data):
output_y = model(per_x)
loss = F.cross_entropy(output_y.view(-1,output_y.size(2)), per_y.view(-1))
optimizor.zero_grad()
loss.backward()
optimizor.step()
arg_y=output_y.argmax(dim=2)
fit_correct=(arg_y==per_y).sum()
fit_acc=fit_correct.item()/(per_y.size(0)*per_y.size(1))
print('##################################')
print('第{}次迭代第{}批次的训练误差为{}'.format(i + 1, j + 1, loss), end=' ')
print('第{}次迭代第{}批次的训练准确度为{}'.format(i + 1, j + 1, fit_acc))
val_output_y = model(val_x)
val_loss = F.cross_entropy(val_output_y.view(-1,val_output_y.size(2)), val_y.view(-1))
arg_val_y=val_output_y.argmax(dim=2)
weixin_38621365
- 粉丝: 7
- 资源: 906
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功