基于注意力的卷积神经网络关系抽取模型Attention CNNS

基于注意力的卷积神经网络关系抽取模型Attention CNNS

模型源自:论文Relation Classification via Multi-Level Attention CNNs

要点

本模型的精髓在于使用了两次注意力机制与输入数据特征组合。对于输入数据而言考虑了与语义相关的词向量,与实体位置相关的位置向量,这两种向量进行拼接构成了最初始的向量。使用滑动窗口的方式进行获取目标词与周围词组合在一起的综合向量。第一次的注意力机制应用在实体与序列中每个词的相关性。将相关性矩阵与输入的综合词向量矩阵相乘构成了一个二维矩阵,该矩阵使用卷积提取特征后对卷积结果使用第二次注意力机制进行捕获视窗与关系的相关性。再将卷积结果与相关性矩阵相乘获取出最后的输出结果。

前置条件

首先默认为序列中的实体已经被标记出来了。关系的种类是确定的,每一种关系都会有这个关系对应的向量进行表达,可以是通过trans系列的算法获取的向量,也可以是其他算法,反正这个向量已经是拿到了的。词向量已经训练完毕,已经生成了词向量库。

模型结构

基于注意力的卷积神经网络关系抽取模型Attention CNNS_第1张图片
这里假设的是输入语句为:Fizzy drinks and meat cause heart disease and diabetes。实体分别为drinks和diabetes,这两个实体之间呈现的是因果关系。

损失函数

论文提出的距离

基于注意力的卷积神经网络关系抽取模型Attention CNNS_第2张图片
这里首先定义误差值,Wo表示的网络的输出,这个输出输出的是关系向量,Wo/|Wo|实际上表示归一化的意思,后面的WyL认为是正确的关系向量,向量之差求二范式。如果预测值与标准关系向量向量距离很小,则表明这种距离很小。基于这种距离提出损失函数
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第3张图片
损失函数中β后面的是L2正则,前面有两项,第一项就是预测值与正确关系向量的距离,第二个中的y值表示的是非正确关系向量的距离,这里就会存在关系有很多个,只有一个关系向量是正确的,其他都作为错误关系向量,而这里选取的是其中距离最大的。
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第4张图片
由此可见实际上在损失函数中的第二项实际计算的时候是计算了除正确关系向量外其他所有向量与预测向量的距离,取出的是最大的作为损失函数中的第二项。
回过头看整个损失函数,不难发现这个函数的思路,首先是预测值与正确关系向量的距离,如果预测的很准,这个距离很小,那么该预测值与不正确关系向量的距离就会很大,损失函数中正好是1减的关系。两项之和越小,说明预测的越准,后面的L2正则只是为了防止过拟合。

输入数据

word embedding 词向量
这个很好理解,就是提前训练好的词向量,在模型图中是Wid
position embedding 位置向量
表明词处于语句中的位置的向量,这种位置信息是当前词距离两个关系实体分别的词序距离,比如第一个实体处于语句中第三位置,第二个实体处于语句中第八个位置,那么第一个词的位置向量输入就是(2,7),这里的2与7两个数值分别就是对应的当前词到实体1的距离和实体2的距离。在模型图中是Wi1p和Wi2p。
trigram信息
这个是上下文信息的向量,所谓上下文信息是指定义一个滑动窗口,假设滑动窗口的长度是2k,以目标词为中心,截取目标词左右各k个长度的上下文词作为上下文信息,将这些词的词向量与位置向量拼接起来构成上下文向量。这个向量的在模型图中没有给出,他实际的输入位置还是在计算过注意力之后。

模型计算过程

