[关闭]
@habits 2017-11-05T12:37:14.000000Z 字数 5983 阅读 6328

Attention Modeling for Targeted Sentiment的理解与重现



一、导读

本文主要重现了论文Attention Modeling for Targeted Sentiment,这篇论文由Jiangming Liu创作并发表在EACL2017。通过阅读本文,你将会学习到:

二、问题

Targeted Sentiment Analysis是研究target实体的情感极性分类的问题。只根据target实体,我们没有办法判断出target实体的情感极性,所以我们要根据target实体的上下文来判断。那么,第一个要解决的问题就是:如何建立target实体和上下文之间的关系

在这篇论文之前,已经有了很多种做法。在Vo and Zhang(2015)的论文中提出的方法是:把一个句子拆分成了三部分,target部分,left context部分和right context部分(如图一所示)。在Zhang et al.(2016)的论文中提出,用三个gated神经元来控制target,left context和right context之间的交互。在Tang et al. (2016)的论文中提出的方法是:把target的embedding向量与它的上下文的embedding向量连接成为一个特殊的向量,然后使用递归神经网络分别对left context和right context进行编码。

以上两种方法都对解决第一个问题作出了很大的贡献,但是以上方法仍然没有明确的表示出每一个单词对target实体情感极性贡献的大小。所以第二个问题就是让机器学习到上下文中每个词对target实体的情感极性的贡献度

先简单的介绍一下注意力机制。从视觉的角度来说,注意力模型就无时不刻在你身上发挥作用,比如你过马路,其实你的注意力会被更多地分配给红绿灯和来往的车辆上,虽然此时你看到了整个世界;比如你很精心地偶遇到了你心仪的异性,此刻你的注意力会更多的分配在此时神光四射的异性身上,虽然此刻你看到了整个世界,但是它们对你来说跟不存在是一样的。那么在判断target实体的情感极性上,如下面这句话:

She began to love [miley ray cyrus]1 since 2013 :)

首先分析这句话,miley ray cyrus就是target实体,1代表情感是积极的。假设我们的视线是一种资源,我们只能把资源分配给更能表达情感的词上面。‘since 2013’对情感的表达没有任何意义,我们把资源分给没有任何意义的词就是一种浪费,也是十分的不合理的。而‘love’和‘:)’这种能表达情感的词就会吸引我们更多的注意力。于是left context和right context就可以由加权和来表示:

left context = 0.1 * 'she' + 0.1 * 'began' + 0.1 * 'to' + 0.7 * 'love'

right context = 0.1 * 'since' + 0.1 * '2013' + 0.8 * ':)'

就如同图一所示,我们的注意力应当聚焦于颜色很深的词上,颜色越深,代表它的贡献度越大。

灰度图

图一


三、注意力机制模型

注意一下:'·'代表矩阵相乘,''代表按位相乘

论文中提到了三种模型(接下来将要使用的三种不同的attention模型)。这三种模型都需要经过embedding层和BILSTM层:

首先经过embedding层得到,然后经过BILSTM把数据转换成另一种分布式向量表示,得到,公式如下:

target表示,的平均值。left_context就是right_context就是

1.Vanilla Attention Model(BILSTM-ATT)

第一个attention模型是Vanilla attention model。首先通过计算每一个词的权重是一个标量),与每一个词的向量表示相乘后再求和,最后得到整句话s的向量表示:

的公式:

的值是由target和上下文单词共同决定的。从下面公式可以看出,每个词与target相连接,经过一个线性层与tanh激活函数,然后与张量U相乘得到一个标量。公式如下:

通过以上公式,能求得该句子的最后表示s,然后用s来预测情感标签可能的分布p,最后经过一个线性层和一个softmax激活函数得到预测值p。求p公式如下:

模型流程图如下:

Vanilla Attention Model

2.Contextualized Attention Model(BILSTM-ATT-C)

Contextualized Attention Model是在Vanilla Model的基础上衍生的一个模型。这个模型将上下文拆分成两部分,分别为left_contextright_context。然后对left_contextright_context分别做与Vanilla Attention Model一样的操作。即:

这三个向量经过线性层的和,再经过softmax,得到预测值p。公式如下:

3.Contextualized Attention with Gates(BILSTM-ATT-G)

受到LSTM中gate的启发,BILSTM-ATT-G摒弃了BILSTM-ATT-C中直接过线性层的方法,采取了gate的方法。考虑到代表情感的特征可以在左边语境(left_context)中或者右边的语境(right_context)中,于是采用了gate的方法控制这三个数据流的流出。这三个gate分别是,公式如下:

并且, , 要满足,即三个向量的和为1向量。
接下来gate与数据流按位相乘得到最后的向量表示:

最后经过一个线性层和softmax得到预测值p


