Fork me on GitHub

丁香园技术|我们为海量公开问诊数据生成了标题 —— NLG 的医疗健康科普实践

前言

丁香医生的评论区和后台,每天都会收到成千上万条关于健康的问题。为了帮助用户解决各种健康疑问,丁香医生提供了多种不同形式的服务。对于高频、有共性的问题,通过数百位医生、专家收集整理资料,编写成专业易懂、FAQ问答形式的「健康百科」。此外,还有大量「专家科普」深度长文,解释每个医疗知识背后的来龙去脉。

图片

这两类内容都具备良好的结构化,有相对工整的标题,有归属的科室,同时或以医疗实体分类,或以健康topic分类等。用户通过搜索的方式即可方便地触达到内容。不过,医学毕竟是个复杂的话题,很多病症在不同人身上个体差异也特别大,参照最近大家阳了的情况:

得新冠就像小马过河,小马问松鼠,水深吗?松鼠说:“太深了!我朋友过河被淹死了!”小马又问小狗,小狗说:“挺深的,我好不容易才游过去的。”小马又去问黄牛。

黄牛笑着说:“要布洛芬吗?”

主动的科普做不到事无巨细地把所有细节、可能性都写出来。用户有个性化的问题,在科普文章中找不到答案,可以选择使用付费线上问诊服务,直接找个医生问。当问诊结束后,问诊记录会默认保持保密状态。此时,如果你愿意,帮助那些遇到类似问题的人,可以将问题设置为公开。本次问诊记录将会隐去所有敏感信息后,进入搜索索引。通过用户检索,数据将展示在「公开问题」栏目。

图片

接触过信息检索的同学一定都有体会,要提升搜索效果,一方面要在语义匹配上下功夫,另一方面也要尽可能提升原始数据的结构化程度。眼尖的同学肯定发现了,被公开的问诊记录已经被自动带上了标题。对于长文本检索来说,标题是个非常重要的索引字段,它包含了全文的核心主旨,不仅有利于文档与Query的语义匹配,同时对于用户阅读体验也更好。通常,文章标题都是由编辑同学起的,人有高度抽象的思维能力,可以做到复杂事物的总结归纳,理清楚最主要的脉络逻辑。在当前的场景中,我们希望模型也能具备类似的能力,即提炼出用户问诊主诉,并生成一个流畅通顺的问句。

在还是RNN-Seq2seq为主流架构的3年前,团队也在摘要生成方面做了不少尝试,当时的技术背景下,我们大多探索的方向是在如何在结构上加些trick,提升长文的编码能力。或是各种结合copy机制,来提升关键信息的识别,引入外部知识实体数据等方向。但是,由于受限于主体encoder的编码能力,最终结果总是差强人意,虽然偶有让人眼前一亮的case,但是当时模型输出的稳定性还是不足以应用在实际场景中。

图片

然而在随后的3年里,预训练模型迎来了爆发,在大模型的加持下,NLG的效果迅速提升至一个十分可观的水平。结合我们的任务,Google发布的T5成为了我们的基础框架。在经过几轮标注数据调教后,baseline版本已基本达到可读状态。但是在落地之前,还有几个问题需要解决,比如由于生成低资源导致的语句不流畅、生成句子前后事实不一致、输入文本过长等。

图片

近几年,摘要生成也是NLP领域比较火热的一个方向,本文结合学界的几项工作,谈谈如何缓解上述问题的一些思路。

一、摘要生成与多任务 or 多目标相结合

从预训练模型兴起时,多任务就成了很多工作的解决方案,摘要领域也同样如此,比如提事实一致性可以增加一个事实一致性的任务,提升流畅性可以增加一个提升流畅度的任务,摘要领域最具影响的多任务来自2019年Google的Pegasus。

《PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization》

该篇文章开创性的引入一个新的预训练任务gap sentences generation(GSG),并借此在12个数据集上取得了SOTA,将预训练模型摘要的效果提升了一个台阶。对于一个文本段落,GSG任务训练方式是:选择在encoder阶段mask掉一段文本中的部分句子,并将这部分句子作为decoder的target进行训练。

图片

整个任务形式非常简单,效果却异常出彩。而对于如何选择被mask的句子,为了使得被mask的句子内容上更加接近一个"摘要",文章给的思路是通过计算句子与其余句子的Rouge,选择top-N进行mask。这里Rouge可以替换为其他分值,比如Fact PEGASUS就在选择的分值上增加了FACTCC,用于提升生成摘要的事实一致性。

