Page 29 - 《软件学报》2021年第6期
P. 29
邝砾 等:大粒度 Pull Request 描述自动生成 1603
Fig.4 Calculation of graph neural network hidden layer state h′
i
图 4 图神经网络隐藏层状态 h′ 的计算
i
以节点 1 为例,假设节点 1 当前的隐藏层状态为 h 1 ,其邻居节点分别为节点 2~节点 4.节点 5 和节点 6 与节
点 1 同在一幅子图内,但与节点 1 并不相邻.我们希望获取节点 1 新的隐藏层状态 h′ .首先需要计算节点 1
1
对其自身以及对其邻居节点 2~节点 4 的注意力权重 a 11 ~a 14 ;随后对其自身以及邻居节点的隐藏层状态进
行加权求和,得到新的隐藏层状态 h′ .此时,隐藏层状态 h′ 将包含节点 1 与节点 1 邻居节点的相关信息通过这种
1
1
方式节点间进行了消息的传递.
在图神经网络层,我们利用节点间的消息传递更新了句子节点的隐藏层状态,得到了带有丰富文章内容信
息的句子特征向量.然而,模型最终目的是预测 PR 源文档中的句子 s j 是否应出现在 PR 描述中,所以将获得的句
子向量再通过一层线性变换层,得到该句出现在 PR 描述中的概率.我们选择概率最大的 k 个句子组成 PR 描述.
2.3 融合强化学习的PR描述生成方法
传统的有监督标签预测任务常使用交叉熵损失函数 [47] 作为训练的损失函数,该函数能够有效衡量预测值
与真实值之间的差距.然而在 PR 描述生成任务中,使用交叉熵函数作为损失函数并不合适,其原因有二.
(1) 交叉熵函数是监督学习中常用的损失函数,它需要数据带有真实标签.然而在 PR 数据集中,仅有 PR
原有的文本信息和由项目贡献者们书写的真实描述,并没有源文档中的某个句子是否属于 PR 描述的
标签信息.当然,可以像文献[21]中所做的工作一样,利用贪心策略自动化地生成标签,但是这种标签生
成方法是否可靠尚未可知,若该方法存在误差,则会为模型带来误差传递的风险;
[3]
(2) 因最终目标是生成 PR 描述,同 Liu 等人 一样,我们使用摘要生成任务中常用来衡量生成摘要与真实
摘要之间差距的 ROUGE 分数 [48] 作为评价指标来衡量 PR 描述生成质量的优劣.若使用交叉熵函数作
为损失函数,仅仅能够衡量 PR 描述句的预测是否准确,并没有将生成的 PR 描述看作一篇文章对它进
行评估,从而无法对 PR 描述进行整体上的质量评价,因此我们认为,交叉熵函数不适宜作为本项工作
的损失函数.
为了解决上述问题,我们引入了强化学习提升模型效果.在这里,将 PR 描述生成器看作智能体,PR 源文档看
作状态,PR 描述生成器选择哪几个句子组成 PR 描述看作智能体作出的策略,生成的 PR 描述看作新的状态.另
外,我们把智能体获得的奖励设置为智能体生成的 PR 描述得到的 ROUGE 分数,将损失函数定义为智能体获得
奖励的负期望.通过这些设置,模型的训练目标与真实值无关,因此在训练过程中,能够避免使用真实标签指导
PR 描述的生成,并且对评价指标进行了优化,很好地解决了上述两个问题.
具体地,定义策略 p(y i |s i ,S,θ)表示模型是否将句子 s i ∈S 选为描述句,其中,y i ∈{0,1},θ为训练参数.当智能
体阅读完 PR 源文档 S 后,会作出决策,得到 y i =1 的句子集合 ˆ y .我们将该集合中包含的句子进行拼接,看作智能
ˆ
体生成的 PR 描述.之后,智能体将会得到奖励 ()ry ,该奖励能够评价 PR 描述生成器生成 PR 描述的效果.在这里,
使用智能体生成的描述所获得的 ROUGE 分数作为奖励.模型的训练目标是最小化智能体得到奖励的负期望,
因此,损失函数 L(θ)可用公式(3)表示:
L () θ =−E [ry ˆ ( )] (3)
ˆ ~( ) θ
yp
但是,由于奖励函数即 ROUGE 分数计算方式不可导 [48] ,因此,我们利用 REINFORCE 算法 [49] 近似得到损失