知识图谱与文本生成
文本生成在自然语言处理领域一直属于热门研究领域。生成文本任务比信息抽取和文本分类等问题要更加困难,收到了学界的广泛关注。受到深度神经网络的影响,许多文本生成模型模型被研发,有基于机器翻译的Seq2Seq框架,有纯数据驱动模型,也有融合了知识图谱信息的知识驱动模型。本文介绍的是一些融合了知识图谱信息的知识驱动文本生成模型。
几个Seq2Seq文本生成框架
Pointer Networks
本文试图利用seq2seq处理特定的序列问题。我们已经提到,传统seq2seq结构的输出由类似词汇表的某个元素映射表确定,这样就无法应对词汇表随输入变动的情况,例如凸包问题,给定包含一组坐标点的序列,预测构成凸包的点集,此时词汇表的元素应该完全由输入构成,显然传统seq2seq无法处理。本文作者提出了一种精巧的,比传统attention-seq2seq更简单的pointer-net
Incorporating Copying Mechanism in Sequence-to-Sequence Learning
本文提出的copy-net目标非常明确,就是构造一种copy机制解决上面提到的与输入相关的OOV问题。特别是摘要、对话生成这类问题,输入文本中一些词可以通过传统方式预测,另一部分词则可以直接复制在输出文本中,所以copy-net最终的词概率预测由两部分组成,generate-mode和copy-mode,分别用于传统的预测和copy词的预测。
Generating Natural Answers by Incorporating Copying and Retrieving Mechanisms in Sequence-to-Sequence Learning
以问答系统为实验场景,在copynet的基础上加入知识检索模块共同配合回复生成。
Multi-Source Pointer Network for Product Title Summarization
网购商品的摘要生成需要更大程度保留关键信息,同时避免无关内容。本文的结构很像引入知识特征的pointer-generator,利用pointer的思想从输入文本中提取关键词,这里的输入文本是商品的标题,确保信息相关;引入知识特征则是为了更大程度的产生关键信息。
Learning to Select Knowledge for Response Generation in Dialog Systems
上面两篇文章分别对copy-net和pointer-generator做知识特征融合,结构上没有很大的改变,基于前者实现也是相对方便的。本文则更侧重于知识特征,强调利用后验知识分布优化对话生成。
首先,用单独的Encoder模块编码知识和目标输出(训练时),然后通过X,Y计算知识K的先验和后验概率分布,并通过KL散度度量两个概率分布的距离,这里不难理解,先验分布和后验分布相差极小就意味着可以用先验分布采样知识(预测时后验分布未知),并用于生成目标回复Y。第二部分中,通过后验(预测时先验代替)分布采样出与对话相关的知识作为额外的知识特征,与Decoder模块的输入一起编码,再和被encoding的sourceX一起预测下一个词。此外,训练的损失函数包含KL散度,NLL损失和BOW损失,第三部分就是用BOW损失考量被采样出的知识(图中的k2)与目标输出文本相关的概率。
MASS: Masked Sequence to Sequence Pre-training for Language Generation
BERT本身是以学习表示为目标,或者说是NLU方面的探索,随机MASK作为预训练任务被证明效果突出,然而会存在pretraining和fine-tuning数据不一致的问题,如果你想把BERT拼在Encoder端和Decoder端,就要考虑改变BERT的预训练方式。MASS略微修改了BERT的mask方式,在Encoder端连续mask一个子序列,让Decoder用前i-1个词预测第i个,就这样把BERT套进Seq2seq框架,一起pretraining即可。
相比于不同的模型结构,充分的训练数据似乎更为关键。而对于文本摘要,对话生成这类任务,序列中更需要包含主题,关键实体等特殊信息元,因而融合主题、输入文本、知识特征的策略很可能会带来更多收益。不过,文本生成类任务仍处于初级阶段,复杂花哨的结构也许很难达到可观的效果。因此即便是文本摘要这类任务,仍不妨先试试受众广泛的开源实现,诸如gnmt、fairseq、tensor2tensor等。
文本摘要生成
Get To The Point: Summarization with Pointer-Generator Networks
本文模型结构简洁,思路清晰,与基础的seq2seq比较非常方便,在这两年很多摘要生成工作中都作为baseline出现,表现不俗。作为一个子任务工作,项目star已达1.5k+,也说明一定影响力。文中用attention作为分布的方法,就源于2015年的pointer-net。
考虑实体知识特征的生成类工作,最容易想到的大致有实体,模版以及主题,下面将简要介绍与这三种相关的工作。
Neural Question Generation from Text- A Preliminary Study
在文本分类相关任务中,融合外部特征的常见做法,就是编码这些特征,然后选择不同的encoding层做concat,本文在问题生成任务中,对这类融合方式做了实验对比,模型结构上除了加入copy机制外,没有更多值得特别注意的改变。不过本文对concat各种特征做了实验比较,作者选取了word case,POS,NER,answer-tag作为额外特征
BiSET: Bi-directional Selective Encoding with Template for Abstractive Summarization
模版往往是抽取式模型常用的方式,本文则是提出了利用模版过滤原文编码特征的方法。
Multi-Source Pointer Network for Product Title Summarization
既然可以用attention作为分布强化原文中词的概率,那用在实体知识特征上当然也没问题。
退化现象
重复一直是文本生成类任务的通病,这在一些文章中被称为退化,我们也在寻找合适的应对方案,coverage机制就是一种方案,但并不足够,下面的工作介绍了另一种损失函数,在词和子句(ngram)两个点共同发力应对退化现象。
ref:
- NEURAL TEXT DEGENERATION WITH UNLIKELIHOOD TRAINING
- The Curious Case of Neural Text Degeneration
LevT: Levenshtein Transformer
我们一直奢望找到让生成模型更灵活的方法,传统的自回归模型,无论如何融入特征,基本框架都是编解码器提供历史向量编码,输出端计算词典概率p(x_t|x_old),能否让模型对输出端的token有更强的控制呢?本文提供了一种大胆的思路,从标题已经能看出,作者把编Levenshtein距离的操作和Transformer融合在一起做生成模型,输出端不仅要决定词本身,还要决定对词施加的操作。
小结
数据量有限时,pointer-generator可能比复杂的baseline或开源项目更适合,在此基础上,融合实体知识有更多可以参考的工作,此外结合实体知识后分词和词典整理之类的细节不容忽视。相比于语义匹配这类相对成熟的任务,文本生成类工作更难达到一个可以接受的结果,目前的模型都无法完全避免生成重复,生成错误,丢失关键点等问题,在应用场景中。如何应对重复问题,提高生成多样性依旧老生常谈但成效有限,另外Non-autoregressive方向有一些非常新颖的工作,除了上面提到的LevT外,还有一些从生成位置入手的工作值得学习,BERT之后的XLNet也针对Non-autoregressive有独特的设计,可见这一领域的潜力,最后评价指标一直是生成领域的弱项,也为应用。
Ref:
https://zhuanlan.zhihu.com/p/71695633
知识图谱如何助力文本摘要生成
知识图谱如何应用到文本标签化算法中