《BRIO: Bringing Order to Abstractive Summarization》

本文是笔者认为今年较好的文章,一度在几个数据集benchmark榜上占据第一的位置。这篇文章通过多任务缓解了自回归模型的两个缺点:
(1)自回归模型在生成过程中通常会受到bias带来的影响;
(2)生成式摘要的训练数据通常为一篇文章对应一句摘要,模型在学习的是一个点到点的分布,这并不是很好的形式;

文章中将摘要抽取的训练分两个阶段,第一阶段首先训练MLE的loss,第二阶段模型采用多任务训练排序loss+MLE loss训练,整个训练过程重复这两个阶段直到收敛。

排序任务通过beam-search生成若干句子,对原文计算Rouge对生成句子进行排序。排序loss由句子生成概率和排序的位置决定,其目的是希望模型生成质量高(Rouge分值高)句子的概率高于质量差的概率。
image.png

这里第二阶段的loss公式可以解释如下, L_xent为MLE loss,L_ctr为排序loss,S_i,S_j为模型通过beam-search采样得到的句子,其中i,j即为排序顺序,f(s_i)为模型生成句子长度规划后的log概率。对比 MLE loss,排序loss学习到的并非是一个点的分布,另外该loss中两个句子生成概率相减,巧妙规避了词频带来的bias。

《Calibrating Sequence likelihood Improves Conditional Language Generation》

来自PEGASUS同组的工作,当前的SOTA模型,其思想和BRIO非常相似,在模型Fine-tune之后,引入了Calibration阶段,two-stages的多任务训练(这里并不像BRIO重复训练),同样的配方同样的味道。
image.png

这篇文章做了非常多的实验,对多种loss和训练方式进行测试,这里简单归纳下实验结论:
(1)多任务的loss选择上:最简单的rankloss取得了最好的效果。
(2)生成句子的排序指标上:采用BertScore/decoder的结果/Rouge等几种方法都差不多。
(3)生成数据的方式:Beam-search 好于Diverse Beam Search和Nucleus Sampling。
(4)多任务的另一个loss选择kl-divergence和cross entropy表现差不多。
(5)进入第二个训练阶段的指标:采用困惑度取最好。
文章还证实了多任务结合two-stages的训练可以减少预测过程对beam-search等trick的依赖。

《FRSUM: Towards Faithful Abstractive Summarization via Enhancing Factual Robustness》

这篇文章来自Baidu的EMNLP2022的工作,在多任务基础上通过引入对抗攻击的思路来提升摘要的事实一致性。



图片

文章构造了一个对抗攻击任务,文本信息通过encoder进入deocder前会被加上一个扰动h,另外希望模型在有扰动的情况下,在factual span输出的真实结果概率高于对抗集中其他可能实体的概率。这里选择的factual span则是事先确定模型最可能出现的一些错误类型,针对factual span构造对抗集来自输入文本。从消融实验可以看出扰动和对抗任务都带来一定程度的事实一致性的提升。

二、长文本摘要策略

长文本摘要目前主流的工作是两个方向,一个利用BigBird、LongFromer之类的稀疏attention结构增加模型可接受的输入长度;另一个则是通过截断、贪婪策略来减少输入长度。

《How Far are We from Robust Long Abstractive Summarization?》

文章来自2022EMNLP,对于长文本的摘要生成,该篇文章首先做个了比较有趣的信息量实验。对于平均为6k个token的英文文章,信息量最多的位置在1k-2k区间,0-1k区间信息量排第二,因此对于长文本的处理如果简单取top 512长度输入很有可能只得到一个次优解。

文章实验了两种方式,方式一是不限制输入长度采用sparse-attention(Longformer的local-attention);方式二是限制输入长度,输入文本通过贪婪方式筛选(reduce-then-summ,根据Rouge贪婪选择若干句子)。

图片

在文本长度限制为1k,4k,8k的输出结果上,对于方式一,增加输入长度能带来轻微的提升,即便是由full attention变成sparse-attention。对于方式二,1k的长度限制结合full attention取得了最佳,增加长度和稀疏attention并没有在方式二中带来提升。采用1k长度结合筛选再输入无疑是最贴近模型的预训练的方式,限制在1k长度也避免了对attention和position embedding的改造,除去了冗余信息也减少生成模型跑偏的风险。

