本文作者提出了一种用于关键短语生成的多任务混合学习框架,不同于已有的单纯依赖于抽取式或是生成式模型,该框架实现了两种类型模型的混合训练,通过使用抽取出的关键短语来修改生成过程中copy的概率分布,从而使生成式模型可以更好从文档中识别出重要的部分进行复制。
此外为了进一步的提高效果,作者这里还采用检索语料库中和所处理文档相似的文档的方式,进而产生更多精准的关键短语来帮助生成过程。最后作者提出了一种基于神经网络的合并模块,来进一步的处理上述三种方式得到的关键短语,使得最后得到的关键短语质量更高。
传统的抽取式方法根据重要性分数直接从文档中进行短语的抽取,通常效果不错,但是无法得到没有在文档中出现过的短语。而使用了copy机制的生成式方法既可以得到文档中已有的短语,同时还可以生成未曾在所处理文档中出现的短语。但是copy机制可能会导致一个问题,那就是从文中复制的部分太多,导致难以区分结果中短语的相对重要性。
因此作者指出,抽取式得到的重要性分数可以为生成式模型提供指导,使得它知道更应该关注文档中的哪些短语,从而起到一种修正copy概率分布的作用。另外,所处理文档和语料库中相似的文档由于表述的相近性,它们通常都会包含相同或相近的关键短语。因此,如果我们可以从相似文档中检索出相似的短语,那么它们可以作为生成模型解码时的一种辅助信息,帮助decoder生成更精准、更多样化的结果。
本文所提出的框架如下所示
从图中可以看出,整个框架重要包含四个部分:
Retriever
语料库中的数据以**
Extractor and Generator
这两部分共享Encoder - 1得到的关于 x \text{x} x的表示 U \text{U} U,其中Extractor根据 U \text{U} U为 x = [ x 1 , . . . , x L x ] \text{x}=[x_{1},...,x_{L_{x}}] x=[x1,...,xLx]中的短语进行打分,得到重要性分数序列 β = [ β 1 , . . . , β L x ] \beta=[\beta_{1},...,\beta_{L_{x}}] β=[β1,...,βLx]。Generator根据 U 、 β 、 v \text{U}、\beta、\text{v} U、β、v生成候选关键短语 Y = { y i } i = 1 , . . . , N Y=\{y^i\}_{i=1,...,N} Y={yi}i=1,...,N,其中 y i = [ y 1 i , . . . , y L y i i ] y^i=[y_{1}^i,...,y_{L_{y^i}}^i] yi=[y1i,...,yLyii]。
Encoder:这里使用的Bi-GRU,首先得到单的词 w i w_{i} wi的上下文表示
u i = BiGRU 1 ( x i , u → i − 1 , u ← i + 1 ) v j = BiGRU 2 ( r j , v → j − 1 , v ← j + 1 ) \text{u}_{i}=\text{BiGRU}_{1}(\text{x}_{i},\overrightarrow{\text{u}}_{i-1},\overleftarrow{\text{u}}_{i+1}) \\ \text{v}_{j}=\text{BiGRU}_{2}(\text{r}_{j},\overrightarrow{\text{v}}_{j-1},\overleftarrow{\text{v}}_{j+1}) ui=BiGRU1(xi,ui−1,ui+1)vj=BiGRU2(rj,vj−1,vj+1)
接着拼接两个方向的表示得到 u i = [ u → i , u ← i ] \text{u}_{i}=[\overrightarrow{\text{u}}_{i},\overleftarrow{\text{u}}_{i}] ui=[ui,ui]和 v j = [ v → j , v ← j ] \text{v}_{j}=[\overrightarrow{\text{v}}_{j},\overleftarrow{\text{v}}_{j}] vj=[vj,vj],最后便可以得到表示 U \text{U} U和 V \text{V} V。
Extractor:这里可以看作是sequence identifier,通过判别文档中的短语的重要性来进行打分,其中重要性分数的计算为:
β j = sigmoid ( W c u j + u j T W s d − u j T W n tanh ( s j ) + b ) \beta_{j}=\text{sigmoid}(W_{c}u_{j}+u_{j}^TW_{s}d-u_{j}^TW_{n}\tanh(s_{j})+b) βj=sigmoid(Wcuj+ujTWsd−ujTWntanh(sj)+b)
其中 d = tanh ( W d [ u → L x ; u ← 1 ] + b ) d=\tanh(W_{d}[\overrightarrow{u}_{L_{x}};\overleftarrow{u}_{1}]+b) d=tanh(Wd[uLx;u1]+b), W c 、 W s 、 W n W_{c}、W_{s}、W_{n} Wc、Ws、Wn分别代表content、salience和novelty的权重矩阵。
Decoder:输入包括 β 、 U 、 V \beta、U、V β、U、V,这里使用的是GRU+Attention+copy,不同之处在于:这里没有使用之前普遍使用的将internal attention score作为copy的概率,而是使用了rescaled internal attention score来decoder更加关注文档中重要的词。
training
损失项主要包含以下两个:
Extraction Loss:这里使用交叉熵,损失函数为
L e = − 1 L x ∑ j = 1 L x w β j ∗ log β j + ( 1 − β j ∗ ) log ( 1 − β j ) L_{e}=-\frac{1}{L_{x}}\sum_{j=1}^{L_{x}}w \beta_{j}^* \log \beta_{j}+(1-\beta_{j}^*)\log (1-\beta_{j}) Le=−Lx1j=1∑Lxwβj∗logβj+(1−βj∗)log(1−βj)
Generation Loss:这里使用MLE,损失函数为:
L g = − ∑ t = 1 L y ∗ log P ( y t ∗ ∣ y t − 1 , x , r ) L_{g}=-\sum_{t=1}^{L_{y}^*} \log P(y_{t}^*|y_{t-1},x,r) Lg=−t=1∑Ly∗logP(yt∗∣yt−1,x,r)
Merging module
最后Merging module根据三个输入的相应分数进行排序得到最终的结果,其中Extractor中候选短语对应的是重要性分数,Generator对应的是decode过程中的注意力分数,Retrieveer对应的是根据Jaccard 相似度计算得到的分数。
为了对输入进行打分,这里引入了一个基于BiGRU的模型来获得输入的表示,然后使用一个辅助的打分器对获得的表示进行打分。打分的依据是将其和真实的关键短语进行比较,判断输入和真实关键短语的接近程度。
整个算法的伪代码如下:
实验
数据集为KP20k、Inspec、Krapivin、NUS、SemEval,评价指标为macro-averaged recall(R)和F-measure( F 1 F_{1} F1)。
训练模式有四种:
在多个数据集上和基准模型对比的结果如下:
从结果中可以看出新框架的效果优于之前的模型,证明了引入的新模块确实可以起到一定的效果。
在对于absent keyphrase的实验结果中可以看出,新的框架可以更好的生成未在文档中出现的关键短语。
消融实验也证明了每一部分的有效性
最后从结果的可视化中可以看出,新框架生成的关键短语更加精准和多样化。