有噪声小样本分类
2019-12-16 Jay Saligia 28 mins 鉴湖的秋update: 2019.12.16
update: 2019.12.17
update: 2019.12.18
读 Hybrid Attention-Based Prototypical Networks for Noisy Few-Shot Relation Classification
目前对于关系分类(relation classification,RC)使用的方法主要还是依赖于远程监督(distant supervision,DS)。DS的简介在上一篇文章中
本文通过将RC看作小样本学习问题(few-shot learning,FSL)问题来形式化RC提供了一种不同的观点看RC。当前的FSL模型主要是应用在低噪声的任务上。本文使用一种混合注意力原型网络来解决有噪声的小样本RC。设计了instance-level和feature-level的注意力原型网络,显著的强化了有噪声的FSL下的RC模型的表现和鲁棒性。除此之外,该机制还加速了RC模型的收敛。
与vanilla prototypical networks类似,本文也采取神经网络去嵌入(embed)支持集(support set)中所有的实例并且对通过这些实例嵌入后的每个关系计算一个特征向量(原型)。然后从一个query中提到的的实体对之间的关系通过衡量query instance embedding与关系原型之间的距离来将关系分类。对于有噪声的小样本RC,数据和特征都是稀疏的。支持集中的小的噪声有可能造成关系特征的巨大偏差并且不是关系特征空间中的所有维度都是有足够的识别力去支持最终的分类。本文设计的混合注意力机制可以减轻噪声数据和稀疏特征的影响。
混合注意力模型
instance-level注意力模块为了选择在支持集中选择更多的有效的实例,并在训练时对实例降噪。feature-level注意力模块可以将特征空间中的重要维度标出并且针对不同的关系做特定的形式化,这样做可以减轻特征稀疏的问题。
通过混合注意力,模型更加关注那些重要的实例和特征,FSL不仅更加高效和健壮,并且有更少的训练限制和更快的收敛。
相关符号和定义
小样本RC的目的是预测一条语句实例\(x\)中提及的实体对\((h,t)\)之间的关系\(r\)。给定一个关系集合\(\mathcal R\)和一个支持集\(\mathcal S\),\(S\)的定义:
\[S=\{(x_1^1,h_1^1,t_1^1,r_1),\dots,(x_1^{n_1},h_1^{n_1}, t_1^{n_1},r_1),\\(x_m^1,h_m^1,t_m^1,r_m),\dots,(x_m^{n_m},h_m^{n_m},t_m^{n_m},r_m),\}\\r_1,r_2,\dots,r_m\in \mathcal R\]其中\((x_i^j,h_i^j,t_i^j,r_i)\)定义语义上为实例\(x_i^j\)预测在实体对\((h_i^j,h_i^j)\)上有关系\(r_i\)。实体\(h_i^j,t_i^j\)在实例\(x_i^j\)中被提及。每个实例\(x_i^j\)被表示为词语序列\(\{w_1,w_2,\dots\}\)。
在FSL应用中,关系\(r_i\)的实例数量\(n_i\)一般很少,小样本RC模型必须从\(\mathcal S\)中的很少的样例中学习到特征和对于任意实例\(x\)的关系\(r\)的预测。对于FSL的设置,采用N路K次,其中\(N=m=\|R\|,K=n_1=\dots=n_m\)。
框架
包含三个部分
Instance Encoder
使用神经网络,将实例的语义编码为embedding。本文使用CNN来做编码器(RNN等也可以)
Prototypical Networks
计算完实例的embeddings后,采用原型网络通过支持集中实例的embedding去对每个关系一个原型。通过比较query中的实例的embedding与每个关系原型的距离,将关系最终分类到距离最短的类别中去。
Hybrid Attention
使用一种基于原型网络的混合注意力机制去强化分类表现和收敛速度。
混合注意力机制包括两个部分,instance-level注意力模块(帮助决定更多和query相关的实例为每个关系计算更好的原型)和feature-level注意力模块(减少特征稀疏的问题和以一种更好的形式衡量空间距离),训练时两种模块一起使用。
Instance Encoder
给定一个实例\(x=\{w_1,\dots,w_n\}\),其中提及了两个实体,通过卷积神经网络来编码原始的实例为一个连续的低维embedding \(\textbf x\),目的是提取实例中的语义。Instance encoder中包含一个embedding层,一个encoding层
Embedding Layer
embedding层的作用是将实例中离散的词语映射为连续的可以用来输入的embeddings。给定一个实例\(x\),将它的每个词语\(w_i\)变为一个实值embedding \(w_i\in \mathbb {R}^{d_w}\)去表示词语的语义和句法意义。这些embeddings由GloVe预训练。
因为更靠近实体的词语会表现对关系的决定性作用越大,本文采取了一种位置(position)embeddings的方法。对每个词语\(w_i\),将它与两个实体的相对距离embed为两个\(d_p\)维的向量,然后将它们连结为统一位置的embedding \(\textbf {p}_i \in \mathbb{R}^{2\times d_p}\)。
«««< HEAD:_posts/2019-12-16-KG(2).md 将word embedding和position embedding连结起来得到每个词语最终的input embedding。将实例中的所有input embedding聚集起来,就得到了可以用于encoding layer的embedding序列,如下: ======= 将word embedding和position embedding连结起来得到每个词语最终的input embedding。将实例中的所有input embedding聚集起来,就得到了可以用于encoding layer的embeddign序列,如下:
45456448d2abea58cc563fd80e7baea1f187807a:_posts/study/2019-12-16-NLP(2).md \(\{\bf{e}_1,\dots,\bf{e}_n\}=\{[\bf{w}_1;\bf{p}_1],\dots,[\bf{w}_n;\bf {P}_n]\},\\\bf{e}_i\in \mathbb {R}^{d_i},d_i=d_w+d_p\times2.\)
Encoding Layer
在编码层,选择CNN来对输入embedding\(\{e_1,\dots,e_n\}\)编码,使其变为最终输入实例embedding \(\textbf x\)。CNN中卷积核的窗口尺寸为\(m\),通过滑动卷积核,得到\(d_h\)维度的hidden embeddings,
\[\textbf{h}_i=CNN(e_i-\frac{m-1}{2},\dots,e_i+\frac{m-1}{2}),\]应用一个最大池化操作来得到\(\textbf x\),
\[[\bf x]_j=max\{[h_1]_j,\dots,[h_n]_j\},\]其中\([\cdot]_j\)表示向量的第j个值。
为了简化说明,把instance encoding操作写成如下形式:
\[\textbf x=f_\phi(x),\]其中,\(\phi\)是instance encoder中的可学习参数。
Prototypical Networks
原型网络的主要想法是使用一个向量(也叫做原型)去代表每个关系。
The vanilla approach
vanilla方法通过对每个关系平均计算所有支持集中的实例的embedding。
\[c_i = \frac{1}{n_i}\sum_{j=1}^{n_i}\bf{x}_i^j,\]其中,\(c_i\)是计算关系\(r_i\)的一个原型,实例embedding \(x_i^j\)是支持集\(\mathcal S\)中关系\(r_i\)的embedding,一共有\(n_i\)个实例。
在vanilla原型网络中,所有的实例被平等的对待。但是,在本文的混合注意力模型中,使用instance-level的注意力去高亮那些支持集中更由关系的实例。
通过下面的式子来计算在序列\(x\)中出现的\(\mathcal R\)中的关系的可能性。
\[p_\phi(y=ri|x)=\frac{\exp(-d(f_\phi(x),c_i))}{\sum\nolimits_{j=1}^{|R|}\exp(-d(f_\phi(x),c_j))}\]其中\(d(\cdot,\cdot)\)是给定的两个向量的距离函数。对于距离函数由很多种选择,这里使用欧式距离。
Hybrid Attention
Instance-level Attention
对于每个关系,初始的原型网络采用对于关系原型的平均值。因为在FSL场景下支持集数据的缺乏,一个与其它实例差别较大的实例会对结果产生较大偏差。并且vanilla小样本模型从支持集种抽取特征前没有具体的query。因此,vanilla模型可能会抽取出对于分类无用的特征。
本文的方法对每个实例给定一个权\(\alpha_j\),有:
\(c_i=\sum_{j=1}^{n_i}\alpha_j\textbf x_i^j,\\\alpha_j=\frac{\exp(e_j)}{\sum\nolimits_{k=1}^{n_i}\exp(e_k)},\\e_j=\textbf{sum}\left\{\sigma(g(\textbf x_i^j)\odot g(\textbf x))\right\}.\) «««< HEAD:_posts/2019-12-16-KG(2).md 其中,\(g(\cdot)\)是线性层,\(\odot\)是element-wise乘积,\(\sigma(\cdot)\)是激活函数,\(\textbf{sum}\{\cdot\}\)是向量中所有元素的和。本文使用tanh作为激活函数,产生结果在[-1,1]之间。 =======
其中,\(g(\cdot)\)是线性层,\(\odot\)是element-wise投影,\(\sigma(\cdot)\)是激活函数,\(\textbf{sum}\{\cdot\}\)是向量中所有元素的和。本文使用tanh作为激活函数,产生结果在[-1,1]之间。
45456448d2abea58cc563fd80e7baea1f187807a:_posts/study/2019-12-16-NLP(2).md
Feature-level Attention
距离函数会很大意义上的影响原型网络的能力,feature-level注意力模型会更多的关注那些区分度大的特征维度,特别的,本文采取一个新的距离函数代替欧氏距离:
\[d(\textbf s_1,\textbf s_2)=\textbf z_i \cdot(\textbf s_1-\textbf s_2)^2\]其中,\(\textbf z_i\)是对于通过feature-level注意力机制抽取的关系\(r_i\)的得分向量(score vector),结构图如下:
feature-level extractor结构
这个提取器根据每个关系的句子表示分布来计算特征的每个维度的线性可分程度。一个维度越有用,相应的得分就会越高,通过将注意力分数乘以差异的平方,改变了距离度量,以更好地适应给定的关系和支持实例。
参数设置
参数设置