说明:收录90万 73个行业的国家标准 支持批量下载
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210776314.5 (22)申请日 2022.07.01 (71)申请人 南京工业大 学 地址 211816 江苏省南京市浦口区浦珠南 路30号南京工业大 学 (72)发明人 吴军华 周雯  (51)Int.Cl. G06F 8/73(2018.01) G06F 40/169(2020.01) G06F 40/284(2020.01) G06F 40/30(2020.01) G06N 3/04(2006.01) G06N 3/08(2006.01) (54)发明名称 一种基于图引导的Tran sformer模型代码注 释自动生成方法 (57)摘要 本 发 明 提 供 了 一 种 基 于 图 引 导 的 Transformer模型代码注释自动生成方法, 具体 包括以下步骤: 从Git Hub上下载开源的Java代码 数据集DeepCom; 对数据集中的源代码进行预处 理, 解析为抽象语法树, 提取变量依赖关系构造 数据流图, 再将其转换为数据流引导的mask矩 阵; 用构造好的mask矩阵改进自注意力机制从而 构建新的Transformer编码器; 解码时, 将句子的 长度进行归一化, 并在score函数中加入覆盖惩 罚机制, 以此来改进集束搜索算法; 在Java数据 集DeepCom上对已构建好的DFG ‑Trans模型进行 训练, 学习代码结构和语义信息; 输入测试集中 的代码序列, 使用已训练好的模型进行测试, 生 成Java代码 对应的注释。 本发明不仅可以缓解代 码长距离依赖的问题, 而且可以很好地提取源代 码的结构特 征, 从而提高注释生成的准确性。 权利要求书2页 说明书5页 附图1页 CN 115048141 A 2022.09.13 CN 115048141 A 1.一种基于图引导的Transformer模型代码注释自动生成方法, 其特征在于, 包括如 下 步骤: S1、 从GitHub上 下载开源的Java代码数据集De epCom; S2、 对数据集中的源代码进行预处理, 解析为抽象语法树, 提取变量依赖关系, 构造数 据流图再将其 转换为数据流引导的mask矩阵; S3、 用构造好的mask矩阵改进自注意力机制从而构建新的Transformer编码器; S4、 解码时, 将句子的长度进行归一化, 并在score函数中加入覆盖惩罚机制, 以此来改 进原始的启发式算法— —集束搜索算法; S5、 在Java数据集DeepCom上对已构建好的模型DFG ‑Trans进行训练, 学习代码结构和 语义信息; S6、 输入测试集中的代码序列, 使用已训练好的模型进行测试, 生成Java代码对应的注 释。 2.根据权利要求1所述的图引导的Transformer模型代码注释自动生成方法, 其特征在 于, 步骤S2中所述的mask矩阵构造方法, 具体包括: S201、 数据流的结构化表示: 将给定源代码解析为抽象语法树后, 提取源代码中所有的变量节点并构造数据流图, 将得到的数据流图用G=(V, E)表 示, 其中V表 示顶点的集合, E表 示边的集合, 将数据流图中 的顶点记作 pos(i)表示第i个顶点在源代码序列中的位置信息, 矩阵M记录源代码 中 的变量数据依赖关系, src_len表示源代码序列长度, 矩阵M 定义为: 其中<vi, vj>∈E表示vi与vj存在数据依赖关系, 当vi与vj之间存在边或i等于j时, 将 Mpos(i)pos(j)置为1, 否则为负无穷, 将M矩阵引 入自注意力机制, 当M等于1时, 注意力得分不 变, 当M等于负无穷时, 注意力得分将会被计算为0, 这样就可以将序列中没有 数据依赖 关系 的两个token的注 意力得分覆盖掉, 从而使后续构建的Transformer模 型更能关注到代码中 的数据流动关系, 学习到变量的语义, 帮助模型生成代码注释。 3.根据权利要求1所述的图引导的Transformer模型代码注释自动生成方法, 其特征在 于, 步骤S3中所述的Transformer编码器, 具体包括: S301、 嵌入编码: 给定源代码片段, 经过嵌入层(embedder)编码后得到代码序列的向量表示, Transformer与循环神经网络不同, 循环神经网络是一种顺序结构, 可以很自然地捕获词序 信息, 为了捕获每个token在序列中的位置信息, 对每一个token的位置采用正余弦函数进 行编码; S302、 自注意力机制: Transformer中的自注意力机制通过查询, 键, 值三个矩阵的计算实现, 将代码序列的 向量表示X=[x1, x2...xsrc_len]通过三个线性层映射 为Q, K, V三个矩阵, Q=QWiQ, K=KWiK, V=VWiV WQ, WK, WV是可训练的权重矩阵, 其中WQ, WK∈Rd_model×d_k, WV∈Rd_model×d_v, Q, K, V矩阵的初权 利 要 求 书 1/2 页 2 CN 115048141 A 2始值为X, 将映射后得到的Q, K, V矩阵传入多头自注意力层, 无数据流引导的编码器层采用 的自注意力机制为缩放 点积注意(Scaled  Dot‑Product Attention); S303、 数据流引导的自注意力机制: 为了引导模型关注代码中的数据依赖关系从而学习代码语义, 定义了数据流邻 接矩阵 M作为mask矩阵(见步骤2.1), 在数据流引导的编码器层采用了改进后的自注意力机制, 自 注意力输出计算C ’为: 矩阵M记录了代码中的数据流信息, 当第i个token与第j个token存在数据依赖关系时 Mij等于1, 否则Mij为负无穷, 经过softmax的计算后, 没有数据依赖关系的两个token之间的 注意力得分会被覆盖掉, 计算出各头的注意力值后, 模型将各头自注意力输出通过Concat 函数拼接起 来得到最终的多头注意力矩阵; S304、 前馈神经网络: 多头自注意力层的输出经过残差连接和归一化后作为全连接前馈神经网络层的输入 H, 该层中包括两个线性变换, FFN(H)=ReLU(HW1+b1)W2+b2 其中W1, W2∈Rd_ff×d_model, b1∈Rd_ff, b2∈Rd_model均为模型可学习参数, ReLU函数用于激活 输出。 4.根据权利要求1所述的图引导的Transformer模型代码注释自动生成方法, 其特征在 于, 步骤S4中所述的改进后的集束搜索解码算法, 具体包括: 常规的集束搜索算法以对数似然作为得分函数, 然而因为对数似然产生的概率为负 数, 负的对数概率随着句子长度的增加而累积, 导致长句更容易产生更低(更负)的分数, 因 此通过对句 子的长度进行归一化以改进原始启发式算法, 除此以外, 为了使输入序列中的 每一个token被解码器均匀地注意到, 即覆盖整个输入序列, 在得分函数中添加了覆盖惩罚 机制, 改进后的得分函数score(x, y)定义 为: 将原始算法使用的对数似然除以Lα来进行长度的归一化, 其中L是生成的候选注释的长 度, α 是模型的超参数, 它的值在0 到1之间, CP(x; y)为覆盖率 惩罚函数, 具体定义 为: Pij表示第j个目标候选词与第i个输入词之间 的注意力得分, Lx指输入序列的长度, β 是 模型的超参数, 它的值在0 到1之间。权 利 要 求 书 2/2 页 3 CN 115048141 A 3

.PDF文档 专利 一种基于图引导的Transformer模型代码注释自动生成方法

文档预览
中文文档 9 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共9页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于图引导的Transformer模型代码注释自动生成方法 第 1 页 专利 一种基于图引导的Transformer模型代码注释自动生成方法 第 2 页 专利 一种基于图引导的Transformer模型代码注释自动生成方法 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 14:07:36上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。