Page 26 - 《软件学报》2021年第6期
P. 26
1600 Journal of Software 软件学报 Vol.32, No.6, June 2021
据学习到的文档内容重新组织语句,形成摘要.
TextRank [19] 是抽取式摘要生成方法的典型代表,该方法参考 PageRank 算法 [20] ,将句子作为节点,根据句子
间的相似度构造无向有权边,得到文章结构图;随后计算图中各个节点的 TextRank 分数,选取 N 个得分最高的节
点代表的句子组成摘要.随着神经网络的发展,越来越多的研究者开始使用神经网络进行抽取式摘要生成.
Nallapati 等人 [21] 使用循环神经网络学习句子的表示向量,然后将其输入到分类器中,预测该句是否应当出现在
摘要中.之后,学者们也开始探索其他神经网络结构在抽取式摘要生成中的应用.例如,Liu 等人 [22] 使用
Transformer 结构对文档进行编码.Zhong 等人为探究 Transformer 和 LSTM 这两种神经网络模型在抽取式摘要
生成任务中的表现进行了消融实验,实验发现:两种模型大多学习到的是句子的位置信息而非内容信息,而
[4]
[7]
Transformer 比 LSTM 能学习到更多的内容信息 .在此基础上,Wang 等人 认为,基于 Transformer 的神经网络
结构可看作是一种全连接的图结构,因此其提出了基于图结构的模型,能够学习到更多文章内容信息的猜想.为
了验证这一猜想,Wang 等人构建了文章结构图,使用图神经网络帮助学习文章内容信息,并取得了不错的效果.
总的来说,抽取式摘要生成方法思路简单,易于实现,但是其得到的摘要却只能由原文中的句子组成,且摘要句
之间连接较为生硬.
完成文本摘要生成任务的另一大类方法是抽象式生成方法.带有注意力机制的编解码模型 [23] 是抽象式摘
要生成方法的常见模型,在此基础上,See 等人 [24] 提出了指针生成网络对该模型进行改进,有效降低了在实际场
景中未登录词问题对模型表现的影响.当然,也有学者在注意力机制的设计上对原有模型进行改进,例
如,Gehrmann 等人 [25] 设计了自底向上的注意力机制,使模型能够选取更加有效的信息.Liu 等人 [26] 则提出了一
个新颖的解决抽象式文章摘要问题的思路,首先将源文档解析为抽象语义表示(AMR)图,然后将 AMR 图转换为
摘要图,并根据摘要图来生成文章摘要.除此之外,Yu 等人 [27] 还引入对抗生成网络帮助生成摘要.总之,使用抽象
式方法生成的摘要语言要更加灵活,但是也存在生成重复语句、结果可读性差等常见问题.
上述方法作为文本摘要生成的常见方法,在结构性文档数据集(例如新闻数据集)上取得了良好的效果.但
非结构性文档没有明显的行文结构,句子的重要性与句子所在位置关联不大,与结构性文档存在较大差异,因此
上述方法在非结构性文档数据集上的表现并不尽如人意.为此,有研究者提出了适用于非结构性文档数据集的
[5]
摘要生成方法 [5,28−31] .例如,Zhao 等人 针对会议文档数据集中文档过长、难以捕捉有效信息的问题,设计了分
层自适应的网络结构.Liu 等人 [30] 则致力于生成客服对话的摘要,其认为客服对话摘要应当具备逻辑的完整性
与正确性,因此提出了 Leader-Writer 网络用于生成对话摘要.但是,上述方法解决的主要问题都和其使用的数据
集自身特征有很强的关联性,无法直接应用于解决大粒度 PR 描述生成问题.
1.3 自然语言处理在软件工程领域的应用
随着神经网络成功应用在翻译任务中 [32] ,自然语言处理(NLP)技术得到了迅猛的发展,并在各个领域都得
到了广泛的应用,软件工程领域亦不例外.
受到神经网络翻译模型 [32] 的启发,在软件工程领域,很多学者开始思考如何将软件领域专业性很强的特定
文档转换为易读的自然语言形式,以便开发人员理解 [33−36] .例如,一些学者利用神经机器翻译的方法自动生成
commit message,并取得了不错的结果 [33,34] ;亦有学者将代码注释生成任务建模为将程序源代码的抽象语法树
翻译为代码注释的问题,并利用神经网络翻译模型有效完成了该任务 [35,36] .
此外,自然语言处理的其他技术亦在软件工程领域中有所应用.例如:Alon 等人 [37] 受到词嵌入的启发,提出
了 Code2Vec 方法用于对代码进行嵌入,得到代码的向量表示,为开展后续研究奠定了基础;Ye 等人 [38] 将命名实
体识别问题引入软件工程领域,提出了识别软件工程领域特定实体的相关方法;Markovtsev 等人 [39] 则为了进一
步获取代码中的语义信息,根据自然语言处理中的分词算法提出了代码分割的方法;Ferrari 等人 [40] 利用词嵌入
等方法对需求中可能出现的歧义进行检测;Chen 等人 [41] 则建立了贝叶斯分层主题模型,分析用户与系统交互的
行为轨迹;Alreshedy 等人 [42] 应用 NLP 技术对 Stack Overflow 中问题和代码片段中所使用的程序语言进行了预
测;Hao 等人 [43] 则利用 NLP 技术对众包测试中工人提供的测试报告进行处理,然后通过聚类将众包测试工人的
测试报告汇聚成一份综合完整的报告以供软件项目管理人员参考.