一种通过self-attention机制生成多维度aspect的句向量模型
这篇博客主要借鉴了IBM沃森实验室的2017年ICLR会议的论文《A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING》。根据self-attention机制生成针对一个句子的多维度表征向量。就我个人来看,过去一提到attention这种基于注意力的模型,特别是用在情感分类方面,一般来说一定要和一个具体的任务联系在一起,这样才有attention的对象,比方说aspect这种任务,是分析一句话针对某个话题的情感,就像作者自己在论文里说的“For some tasks people propose to use attention mechanism on top of the CNN or LSTM model to introduce extra source of information to guide the extraction of sentence embedding. However, for some other tasks like sentiment classification, this is not directly applicable since there is no such extra information: the model is only given one single sentence as input.”。我之前也一直以为,针对单条句子的情感分析,是无法引入attention机制的,但是这边文章提出的一种方法,确很巧妙的解决了这个问题,下面来讲一下他们的策略。
首先我们假设一句话有n个单词,
然后把
注意这个A的生成方式是整个文章的精华所在,其中A的维度是r*n,
其实说到这里,整个模型其实已经介绍完了,可以看出整体的模型还是相对来说比较简单的,但是还有下面几个点需要注意:
1 既然模型的初衷是想针对一个句子的r个角度来生成r个系数向量,那么我们肯定希望这r个角度要尽可以的不同,不然如果优化出的权值矩阵A的r行都是相似的权值分布,那么整个模型就失去了最开始的设计目标。如何能够保证模型生成的权值矩阵A中的r套权值系数的分布尽可能的不同,这就需要增加一个正则项来对模型进行约束,这个约束保证生成的r个分布具有最大的差异性,作者自己构造了一种独特的正则项,如下所示:
这个F代表了一个矩阵的frobenius范数,定义如下:
其实简单就求矩阵里所有元素的平方和,下面我们再回到计算p的那个式子中去,可以看出p中的对角线元素是r个系数向量本身各自的内积,他们和单位矩阵相减,相对于
总而言之加上了上述的正则项,就能保证模型在优化时候得到的解能够使模型提取到系数向量提取到原始句子中不同角度的信息。
2 就是说在生成了r套系数向量之后,我们根据每一套系数向量结合隐藏层状态句子H都能得到一个句向量,也就是说原始的句子我们可以得到r套句向量,即原始句子的r个表征。常规来说,如果是情感分类那就是把这个r向量进行拼接,直接一个全连接层加上softmax,但是这样就会导致模型的参数十分的复杂,为了解决这个问题,作者提出了一种简化的方法,如下图所示:
最底层那个u*r 维度的M矩阵,就是r套系数向量生成的原始句子的表征形式,相反的是再往上不是直接和全连接层相连,而是采取一种简化的方式,使M中的部分元素和中间缓冲层的矩阵