四、编码

程序使用的Pytorch框架,因为Pytorch框架有以下优点:
Tensors and Dynamic neural networks in Python with strong GPU acceleration.

具体代码详解:
Vanilla Model不用把句子分割成left_contextright_context。因此很容易实现batch_size > 1的设计。主要的层次有embedding层,dropout层,双向lstm层,线性层linear_2。linear_1层和参数u主要是为了计算的。

  1. class Vanilla(nn.Module):
  2. def __init__(self, embedding):
  3. super(Vanilla, self).__init__()
  4. self.embedding = nn.Embedding(embed_num, embed_dim)
  5. self.embedding.weight.data.copy_(embedding)
  6. self.dropout = nn.Dropout(dropout)
  7. self.bilstm = nn.LSTM(embed_dim,hidden_size,dropout)
  8. self.linear_1 = nn.Linear(hidden_size,attention_size,bias=True)
  9. self.u = Parameter(torch.randn(1,attention_size),
  10. self.linear_2 = nn.Linear(hidden_size,label_num,bias=True)
  11. def forward():
  12. pass

BILSTM-ATT-C和BILSTM-ATT-G模型需要把句子分割成left_contextright_context。编程上很难设计出很好的batch_size > 1的方法,因此使用的是batch_size = 1的方法。这两个模型是Vanilla Model的衍生,所以在代码上有所依赖,因此设计了一个Attention Class,作用是为了计算s。这个类是计算图的一部分,输入是context和target,输出是s

  1. class Attention(nn.Module):
  2. def __init__(self):
  3. super(Attention, self).__init__()
  4. self.linear = nn.Linear(input_size * 2, output_size, bias=True)
  5. self.u = Parameter(torch.randn(output_size, 1))
  6. def forward():
  7. pass

BILSTM-ATT-C模型会用到Attention类。
BILSTM-ATT-G模型中的操作,使用softmax函数实现该操作。

  1. # cat z_all, z_l, z_r
  2. z_all = torch.cat([z_all, z_l, z_r], 1)
  3. # softmax
  4. z_all = F.softmax(z_all)

详细代码参考代码在github上


五、实验结果与结论

本文实现了3种模型,并在2种数据上进行了三分类的实验。

1.数据

数据集的来源:
实验的两个数据集,一个是Tang et al. (2016) (T-Dataset)的叫做benchmark training/test dataset,另外一个the training/dev/test dataset of Zhang et al. (2016) (Z-Dataset),包含MPQA corpus2 and Mitchell et al. (2013)’s corpus3。

Z-Dataset:

Z-Dataset #target #positive #negative #neutral
training 9489 2416 2384 4689
development 1036 255 272 509
test 1170 294 295 581

T-Dataset:

T-Dataset #target #positive #negative #neutral
training 6248 1561 1560 3127
test 692 173 295 346

2.实验结果

Z-Dataset上的实验结果:

model myAcc 论文Acc my Macro F1 论文 Macro F1
BILSTM-ATT 73.6 73.5 69.8 70.6
BILSTM-ATT-C 74.1 74.1 70.9 71.3
BILSTM-ATT-G 74.9 75.0 71.2 72.3

Z数据集精确度与宏平均F1值(%)

model Macro F1 positive F1 negative F1 neural F1
BILSTM-ATT 69.8 58.63 69.83 81.08
BILSTM-ATT-C 70.9 59.76 72.42 80.52
BILSTM-ATT-G 71.2 58.06 74.52 81.20

Z数据集F1值(%)

T-Dataset上的实验结果:

model myAcc 论文Acc my Macro F1 论文 Macro F1
BILSTM-ATT 72.2 72.4 70.0 70.5
BILSTM-ATT-C 72.8 72.5 70.7 70.9
BILSTM-ATT-G 74.1 73.6 71.8 72.1

T数据集精确度与宏平均F1值(%)

model Macro F1 positive F1 negative F1 neural F1
BILSTM-ATT 70.0 66.66 66.04 77.44
BILSTM-ATT-C 70.7 67.90 66.88 77.39
BILSTM-ATT-G 71.8 68.08 68.68 78.89

T数据集F1值(%)

由以上结果可以得知,使用attention model在情感分类任务上取得了更好的效果。在Vanilla Attention Model、Contextualized Attention Model和Contextualized Attention with Gates三种模型上,使用门的思想提升了程序的精确度,达到了更好的效果。


六、引用

Attention Modeling for Targeted Sentiment
自然语言处理中的Attention Model:是什么及为什么
Hierarchical Attention Networks for Document Classification
Document Modeling with Gated Recurrent Neural Network for Sentiment Classification

Attention Pytorch Sentiment-Classification Targeted-Sentiment deep-learning

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注