Context-Sensitive Twitter Sentiment Classification Using Neural Network

Introduction:

传统方法对待twitter的情感分类时看作一个文本分类的问题,主要是提取有效的特征。其中特别的是2013年的使用一些不同的情感词语和很多手工设计的特征。

上述方法关注的是推文本身的特征模型,但是并没有涉及到目标推文的上下文的信息,这就限制了他的性能。推文们,注意,们,可以看作消息流,或者说一个长文本,比如说成是一段对话,或者说一个主题都是可以的。

作者举了一个例子,两条连续的推文,相似的主题,第二条很难判断出来,但是第一条是负情感,所以对于其来说,很容易判断出第二条应该也是负面的推文。

2013,Vanzo等人提出了一个模型是将一个推文和其上下文看作一个序列,使用SVM HMM去预测其情感的标签。他们构造了两个类型的文本们,分别是基于对话的文本,包含对于一个讨论的很多推文;同时也有基于主题的文本们,包含对于一个标签的历史数据。这两个类型对于提高情感的分类都很有用。

(一个就是相当于一串连续的回复;另一个就是同一个主题可能很多人都是有时间跨度的回复)

不过!局限性是,推文们的现行假设,直觉上来说,一条推文并不会在时间线上仅仅影响几条推文,所以推文们之间的引用关系是一个很复杂的图结构。除此之外,Vanzo等人,使用一个手工提取特征的模型,这个很难去设计。所以在这篇文章中,我们可以将模型的推文作为一个给定的数据集合,使用神经网络去自动提取有用的特征。

(两个劣势,第一个是索引的关系可能很复杂,而svm hmm只能比较简单的特征;第二,提特征的方法也是传统的,不能自动的结构化的提取,所以祭出神经网络大杀器)

我们首先使用神经网络构建了一个baseline的基准,可以看作是和传统的线性模型

(也就是上文所说的基于单条推文的最好结果,和使用svm hmm对于多条推文进行处理的最好结果)

的一个比较。baseline模型是将单个的word embedding features自动提取出来,并且自动进行特征融合。然后我们继续进行探索,扩展了baseline系统,成为了一个context-based sub neural network,能够自动从一些文本中自动提取特征。除了基于对话和机遇主题的文本,我们还探究了一个文本基于同一个作者的历史的,可以作为一个推文的先验情感。结果显示,通过使用context-based sub network,我们的模型将macro-F从80.68%提升到91.33%。

A Context-based NN model for twitter sentiment classification

模型见图2,有两个主要的部分,第一个部分是一个局部特征提取的sub NN,仅仅使用tweet自己的局部信息,右边的部分,是上下文特征提取的网络。我们从基于对话的文本们,基于主题的文本们和基于作者历史信息的文本们中进行特征的学习。

文本们的产生

(原来以为比如说是conversation-based context,就是按照对话来对所有数据进行分类,但是实际发现,其实是对于每个twitter都是不一样的,对于每个twitter都是寻找和它在同一个对话下面的,最多l条推文,所以每一个推文都要算一下其对应的context们)

基于对话的文本

对于每个推文,从数据集合中选择出l条推文们,作为对于特定推文l的conversation-based的context generation 的推文们。

(所以说generation,因为根本不是按照原始数据进行的划分,而是根据特定推文进行的重新选择,那么问题来了:作者是随机选择的,还是顺序选择的呢?随机选择能否提升其泛化能力呢?)

基于作者的文本

对于每个推文来说,基于作者的推文们是一个推文的集合,在这个集合中,所有的推文们都是同一个作者的,字母l 是集合的上限。

基于主题的文本

也是类似的思路,由于推文是有标签的,所以选择其他的推文,至少含有一个重叠的标签

(问题来了:为什么选择的微博都是要比当前这条推文先发出来的?)

Local Sub Network

Local Sub Network包含五层,分别是输入层,卷积层,池化层,非线性组合层和一个输出层。