首先构建需要输入的词向量(word embedding )与位置向量(position embedding )的拼接向量,该向量可以表示成
在这里插入图片描述
上面WiM是为了后续构建trigram信息用的,所以这里只要定义好窗口宽度,那么trigram信息就能表示成
在这里插入图片描述
Zi这里已经准备完毕,但是这不是直接输入模型的数据。模型图中的左下方window operation就是表达了计算Zi的过程。
模型的思路是要把输入的词向量序列与实体做相关性计算,也就是第一层的attention机制,原文中提到的使用对角矩阵初始化attention机制的初始矩阵。为什么这么做我没懂,我估计是因为在计算过程中,顺序的向后计算每一个词的相关性,对角矩阵对角线上的值实际就是当前词本身。
在这里插入图片描述
这个过程表示词向量Wi与实体向量ej进行相关性计算,这种相关性计算用的是向量内积的形式。计算出来的Aiij表示的就是当前词Wi与实体向量ej的相关性也就是attention值。因为有两个实体,所以实际上该词会去计算两次attention值。
将所语句中所有词逐个对j实体进行计算attention值之后获得序列词与实体的相关矩阵
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第5张图片
因为有两个实体,实际上会计算出两个αij,这个过程对应了模型图中左下角和右下角的input att matrix Aj的过程。
这个时候将得到的两个注意力矩阵αij与trigram信息Zi进行组合计算,因此实际上准备的输入信息Zi在这个时候才送入模型。
然而论文中给出了三种计算方式,三种计算都将会生成一个二维的大矩阵,这个矩阵就是将来用作卷积的矩阵。
三种方式分别是
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第6张图片
在这里插入图片描述

基于注意力的卷积神经网络关系抽取模型Attention CNNS_第7张图片

每一个ri实际就是一个Zi与他的注意力计算值综合计算出来的,可以看到两个α值,分别代表的是与两个实体的注意力值。将所有的ri整合起来构成R矩阵,该矩阵就是模型图中中间红色网格部分。这个二维矩阵作为后面的卷积输入。
在这里插入图片描述
上式表达的是卷积过程,卷积的激活函数采用的是tanh,Bf为偏置,Wf为卷积核的参数。获得的R其实也是也是卷积后的二维矩阵,依然可以看做是一个图用来继续卷积,这里只做了一次卷积,该动作对应的是模型图中的中间红色网格状二维矩阵卷积到中间左边的矩阵过程。
通常卷积之后是池化层,常规的池化常采用max或者avg,但是这个模型并没有使用常规池化,而是自定义了注意力偏置池化attention based pooling层进行替代常规池化。
R矩阵通过卷积后获得的R
矩阵实际上就是以卷积核大小的视窗提取出来的词与词周围的词综合的信息,而这些信息对于分类而言可能是具有不同程度的重要性,可以想象成R矩阵中的每个元素对分类的相关性是不同的,也就是每一个卷积的视窗对分类的相关性不同。未来表现这种不同的相关性,引入了G矩阵,用来表达相关性。
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第8张图片
WL矩阵只的是所有的关系向量构成的二维矩阵,我各人理解是R
矩阵是经过了卷积之后的二维矩阵,在矩阵shape上已经发生了改变,而WL是一个固定shape的矩阵,两个矩阵shape可能会不一致,这里就通过一个中间矩阵U进行连接,使得两个矩阵完成了相关性的计算获得了G矩阵。G矩阵就表示了卷积的视窗与每一个关系的相关性。
对G矩阵进行softmax操作,将相关性的值转变为概率,这样就表示每一个视窗分别对应每一种关系的概率。
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第9张图片

这个公式看起来很牛逼,好像很复杂,实际上就是指softmax操作,不要被公式忽悠住了。
从构建G矩阵,到对G矩阵进行softmax操作,最后获得的是Ap矩阵。这个过程对应了模型图中第二层从黑色矩阵向右,获得了G矩阵,再斜向左上进行softmax操作,获得Ap的过程。
这里获得了最后的视窗与关系的注意力值Ap,以及视窗本身(也就是卷积结果)R*。现在直接将两个矩阵相乘计算出最后的矩阵并取出最大值,以及最大值对应的索引。
基于注意力的卷积神经网络关系抽取模型Attention CNNS_第10张图片
上式完成的就是这个过程。对应了模型图中左上角最后的计算。

你可能感兴趣的:(基于注意力的卷积神经网络关系抽取模型Attention CNNS)