Wang, X., & Yu, C. (2019). Summarizing News Articles using Question-and-Answer Pairs via Learning.
论文PDF地址:https://storage.googleapis.com/pub-tools-public-publication-data/pdf/6272e9babac8daa5211b27317a92da2533e8e3b5.pdf
通过学习的方法,构建一个关于新闻文档的(Question-Answer)对的结构化摘要
例如:
原文 | 问题 | 答案 |
---|---|---|
星巴克在周二进行反歧视训练,所以会暂停营业。 | 星巴克问什么停业? | 进行反歧视训练 |
星巴克哪天停业? | 周二 |
如图,这个方法将用户对某篇新闻的搜索记录作为问题,并将这些问题中相同主题的问题聚类到不同的Group中。每个Group选出一个代表性的表达方法作为输出,并在原文中抽取与各个Group相关的答案。
缺点:每一个进行摘要的文章都需要历史的搜索数据。如果某篇新闻刚刚发布或者无人问津,那么不会有足够的搜索记录作为Question。
(先通过前面的挖掘方法得到大量的训练数据)
神经网络,训练三个模型:
第一个:对文档中的重要句子进行标记;
第二个:根据这些句子生成对应其中信息的Question;
第三个:然后再根据问题与这个句子生成答案
这样处理新的新闻文档的时候,就不需要依赖搜索记录了。
要使用前面说的构造方法,有两个难点:
选择有代表性的Question。查询记录中不同用户同样的查询意图可能使用不同的表达方式,要避免最终的Questions中出现语义上重复的内容。
根据问题抽取出对应答案。类似于普通问答系统。
Step1:根据简单的规则过滤掉无效的Question;比如太短太长…
Step2:使用凝聚层次聚类对Question聚类
初始状态每个Question都是一簇,然后重复合并最相近的两个
相似度计算方法:
c o s _ s i m ( W t f i d f 1 ∗ E 1 , W t f i d f 2 ∗ E 2 ) cos\_sim(W_tfidf1∗E_1, W_tfidf2∗E_2 ) cos_sim(Wtfidf1∗E1,Wtfidf2∗E2)
E = ( e 1 , e 2 , … , e n ) E=(e_1, e_2,…,e_n ) E=(e1,e2,…,en) , e e e为词向量
Step3:从每个类簇中的非疑问句 C n q C_nq Cnq中选择具有代表性的问题 q ∗ q^∗ q∗
q ∗ = a r g m a x ( q ∈ C n q ) ∑ i = 1 k s i m ( q , q i ) q^∗=argmax(q∈C_{nq} ) ∑_{i=1}^ksim(q, q_i) q∗=argmax(q∈Cnq)i=1∑ksim(q,qi)
处理结果如图所例:
这个部分就是一个标准的问答系统,直接使用QANet ,利用问题从原文中得到问题的答案。
QANet是一个问答模型:(Yu, A.W., Dohan, D., Luong, M.T., Zhao, R., Chen, K., Norouzi, M., Le, Q.V.: QANet: Combining local convolution with global self-attention for reading comprehension. In: ICLR (2018))
为了避免Question不同表达形式对答案造成影响,
要使用同一个类中的所有Question进行抽取
选择综合置信度最高的文章片段作为最终的答案。
前面提到了,要解决依赖搜索记录的缺点,搭建一个学习模型,大致框架如下:
先使用挖掘方法构造数据集,然后用这个数据集进行训练。
实际上就是标记文档中的重要信息
为了提高计算结果,将QANet对某个问题集合的全部答案A进行选择,只保留满足下面条件的作为训练集:
S ( A , p ) = ∑ a i ∈ A , p ∈ a i s ( a i ) ∑ a i ∈ A s ( a j ) > 0.5 S(A, p)=\frac{\sum_{a_{i} \in A, p \in a_{i}} s\left(a_{i}\right)}{\sum_{a_{i} \in A} s\left(a_{j}\right)}>0.5 S(A,p)=∑ai∈As(aj)∑ai∈A,p∈ais(ai)>0.5
其中 s ( a i ) s(a_i) s(ai)是指QANet输出的答案 a i a_i ai的置信度得分。然后搭建如下模型:
模型的损失函数使用加权交叉熵:
l o s s = − ( 1 − w p ) y log ( p ) − w p ( 1 − y ) ( 1 − p ) loss=-\left(1-w_{p}\right) y \log (p)-w_{p}(1-y)(1-p) loss=−(1−wp)ylog(p)−wp(1−y)(1−p)
其中 w p w_p wp 是数据集中答案A所占的比例。最终可以训练得到一个对文档中重要部分进行标记的模型,其效果如下:
训练一个模型,根据答案文本(也就是上面模型标记出来的包含重要信息的文本片段)生成Question(反向的问答模型),训练数据使用SQuAD(Stanford Question Answer Dataset)其中是原始文本+(问题-答案)对的数据。先使用Stanford工具对其原始文本进行句。实际的模型输入就是 包含答案的句子、Answer、Answer的位置。Decoder中使用了Pointer Generator能够从原始文本中复制单词。模型如下:
其中 h ~ j t = tanh ( W c [ contex t j ; h j t ] ) . \tilde{h}_{j}^{t}=\tanh \left(W_{c}\left[\operatorname{contex} t_{j} ; h_{j}^{t}\right]\right). h~jt=tanh(Wc[contextj;hjt]).
最后还有一个步骤,就是将3.2生成出来的问题,按照第二节中所说进行聚类和总结,以得到不重复、更有代表性的摘要结果。