Motivation
不同的词/字对分类的影响程度不同,目的是找到那些对分类有重要影响的词/字,并赋予他们更高的权重
模型结构
X:[batch_size, sequence_length, vocab_size] one-hot表示每个词/字的输入数据y:[batch_size, class_nums] one-hot表示的输入数据的标签V:[batch_size, embedding_size, sequence_length] 词向量表示每个词/字的输入数据C:[embedding_size, class_nums] label_embedding矩阵G:[batch_size, class_nums, sequence_length] β \beta β:[batch_size, sequence_length] 第1维为softmax后的概率值,表示经过label的attention后,这个词/字的重要性(权重)z:[batch_size, hidden_size] 文本聚合向量,表示整条数据的信息y:[batch_size, class_nums] 第1维为softmax后的概率值f0:将one-hot表示的词/字映射成word_embedding表示f1:将每条数据的word_embedding聚合成一个向量f2:使用文本聚合向量进行分类,即将z映射到y用来分类前向传播过程
每条数据里的每个词/字,对最后分类结果的影响应该是不同的。 比如说一条文本里有词:湖人、赛前训练等,要分到类别NBA中,"湖人"对应的word_embedding,所占的权重应该高于词"赛前训练"对应的word_embedding。
1.label_embedding矩阵和word_embedding矩阵相乘,并归一化
G矩阵中的一条数据(class_nums × sequence_length)中的每个元素,表示每个词/字的embedding向量与每个label的embedding向量的余弦相似度
C T C^{T} CT:[class_nums, embedding_size] V V V:[batch_size, sequence_length, embedding_dim] ⊘ \oslash ⊘:表示元素逐个相除 G ^ \hat{G} G^:[batch_size, class_nums, sequence_length] 每个元素值为, g ^ k l = ∥ c k ∥ ∥ v l ∥ \hat{g}_{kl}=\left \| c_{k}\right \| \left \| v_{l}\right \| g^kl=∥ck∥∥vl∥ ∥ c k ∥ \left \| c_{k}\right \| ∥ck∥表示 C T C^T CT中一列的L2正则 ∥ v l ∥ \left \| v_{l}\right \| ∥vl∥表示V中一行的L2正则 C T V C^{T}V CTV:[batch_size, class_nums, sequence_length] G G G:[batch_size, class_nums, sequence_length]2.通过引入非线性(使用卷积、激活函数),来提取更高层的,词/字与label的相似性关系,以及连续词/字之间的空间关系 在sequence_length这个方向上,使用class_nums个 [class_nums, 2r+1] 大小的卷积核,对每个字进行卷积,从而得到的新的词/字与label的attention的值,不仅和自己有关,也和周围的词有关。
u l u_{l} ul:[batch_size, class_nums] G中的一列 G l − r : l + r G_{l-r:l+r} Gl−r:l+r:[batch_size, class_nums, width(2r+1)] G中和卷积核进行卷积的部分, l l l表示第 l l l个词/字,卷积核的视野在高为class_nums,宽为左右r个词/字的范围 W 1 W1 W1:[class_nums, width(2r+1), 1, filter_nums] filter卷积核 b 1 b1 b1:[batch_size, class_nums]3.对每个词/字,获取相似性最高的label的相似性值
m l m_{l} ml:[batch_size] 对每条数据来说,是个数字4. m m m矩阵的一行,表示每条数据的每个词/字对应的最相似的label的相似性值,再进行SoftMax转换成概率值,用来表示每个词/字的重要性
β \beta β:[batch_size, sequence_length] m m m:[batch_size, sequence_length]5.v矩阵中,一条数据(一行)的每一个词/字的embedding表示,乘上 β \beta β矩阵的一条数据的一列(该词/字对应的重要性),得到最终的embedding表示,每个词/字都进行这样的操作(embedding表示的各维度和权重相乘),最后所有词/字的embedding表示再相加(即做一个通过权重的average),得到文本聚合表示
z z z:[batch_size, sequence_length, embedding_dim] β l \beta_{l} βl:[batch_size] v l v_{l} vl:[batch_size, embedding_dim]