输入层

对于每一个词,都根据其在句子中的位置映射成一个低维度的实值向量,我们使用E去映射这个向量到D维度中,V是词汇的大小,E去映射的时候可以随机初始化,或者根据原始数据去初始化

卷积层

卷积层是用来去总和词性上的n元信息(n-grams),n元信息在推文的情感分析中非常有用,所以我们将其运用到我们的卷积神经网络中,给定输入层,e(w1)…e(wn),我们将其运用到我们的卷积操作中去获得一个新的序列。对于每一个向量来说,因为是采用n-grams,所以输入的是三个d维的向量,将这个向量和一个偏置组合在一起,乘矩阵就能得到最后的结果。

(其实这个只不过是将分开的词语组合起来了,对于向量来说,其实就是一群神经元,一个convolution来说,可以接受3d个神经元,输出的是c个神经元,c中每个神经元都和上一层的3d个神经元和一个偏置相连接,这体现在r中的一行作为其权重,r的一行乘输入的转置后的一列,再加上一个偏置,然后经过tanh作为最后的激活值。

(tanh已经很少使用了,因为其求导比较麻烦,而且效果和sigmoid相差不大,而且后来又进行改进称为relu,实际上神经网络需要的仅仅是一个非线性变换,和具体的函数关系不大)。

下采样层

我们采用下采样的技巧去融合不同的数字特征到一个确定维度的向量,也就是通过链接max min 和 avg似的其维度称为固定的3c维。

(之前的向量长度和文本的长度大小有关,那么如果映射到一个确定的长度上来说)

隐藏层

隐藏层对于固定长度的3c数组做一个全链接的变换之后,将其通过tanh进行非线性变换,映射称为长度为h的向量。

输出层

最终,输出被映射到一个长度为2的向量中,进行classification。

(特征向量长度为h,最后为二分类,类似于一个h长度的线性向量+二分类softmax)

The contextualized Sub Network

我们follow了Bamman的工作,提取了一系列从不同类型的上下文的信息。对于每个类型的上下文信息,我们首先对于其tf-idf值进行排序,将一个推文的上下文文本看作是一篇文档,并且去选择出100个tf-idf值最高的关键词作为特征。
拥有了关键词的集合,我们建立一个最后是pooling的神经网络,融合了这个pooling层和local neural network的pooling层的结果和local sub network相似的一点就是,使用实值向量去描述单词,我们可以使用相同的word的representation。但是在左边local sub network中和右边的contextualized sub network中是不同的embedding矩阵E的。

(这种方法像是不同的小网络的组合,我认为在left的向量化中,主要有三步,第一步就是word embedding将词汇映射称为定长向量,第二步是将向量进行n-gram组合后进行非线性,第三步是将这篇推文进行3c的定长向量化,在这个过程中,我认为其实这个3c的向量就能够代表这篇文章,也就是说右边的网络没必要重新进行计算,或者说tf-idf是可以进行优化的。原方法的tf-idf是对于文本们的最终排序的100个单词进行embedding,但是如果换成是直接对文章的高层次的3c长度的特征进行融合计算,是否最终结果能够更好呢?)

EnhancingWord Representation with Character Embeddings

原来的方法对于单词的表达是通过E矩阵对于固定长度的单词映射之后得到的,这种方法其实效果感觉并不会很好,所以讲左边的网络进行一个更加细致的变换之后,将小的单元变成character,只使用Max pooling,然后喝原始向量进行拼接,效果更好一些。

训练方式

目标:交叉熵尽可能小,最后的损失函数是L2 regularization的交叉熵。所以在update参数的时候除了update之外还需要一个lambda比例缩小。
采用AdaGrad的方法来update。
初始参数设置,按照Glorot的论文,( -(6/(r+c))^(1/2) , (6/(r+c))^(1/2) ),r和c分别是行和列。
E采用从tweet数据集合进行预训练的word embedding。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值