Induction Networks for Few-Shot Text Classification
论文提出用胶囊网络(Capsules Network)来处理短文本的类表示,从而能够进行小样本的学习。通过关系网络学习Query样本和类表示向量的相似行进行分类。
算法的框架图:
由三个部分组成:Encoder + Induction + Relation
-
Encoder
这个部分比较简单,就是提取特征的Bi-LSTM + Attention部分,这里的Attention精过实验会发现Self-Attention比用lstm_output和hidden计算的Attention效果要好。
h t → = L S T M → ( w t , h t − 1 ) \overrightarrow{h_t}=\overrightarrow{LSTM}(w_t, h_{t-1}) ht=LSTM(wt,ht−1)h t ← = L S T M ← ( w t , h t + 1 ) \overleftarrow{h_t}=\overleftarrow{LSTM}(w_t, h_{t+1}) ht=LSTM(wt,ht+1)
s e l f − a t t e n t i o n self-attention self−attention:
a = s o f t m a x ( W a 2 t a n h ( W a 1 H T ) ) a=softmax(W_{a2}tanh(W_{a1}H^T)) a=softmax(Wa2tanh(Wa1HT))e = ∑ t = 1 T a t h t e=\sum_{t=1}^{T}a_t h_t e=t=1∑Tatht
这里就得到encoder的结果
-
Induction
这个模块是论文的核心创新点:提出用胶囊网络(Capsules Network)来动态的表征类向量,句子向量低层特征通过动态路由算法(dynamic routing)映射到高层特征,在胶囊网络里可以称之为胶囊。通过这个网络就能够学习部分sample对某一类文本分类类别的贡献更大,那么就能够反应文本的类表示。
归纳网络induction net的训练过程如下:
需要将support训练得到的类表示向量 c i c_i ci与query输入的查询向量做相似性比较,从而来判断query的文本是属于哪一类或者是属于新的类别
{ e i j s ∈ R 2 u } i = 1 , . . . , C , j = 1 , . . . , K ↦ { c i ∈ R 2 u } i = 1 C \{e_{ij}^s\in R^{2u}\}_{i=1,...,C, j=1,...,K}\mapsto\{c_i\in R^{2u}\}_{i=1}^{C} { eijs∈R2u}i=1,...,C,j=1,...,K↦{ ci∈R2u}i=1C
为了能够将胶囊网络学习的语义特征空间根据数据的维度映射到任意的维度,在做dynamic routing之前,论文提出先做一步线性映射,在压缩成胶囊尺寸的单位向量:
e ^ i j s = W s e i j s \hat{e}_{ij}^{s}=W_s e_{ij}^{s} e^ijs=Wseijse ^ i j s = s q u a s h ( W s e i j s + b s ) \hat{e}_{ij}^{s}=squash(W_s e_{ij}^{s}+b_s) e^ijs=squash(Wseijs+bs)
接下来就是根据上图所示的代码流程进行动态路由算法,超参数iterate设置的越大,训练会更慢,但是效果也会有一定的提升。动态调整上下两层胶囊的连接权重,并且和为1:
d i = s o f t m a x ( b i ) d_i=softmax(b_i) di=softmax(bi)c ^ i = ∑ j d i j ⋅ e ^ i j s \hat{c}_i=\sum_jd_{ij}\cdot \hat{e}_{ij}^{s} c^i=j∑dij⋅e^ijs
b i j = b i j + e ^ i j s ⋅ c ^ i b_{ij}=b_{ij}+\hat{e}_{ij}^{s}\cdot\hat{c}_i bij=bij+e^ijs⋅c^i
计算 c ^ j \hat{c}_j c^j表示通过链接权重与encoder的点积得到的权重分配(相关性),再更新 b i j b_{ij} bij调节连接强度。
具体的胶囊网络的理解可以看看下一篇博客
-
Relation
通过induction模块得到support set的类表示,接下来就是衡量 c i c_i ci和 e i j e_{ij} eij之间的相关性,就是简单的dnn。论文中是通过定义的一个三维tensor建模类向量和query向量质检的交互关系,再stack起来,进全连接层对关系进行打分,这里用的是sigmoid。
v ( c i , e q ) = f ( c i T M [ 1 : h ] e q ) v(c_i,e^q)=f(c_i^TM^{[1:h]}e^q) v(ci,eq)=f(ciTM[1:h]eq)r i , q = s i g m o i d ( W r v ( c i , e q ) + b r ) r_{i,q}=sigmoid(W_rv(c_i,e^q)+b_r) ri,q=sigmoid(Wrv(ci,eq)+br)
但是通过实验,relation可以变化和优化的方法很多,直接计算PCC或者cosine距离都能够得到不错的效果。
下面是论文的具体算法过程:
在每个episode中来迭代模型,首先是从训练集类别中随机抽取 C C C个类,然后从每个类中选择部分样本构成Support Set,并且会从剩余的样本中抽取样本构成Query Set。在论文中是能够不需要做finetune来泛化学习新的类别的。并且需要训练的episode非常大,需要超过 C k w a y n u m c l a s s C_{k_way}^{num_class} Ckwaynumclass的次数。因此也可以尝试做一些finetune,也会达到不错的效果
论文地址:Dynamic Memory Induction Networks for Few-Shot Text Classification
转载:https://blog.csdn.net/KuAI_KST/article/details/117037092