《Investigating Efficiently Extending Transformers for Long Input Summarization》

另一篇采用sparse attention解决长文本的是Google的Pegasus-X,支持最大token长度长达16k,可在huggingface下载。该篇文章引入了staggered block-local Transformer。这种transformer不同层采用了不同的local-attention范围,这种堆叠的思想类似于CNN感受野,最上层的transformer通过错位attention可以达到非常长的感受野。

图片

文章通过实验证明了staggered block-local Transformer即使在有全局的global attention的情况下也能带来一定的提升。

《A Multi-Stage Summarization Framework for Long Input Dialogues and Documents》

这篇文章来自微软今年的ACL的工作,相比前两篇文章多了一些工业风。

图片

文章采用了split-then-summarize的形式来应对长文本摘要问题,在一些长文本训练集上取得了sota的效果。将长文本摘要生成过程分成N个粗摘要过程和一个精摘要过程,每个过程对应都有不同的模型来适配,一共有N+1个模型。文章特别提及到了多个过程共用模型会带来性能下降。

粗摘要过程的模型训练数据,是将原始文章和目标摘要进行段落拆分进行匹配得到。这个匹配策略是贪婪的最大化Rouge分值。最终输入的精摘要模型的文章长度并没有被压缩在模型输入最大长度K以内,而是在1K~2K之间。文章给的解释是,压缩到K的目标长度更容易产生过短粗摘要,这些过短的摘要拼接后会带来一些噪声。

三、利用图结构

文章中通常存在一些结构信息,比如句子是否同属于一个段落,句子间一些指代关系,句子是否包含关键词等,这些信息通常可以与图结构相结合提升摘要的效果。

《HEGEL: Hypergraph Transformer for Long Document Summarization》

图片

该篇文章通过文章结构信息提升抽取式摘要结果,虽然是抽取式摘要但其将构造图结构信息的方式仍然值得借鉴。该篇文章将句子、句子所属段落、topic、keyword作为图中节点构造图结构,topic和keyword都是通过抽取的方式得到。句子经过sentence encoder之后在经过两层Hypregraph attention汇聚点和边的信息获得更好的句子表示,再进行抽取任务。

《Abstractive Summarization Guided by Latent Hierarchical Document Structure》

该篇文章同样来自今年的EMNLP,该篇文章提出了HierGNN结构希望能通过图结构学到文章中句子之间的依赖关系,来提升摘要生成效果。从最终的实验结果上看预训练和非预训练模型均有一定的提升。

image.png

和上篇文章类似,这里将句子看作图中节点,边则是两个句子间的依赖关系f,文章对于一个节点s分别给了p(parent),c(child)两种的表示。
image.png

图中的节点经过HierGNN的reasoning结构节点汇聚周围节点的信息,两层网络更新过程中有类似遗忘门的gate结构。

image.png

最终每个节点的表示会和decoder t时刻的输出进行graph attention加权求和获得图表示,再和decoder输出经过token attention,softmax获得对应vocab的分值。

总结

虽然预训练模型对摘要抽取带来许多便利,但是实际应用中仍会遇到语句不流畅、前后事实不一致等问题,然而这些问题在严肃医疗科普中的容错率是比较低的。除了通过上述所提到的工作,改善摘要的生成过程。同时我们也建议在生成之后完善后续评估环节,比如针对生成结果的流畅性评估过滤环节。我们在该环节除了包含一些业务规则之外,还会从困惑度、Rouge、Domain分类结果、摘要包含的实体个数等维度进行二次打分。


引用

[1]《Pegasus: Pre-training with extracted gap-sentences for abstractive summarization》
[2]《FactPEGASUS: Factuality-Aware Pre-training and Fine-tuning for Abstractive Summarization》
[3]《BRIO: Bringing Order to Abstractive Summarization》
[4]《Calibrating Sequence likelihood Improves Conditional Language Generation》
[5]《How Far are We from Robust Long Abstractive Summarization》
[6]《Investigating Efficiently Extending Transformers for Long Input Summarization》
[7]《A Multi-Stage Summarization Framework for Long Input Dialogues and Documents》
[8]《HEGEL: Hypergraph Transformer for Long Document Summarization》
[9]《Abstractive Summarization Guided by Latent Hierarchical Document Structure》


本文地址:https://www.6aiq.com/article/1672748102417
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出