人工智能-paddlepaddle飞桨-深度学习基础教程-情感分析

更新时间:2023-06-18 22:38:40 阅读: 评论:0

⼈⼯智能-paddlepaddle飞桨-深度学习基础教程-情感分析
情感分析
本教程源代码⽬录在,初次使⽤请您参考。
背景介绍
在⾃然语⾔处理中,情感分析⼀般是指判断⼀段⽂本所表达的情绪状态。其中,⼀段⽂本可以是⼀个句⼦,⼀个段落或⼀个⽂档。情绪状态可以是两类,如(正⾯,负⾯),(⾼兴,悲伤);也可以是三类,如(积极,消极,中性)等等。情感分析的应⽤场景⼗分⼴泛,如把⽤户在购物⽹站(亚马逊、天猫、淘宝等)、旅游⽹站、电影评论⽹站上发表的评论分成正⾯评论和负⾯评论;或为了分析⽤户对于某⼀产品的整体使⽤感受,抓取产品的⽤户评论并进⾏情感分析等等。表格1展⽰了对电影评论进⾏情感分析的例⼦:
电影评论类别
在冯⼩刚这⼏年的电影⾥,算最好的⼀部的了正⾯
很不好看,好像⼀个地⽅台的电视剧负⾯
圆⽅镜头全程炫技,⾊调背景美则美矣,但剧情拖沓,⼝⾳不伦不类,⼀直努⼒却始终⽆法⼊戏负⾯
剧情四星。但是圆镜视⾓加上婺源的风景整个⾮常有中国写意⼭⽔画的感觉,看得实在太舒服了。。正⾯
表格 1 电影评论情感分析
在⾃然语⾔处理中,情感分析属于典型的⽂本分类问题,即把需要进⾏情感分析的⽂本划分为其所属类别。⽂本分类涉及⽂本表⽰和分类⽅法两个问题。在深度学习的⽅法出现之前,主流的⽂本表⽰⽅法为词袋模型BOW(bag of words),话题模型等等;分类⽅法有
SVM(support vector machine), LR(logistic regression)等等。
对于⼀段⽂本,BOW表⽰会忽略其词顺序、语法和句法,将这段⽂本仅仅看做是⼀个词集合,因此BOW⽅法并不能充分表⽰⽂本的语义信息。例如,句⼦“这部电影糟糕透了”和“⼀个乏味,空洞,没有内涵的作品”在情感分析中具有很⾼的语义相似度,但是它们的BOW表⽰的相似度为0。⼜如,句⼦“⼀个空洞,没有内涵的作品”和“⼀个不空洞⽽且有内涵的作品”的BOW相似度很⾼,但实际上它们的意思很不⼀样。
本章我们所要介绍的深度学习模型克服了BOW表⽰的上述缺陷,它在考虑词顺序的基础上把⽂本映射
到低维度的语义空间,并且以端对端(end to end)的⽅式进⾏⽂本表⽰及分类,其性能相对于传统⽅法有显著的提升[]。
说明:早安问候语温馨短语
1. 硬件环境要求: 本⽂可⽀持在CPU、GPU下运⾏
人事专员年终总结
2. Docker镜像⽀持的CUDA/cuDNN版本: 如果使⽤了Docker运⾏Book,请注意:这⾥所提供的默认镜像的GPU环境为 CUDA
8/cuDNN 5,对于NVIDIA Tesla V100等要求CUDA 9的 GPU,使⽤该镜像可能会运⾏失败。
3. ⽂档和脚本中代码的⼀致性问题: 请注意:为使本⽂更加易读易⽤,我们拆分、调整了train.py的代码并放⼊本⽂。本⽂中代码与
train.py的运⾏结果⼀致,可直接运⾏进⾏验证。口腔癌的早期症状
模型概览
本章所使⽤的⽂本表⽰模型为卷积神经⽹络(Convolutional Neural Networks)和循环神经⽹络(Recurrent Neural Networks)及其扩展。下⾯依次介绍这⼏个模型。
⽂本卷积神经⽹络简介(CNN)
我们在⼀节介绍过应⽤于⽂本数据的卷积神经⽹络模型的计算过程,这⾥进⾏⼀个简单的回顾。
对卷积神经⽹络来说,⾸先使⽤卷积处理输⼊的词向量序列,产⽣⼀个特征图(feature map),对特征图采⽤时间维度上的最⼤池化(max pooling over time)操作得到此卷积核对应的整句话的特征,最后,将所有卷积核得到的特征拼接起来即为⽂本的定长向量表⽰,对于⽂本分类问题,将其连接⾄softmax即构建出完整的模型。在实际应⽤中,我们会使⽤多个卷积核来处理句⼦,窗⼝⼤⼩相同的卷积核堆叠起来形成⼀个矩阵,这样可以更⾼效的完成运算。另外,我们也可使⽤窗⼝⼤⼩不同的卷积核来处理句⼦,⼀节的图3作为⽰意画了四个卷积核,既⽂本图1,不同颜⾊表⽰不同⼤⼩的卷积核操作。
图1. 卷积神经⽹络⽂本分类模型
对于⼀般的短⽂本分类问题,上⽂所述的简单的⽂本卷积⽹络即可达到很⾼的正确率[]。若想得到更抽象更⾼级的⽂本特征表⽰,可以构建深层⽂本卷积神经⽹络[,]。
循环神经⽹络(RNN)
循环神经⽹络是⼀种能对序列数据进⾏精确建模的有⼒⼯具。实际上,循环神经⽹络的理论计算能⼒
是图灵完备的[]。⾃然语⾔是⼀种典型的序列数据(词序列),近年来,循环神经⽹络及其变体(如long short term memory[]等)在⾃然语⾔处理的多个领域,如语⾔模型、句法解析、语义⾓⾊标注(或⼀般的序列标注)、语义表⽰、图⽂⽣成、对话、机器翻译等任务上均表现优异甚⾄成为⽬前效果最好的⽅法。
图2. 循环神经⽹络按时间展开的⽰意图
循环神经⽹络按时间展开后如图2所⽰:在第tt时刻,⽹络读⼊第tt个输⼊xtxt(向量表⽰)及前⼀时刻隐层的状态值ht−1ht−1(向量表⽰,h0h0⼀般初始化为00向量),计算得出本时刻隐层的状态值htht,重复这⼀步骤直⾄读完所有输⼊。如果将循环神经⽹络所表⽰的函数记为ff,则其公式可表⽰为:
其中WxhWxh是输⼊到隐层的矩阵参数,WhhWhh是隐层到隐层的矩阵参数,bhbh为隐层的偏置向量(bias)参数,σσ为sigmoidsigmoid函数。
在处理⾃然语⾔时,⼀般会先将词(one-hot表⽰)映射为其词向量表⽰,然后再作为循环神经⽹络每
白发变黑发配方
⼀时刻的输⼊xtxt。此外,可以根据实际需要的不同在循环神经⽹络的隐层上连接其它层。如,可以把⼀个循环神经⽹络的隐层输出连接⾄下⼀个循环神经⽹络的输⼊构建深层(deep or stacked)循环神经⽹络,或者提取最后⼀个时刻的隐层状态作为句⼦表⽰进⽽使⽤分类模型等等。
长短期记忆⽹络(LSTM)
对于较长的序列数据,循环神经⽹络的训练过程中容易出现梯度消失或爆炸现象[]。为了解决这⼀问题,Hochreiter S, Schmidhuber J. (1997)提出了LSTM(long short term memory[])。
相⽐于简单的循环神经⽹络,LSTM增加了记忆单元cc、输⼊门ii、遗忘门ff及输出门oo。这些门及记忆单元组合起来⼤⼤提升了循环神经⽹络处理长序列数据的能⼒。若将基于LSTM的循环神经⽹络表⽰的函数记为FF,则其公式为:
FF由下列公式组合⽽成[]:
其中,it,ft,ct,otit,ft,ct,ot分别表⽰输⼊门,遗忘门,记忆单元及输出门的向量值,带⾓标的WW及bb为模型参数,tanhtanh为双曲正切函数,⊙⊙表⽰逐元素(elementwi)的乘法操作。输⼊门控制着新输⼊进⼊记忆单元cc的强度,遗忘门控制着记忆单元维持上⼀时刻值的强度,输出门控制着输出记忆单元的强度。三种门的计算⽅式类似,但有着完全不同的参数,它们各⾃以不同的⽅式控制着记忆单元cc,如图3所⽰:
图3. 时刻tt的LSTM [7]
LSTM通过给简单的循环神经⽹络增加记忆及控制门的⽅式,增强了其处理远距离依赖问题的能⼒。类似原理的改进还有Gated Recurrent Unit (GRU)[],其设计更为简洁⼀些。这些改进虽然各有不同,
但是它们的宏观描述却与简单的循环神经⽹络⼀样(如图2所⽰),即隐状态依据当前输⼊及前⼀时刻的隐状态来改变,不断地循环这⼀过程直⾄输⼊处理完毕:
其中,RecurrentRecurrent可以表⽰简单的循环神经⽹络、GRU或LSTM。
栈式双向LSTM(Stacked Bidirectional LSTM)
对于正常顺序的循环神经⽹络,htht包含了tt时刻之前的输⼊信息,也就是上⽂信息。同样,为了得到下⽂信息,我们可以使⽤反⽅向(将输⼊逆序处理)的循环神经⽹络。结合构建深层循环神经⽹络的⽅法(深层神经⽹络往往能得到更抽象和⾼级的特征表⽰),我们可以通过构建更加强有⼒的基于LSTM的栈式双向循环神经⽹络[],来对时序数据进⾏建模。
如图4所⽰(以三层为例),奇数层LSTM正向,偶数层LSTM反向,⾼⼀层的LSTM使⽤低⼀层LSTM及之前所有层的信息作为输⼊,对最⾼层LSTM序列使⽤时间维度上的最⼤池化即可得到⽂本的定长向量表⽰(这⼀表⽰充分融合了⽂本的上下⽂信息,并且对⽂本进⾏了深层次抽象),最后我们将⽂本表⽰连接⾄softmax构建分类模型。
图4. 栈式双向LSTM⽤于⽂本分类
数据集介绍
我们以为例进⾏介绍。IMDB数据集的训练集和测试集分别包含25000个已标注过的电影评论。其中,负⾯评论的得分⼩于等于4,正⾯评论的得分⼤于等于7,满分10分。
aclImdb
|- test
|-- neg
|-- pos
|- train
|-- neg
未来的科技作文|-- pos
Paddle在datat/imdb.py中提实现了imdb数据集的⾃动下载和读取,并提供了读取字典、训练数据、测试数据等API。
配置模型
在该⽰例中,我们实现了两种⽂本分类算法,分别基于⼀节介绍过的⽂本卷积神经⽹络,以及[栈式双向LSTM](#栈式双向
LSTM(Stacked Bidirectional LSTM))。我们⾸先引⼊要⽤到的库和定义全局变量:
from __future__ import print_function
import paddle
import paddle.fluid as fluid
import numpy as np
import sys
import math
CLASS_DIM = 2    #情感分类的类别数
幽愤诗EMB_DIM = 128    #词向量的维度
HID_DIM = 512    #隐藏层的维度
STACKED_NUM = 3  #LSTM双向栈的层数
BATCH_SIZE = 128  #batch的⼤⼩
⽂本卷积神经⽹络
我们构建神经⽹络convolution_net,⽰例代码如下。 需要注意的是:fluids.quence_conv_pool 包含卷积和池化层两个操作。
#⽂本卷积神经⽹络
比例比你def convolution_net(data, input_dim, class_dim, emb_dim, hid_dim):
emb = bedding(
input=data, size=[input_dim, emb_dim], is_spar=True)
conv_3 = fluids.quence_conv_pool(
input=emb,
num_filters=hid_dim,
filter_size=3,
act="tanh",
pool_type="sqrt")
权力的游戏结局conv_4 = fluids.quence_conv_pool(
input=emb,
num_filters=hid_dim,
filter_size=4,
act="tanh",
pool_type="sqrt")
prediction = fluid.layers.fc(
input=[conv_3, conv_4], size=class_dim, act="softmax")
return prediction
⽹络的输⼊input_dim表⽰的是词典的⼤⼩,class_dim表⽰类别数。这⾥,我们使⽤ API实现了卷积和池化操作。
栈式双向LSTM
栈式双向神经⽹络stacked_lstm_net的代码⽚段如下:

本文发布于:2023-06-18 22:38:40,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/986442.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:神经   卷积   循环
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图