SGM:Sequence Generation Model for Multi-Label Classification 使用序列生成模型做多标签文本分类
这是北京大学Pengcheng Yang在2018年发在Coling上的当年的best paper。
本文首次提出用序列生成的角度来做多标签分类。因为文本不同部分对不同标签的重要性不同,且多标签之间是具有相关性的,之前的做法都忽略了这两点,所以作者提出了这种基于注意力机制的序列生成模型做多标签文本分类。使用seq2seq解决标签间相关性,使用注意力机制解决不同标签的重要性。
文章目录
背景知识
(一)seq2seq
见
(二)Attention注意力机制
见
(三)sigmoid和softmax以及分类器链乃至本文的解决办法
之前做分类都是softmax然后找最大值对应标签,但显然在多标签分类里比较难弄。所以我们使用多个sigmoid代替softmax,不过这也会带来两个问题:
- 计算量大
- 每个二分类器相互独立,学不到标签之间的相关性。
这就有人提出了分类器链,即每次预测出的标签作为新的特征和之前的特征一起预测新特征,这很好地解决了标签间相关性问题,但显然在数据和标签较多时大大加剧了计算量大的问题。
所以作者使用seq2seq解决标签间相关性,使用注意力机制解决不同标签的重要性,双向的LSTM架构+Attention可以超越分类器链的效率和精度。
(四)Mask Softmax
本文的mask softmax,是如果 l i l_i li在之前时间步已经预测过,则这个标签softmax里面加一个 − ∞ -∞ −∞,softmax对应概率就会变为0。
(五)Global Embedding
上一时间步预测错的话,下一时间步很大概率也预测错,这就是曝光误差问题。所以需要减少上一步影响,或者说自适应减小上一步影响。这就有了这个方法。
本文里把上一步的embedding——
e
e
e和全部标签的embedding——
e
‾
\overline{e}
e做全连接得到权重H,再用权重和这两个embedding去计算出当前步输入下一步的embedding——
g
g
g。公式如下:
这里是借鉴Highway Net(高速公路网络)或者说门控结构的思路,可以去对比一下。
SGM
首先,对label按出现频率进行排序,这样就完成由粗粒度到细粒度的标签分类排列,例如给一套题打标签,“高考"标签出现次数一定多于"物理题”。另外一个角度,出现次数多的标签会训练更好,会有助于后面标签的训练。
标签序列从<GOS>开始,<EOS>结束。
在Encoder端对特征进行双向LSTM+Attention的编码,这里把
s
t
s_t
st和
h
i
h_i
hi组合作为key和value,query像Han Attention一样自己设置了一个v。
h
i
h_i
hi是双向LSTM对应正反向
h
i
h_i
hi的concat(拼接)起来的组合。
Decoder端使用上一时间步信息
S
t
−
1
S_{t-1}
St−1、Attention编码后的
C
t
C_t
Ct和上一步预测后标签
y
t
−
1
y_{t-1}
yt−1进行下一步预测。每一步预测时使用MS(mask softmax 蒙面softmax)把预测出来的标签从本次标签列表去掉,以保证每次预测到标签不会再次被预测;对于预测出的标签做GE(global embedding 全局嵌入)后加入下一时间步预测。
最后使用交叉熵损失函数和Beam Search找到top-k个标签,直到<EOS>停止。
可以看到其实也不难,主要是attention出现之前大家没这么想过。但我在拿到题目的时候只能猜到用了Seq2Seq,在看完摘要后也没有猜出全部结构,可见还是有段路要走的。
评价指标使用了HL和mirco-F1。HL是对预测到无关的和没预测到的一个评分。
现在主要问题是标签过多的时候准确率直线下降。