论文链接
https://arxiv.org/pdf/1805.11080.pdf
Idea:
这篇文章的主要想法是把抽取式摘要和生成式摘要结合起来,首先训练一个抽取模型选择出重要句子,然后训练一个生成模型,在抽取出的句子的基础上重写得到最终的摘要,由于总的训练不可微分,所以这里利用强化学习,策略梯度来进行训练。相比其他的baseline,这个模型的速度很快。
method
extractor
抽取模型如上所示,首先用CNN对每个句子编码得到 r j r_j rj?,然后再用一个双向LSTM编码,用来捕获全局的上下文信息,将每个句子编码成表示 h j h_j hj?。然后选择句子,这里用LSTM训练了一个指针网络,公式如下:
e t e_t et?计算公式如下,这里的 z t z_t zt?代表解码器的输出
abstractor
生成模型利用抽取出的重要句子生成摘要,这里使用seq2seq模型,同时引入copy机制
learning
抽取模型难以微分,这里用策略梯度进行训练,因为抽取模型和生成模型会互相影响,这里首先用最大目标策略分别训练抽取模型和生成模型,让抽取模型选择最好的句子,让生成模型尽可能生成好的摘要,再用强化学习训练整个模型
对于抽取模型,因为我们的句子选择是一个文本分类任务,而摘要数据集都是生成任务,没有对应的标签,这里首先利用ROUGE-L生成假标签,公式如下,有了假标签就可以利用交叉熵损失训练抽取模型
对于生成模型,将每个摘要句子和抽取模型抽取出的重要句子组成训练对,然后利用交叉熵损失训练,和一般的序列模型一样
用强化学习训练整个模型,过程如下图所示,
Extractor观察整个文档和已经抽取出的句子,做出ACTION,选择出一个句子 d i d_i di?,利用Abstractor生成 g ( d t ) g(d_t) g(dt?),和 s t s_t st?计算Reward,公式为 r ( t + 1 ) = R O U G E ? L F 1 ( g ( d j t ) , s t ) r(t+1)=\mathrm{ROUGE}-\mathrm{L}_{F_{1}}\left(g\left(d_{j_{t}}\right), s_{t}\right) r(t+1)=ROUGE?LF1??(g(djt??),st?),
这里使用Actor-critic算法,梯度计算公式如下:
最小化loss
这里有一个问题,如何决定抽取句子的数目,这里采用的方法是策略行动空间中添加一个停止动作,具体为在训练阶段添加一个可训练参数 v E O E v_{EOE} vEOE?,对应的ROUGE的得分为 ROUGE-1 F 1 ( [ { g ( d j t ) } t ] , [ { s t } t ] ) \text { ROUGE-1 }_{F_{1}}\left(\left[\left\{g\left(d_{j_{t}}\right)\right\}_{t}\right],\left[\left\{s_{t}\right\}_{t}\right]\right) ROUGE-1 F1??([{
g(djt??)}t?],[{
st?}t?]),如果没有更好的抽取句子了,模型就会学习停止,避免抽取额外的无用的句子。
这篇文章还采用了一个简单的重排策略,来减少句子间的重复性,根据重复的三元组数对beam search的组合进行重排,越少越好
代码链接:
https://github.com/ChenRocks/fast_abs_rl