欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    python实现RNN情感分析设计.docx

    • 资源ID:1004238       资源大小:38.42KB        全文页数:8页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    python实现RNN情感分析设计.docx

    python实现RNN情感分析本次实验对acllmdb电影评价数据集进行深度学习,用pytorch构建和训练基于循环神经网络LSTM的模型,并利用此模型对于给定的电影评论文本进行预测,判断改评论是正面的还是负面的。试验后准确率高达98%。一.实现方法1、 RNNRNN(recurrentneuralnetwork,循环神经网络),在一般的神经网络由输入层、隐藏层、输出层构成。RNN在处理序列数据上是高效的,在此模型中有着一些特殊的信号决定了此模型是否需要记住上下文信息。他们可以从上一个时间步获取信息并传递到下一个时间步中。下图是一个标准循环神经网络的图像。RNN按下图所示时间顺序展开,在t时刻,网络读入第t个输入xt,以及前一时刻状态值ht-l(向量表示,h表示初始化为0的向量),从而计算出本时刻隐藏层的状态值ht,若函数表示为f,则公式表示为:ht=f(×tzht-l)=(Wxh×t+Whhht-l+bh):2、 其中,WXh是输入层到隐藏层的矩阵参数,Whh为隐藏层到隐藏层的矩阵参数,bh为隐藏层偏置参数。RNN隐藏层的状态向量被送入一个SoftmaX分类器,然后判断其情感;3、 1.STM保留了文本中的长期依赖信息,通过对循环层的刻意设计避免了长期依赖和梯度消失问题。输入单元输入数据X(t),隐藏层输出hh(t),在这些单元中,隐藏层表达复杂,主要分为4个部分:输入门i、输出门0、遗忘门f、记忆控制器C,将LSTM表示函数记为F,ht=F(xtzht-l);it(Wxix,+Whihhi+FFm+6)fl=(xxl+¾Ar.+¾cm+6z)clflOcl.+ilOtanh(%M必瓦i+九)ol=(Wxox,-WhJtl.+Wcocl+bo)hlotIanh(C,)其中W及b是模型参数,tanh是双曲正切函数二,大致思路在这里我们将使用RNN(循环神经网络如图5所示)对电影评论进行情感分析,结果为positive或negative,分别代表积极和消极的评论。至于为什么使用RNN而不是普通的前馈神经网络,是因为RNN能够存储序列单词信息,得到的结果更为准确。这里我们将使用一个带有标签的影评数据集进行训练模型。将单词传入到嵌入层而不是使用ONE-HOT编码,是因为词嵌入是一种对单词数据更好的表/Ko在嵌入层之后,新的表示将会进入LSTM细胞层。最后使用一个全连接层作为输出层。我们使用Sigmiod作为激活函数,因为我们的结果只有positivenegative两个表示情感的结果。输出层将是一个使用sigmoid作为激活函数的单一的单元。三,具体程序1、导入并读取数据集fnameos.path.join(DATA-ROOX,acllmdb-vl.tar.gz')符压缩文件进行解乐ifnotos.path.exists(os.path.join(DATA_ROOX'acllmdb*):Pmtr从乐缩包解乐”)withtarfile.open(fname,'r,)asf:fextractall(DAA-R00H解乐文件到此指定路径fromtqdmimporttqdm/可查看读取数据的进程defread-imdb(folder三,train'rdata.rtar,Edataacllmdb*):data()forlabelin('pos'r*neg'J:folder-nameeos.path.jo«n(data_rootrfolder;label)/拼接文件路径如E:dataadlmdbtrainposforfileintqdm(os.listdir(fblderwname):/os.listdir(folder-ame)i取文件路径下的所有文件名,并存入列及中withopen(os.path.join(folder_name(file>f,rb,)asf:review三f.read().decode(,utf>8').replace('n,')-ower()data.append(reviev61iflabel"'pos'else0)/将每个文本读取的内容和对应的标签存入data列表中QndomShUffIe(data)/打乱data列表中的数据排列顺序returndata2、数据预处理通常而言,未标注好的数据具有大量的噪声,噪声会对模型的效果产生直接的影响,所以在使用这些数据前,应当对数据进行数据预处理,比如分词、标注、空间向量转换等。/空格分词defgetjokenzedjrib(data):Paramdata:listof(string,labeldeftokener(text):returntok.lower()fortokitext.split(,)1return(tokener(review)forreview,_Indata/只从data中读取revlew(评论)内容而不读取标签(label),对review使用tokenizer方法进行分词/创建词典defget-vocabjmdbdata):tokenized.data=gel_tokenizedmdb(data)/调用gejtokenizeLirndbo空格分词方法荻取到分词后的数据tokenized-datacounter=collections.Couter(tkforstintokenized-datafortkinSt)/读取tokeniZe(Ldata列表中5个句子的每个词,放入列表中。/collections.Counter()H法可计算出列表中所有不重如的词数总和returnVocab.Vocab(countecmin-freq=5>/去掉词领小于5的词data列衣中的用行数据进行处理,将词转换为索引,并使用行数据等长defProCeSSjmdb(data,vocab):maxjen=500用条评论通过截断或者补0,使得长度变成500defpad(x):returnx(:maxjen)iflen(x)>max-leelse×+(0)(maxJenlen(x)/x(:maxjen)只获取前maxen个词/x*(0)(maxJenlen(x)词数小于maxjen,用Pad=O补长到maxJentokeized-data=gel_tokenizedmdbdata)/调用方法获取分词后的数据features=torch.tensor(pad(vocab.stoi(wordforwordinwords)!forwordsintokenized-datal)/将词转换为vocab词典中对应词的索引labels=torch.tensor(scorefor,sreindata)returnfeatures,labels3、创建数据迭代器/创建数据迭代器batch.size=64train_set=Data.TensorDataset(*processjmdb(train-data,vocab)test.set=Data.TensorDatasetCproce$s_imdb(test_data,vocab)trainjter=Data.DataLoader(train-set,batch_size.True)test-iter=Data.DataLoader(test-set,batch_size)UforX,yintrainjter4、构建循环神经网络/classBiRNN(nn.Module):def_init_($elf,vocab,embed-sizefnum_hiddens,num_layer$):super(BiRNN,self)._init_OSelfembedding=nn.Embedding(len(vocab),embed-size)self.encoder=nn.LSTM(input_size=embed_size,hidden_size=num_hiddens,num-layers=num_layers,#batch-first=True,bidirectional=TrueSeltdecoder=nn.Linear(4*num_hiddens,2)defforward(self1inputs):/inputs:batch.size,seq.len,LSTM需要将序列长度(seqen昨为第一堆,所以需要将输入转置后再提取词特征/输出形状outputs:(seq_len,batch_size,embedding.dimembeddings=self.embedding(inpts.permute(l,0)/rnn.LSTM只传入输入embeddings,因此只返回最后一层的除液层在各时间步的隐藏状态./outputs形状是(seqen,batch-size,2*num-hiddens)outputs,_=self.encoder(embeddings)/连结初始时间步和最终时间步的隐液状态作为全连接层输入./它的形状为:batch_$ize,4*num_hidden$encoding=torch.cat(outputs(01outputs-l),dim=-l)outs=self.decoder(encoding)returnouts5、数据集训练/评估defevaluate_accuracy(data_iter,net,device=None):ifdeviceisNoneandisinstance(net,torch.nn.Module):/如果没指定device就使用net的devicedevice=list(net.paraf11etersO)O.deviceacjsum,n=0.0,0withtorch.no-grad():forX,yindata-iteifisinstance(netorch.nn.Module):net.eval()#评估模式这会关闭drop。Utacc_sum+=(net(X.to(device),argmax(dim=l)=y.to(device).float().sum.cpuitem()net.train()/改回训练模式else:/自定义的模型,3.13节之后不会用到,不考虑GPUif('is-training,innet._code_.co_vamames):/如果有is.training这个参数/将israining设置成FalSeacc-sum+=(net(X,isjraining=False).argma×(dim=1)-y).f!oat0sum0.item()else:acc-sum+=(net(X).argma×(dim=1)=y).float0.sumQ.item()n+=y.shape(0returnacc_sum/n/训练deftrain(trainjter,test-iter,netrloss,optimizer,device,num_epochs):net=net.to(device)PrintCtrainingon,1device)batch_cou

    注意事项

    本文(python实现RNN情感分析设计.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开