本发明涉及机器翻译,更具体地说,它涉及一种基于transformer双重模型的机器翻译方法。
背景技术:
1、作为软件开发的基础部分,注释生成和代码生成是软件工程领域备受关注的话题。越来越多的研究人员将神经网络应用于通用的注释生成和代码生成任务,并且大致可以分为基于监督学习和基于预训练两类。
2、在基于监督学习的方法中,提出许多人工智能任务都以对偶形式出现,即一个任务的输入和输出恰好是另一个任务的输出和输入。根据这种相关性设计了一个双重模型,并在机器翻译、情感分类和图像识别等领域取得了成功应用。对这种双重监督学习的进一步的衍生,研究人员设计了一个基于attention的双重模型,同时训练代码注释和代码生成模型。通过注意力权重来衡量源代码片段中的标记与注释中的标记之间存在的对称性。为了进一步加强模型之间的概率连接,除了在损失函数中采用代码注释和代码生成之间的概率相关作为正则化项之外,分别将代码生成的注意力权重列向量与代码注释的注意力权重行向量的近似程度作为正则项加入损失函数中,以确保在训练过程中两个模型的注意力权重的相似性。
3、另一类基于预训练通常都是单独方式进行代码生成和代码注释生成。例如codet5,这是一个基于transformer架构的预训练模型。利用代码及其相应的注释来学习更好的自然语言与编程语言之间的对齐关系,即自然语言→编程语言生成和编程语言→自然语言生成视为对称任务,并同时对模型进行优化。然而,这些方法尚未有效地利用了这两个任务之间的内在联系。以codet5为例,注释生成和代码生成都是单独设计和训练的,只是使用注释生成任务帮助训练代码生成任务。
4、现有技术中的注释生成和代码生成方法的不足是:
5、·性能无法在代码生成和代码注释之间很好地平衡。例如,codet5中代码注释生成的bleu分数并不令人满意,尽管它显著改善了现有的代码生成模型的性能。
6、·使用rnn作为编码器和解码器进行串行地训练这两项任务,导致无法进行并行计算以解决长距离依赖问题。
技术实现思路
1、发明目的:为了克服这些问题,本专利提出了一种易于训练的端到端方法来改善注释生成和代码生成任务。使用transformer学习生成的注释和代码之间的相似性可以帮助改进代码生成模型的性能,即可以使用双重模型架构进行串行地训练这两项任务使得注释生成和代码生成任务之间性能得到很好地平衡。
2、技术方案:
3、一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征是:包括以下步骤:
4、(1)数据处理:在数据处理阶段,首先将代码文档和注释文档转换为固定大小的矩阵表示,随后进行特征提取、序列填充确保长度一致,建立词汇表及单词索引映射,应用词嵌入转换为密集向量捕捉语义关系;进一步处理稀疏数据、清洗操作去除噪声与拼写错误,并进行词性标注特征工程操作来丰富数据表征能力;
5、(2)输入表示:在输入表示阶段,假设x代表所有的代码片段的集合,而y代表所有的注释片段的集合;在此基础上,建立了注释生成模型p(y|x),代码生成模型是p(x|y);具体来说,对于一个代码片段x包含(x1,x2,x3…xm),以及一个注释片段y包含(y1,y2,y3…yn);这两个模型旨在有效地描述并预测给定输入下的输出,从而实现代码与注释之间的转换关系;
6、(3)设置超参数:在设置超参数阶段,引入了超参数λdual1,λdual2,λsim1,λsim2,这些超参数在模型训练过程中对损失函数中不同部分的重要性进行了加权调节;
7、(4)预训练:
8、在模型的预训练阶段,使用了lstm模型对代码集合x和代码y分别进行回归任务,目的是得到代码先验概率p(x)和注释先验概率p(y),获得对于给定代码和注释的概率估计;
9、(5)双重任务迭代训练:
10、5.1先从数据集中获取一个包含k对的迷你批次[xk,yk];
11、5.2向前传播计算联合概率;
12、5.3向前传播计算两模型在transform编码器-解码器多头注意力权重的相似度;
13、5.4反向传播优化器依次优化模型权重;
14、5.5输出:最终训练得到的模型权重参数。
15、在transformer模型的基础上采用代码注释和代码生成之间的概率相关作为正则化项,并采用一种基于注意力的约束来保证在训练过程中两个模型的注意权重的相似性。代码注释可以被视为一个文本生成任务。给定输入代码片段x=(x1,x2,x3…xm),目的是生成可读的自然语言y=(y1,y2,y3…yn),这n个词描述了输入代码片段x。系统试图找到最优的关于x的序列y。
16、
17、相反,给定一个自然语言注释y,代码生成就是为y生成最佳的代码片段x:
18、
19、对于这两个seq2seq模型,代码注释的输入是代码生成的预期结果,代码生成反之亦然。因此,代码注释和代码生成是彼此的双重任务。
20、双重学习其目的是利用双重性,使两个双重任务能够保持相互学习直到收敛。给定两个任务:第一个任务将样本从空间x作为输入,映射到输出空间y,另一个任务将样本从空间y作为输入,映射到输出空间x。因此,第一个任务是p(y|x),第二个任务是p(x|y)。根据贝叶斯定理,如果两个模型均完美运行,应该有:
21、p(x, y) = p(x)p(y|x) = p(y)p(x|y) (3);
22、其中p(x,y)是联合概率,p(x)和p(x)是边缘分布,p(x|y)和p(y|x)是条件概率。
23、从而得到正则项之一:
24、ldual=,p(x)p(y|x;wxy)-p(y)p(x|y;wyx)-2。
25、在代码注释模型和代码生成模型中,这种对齐关系的权重矩阵可通过transform编码器-解码器多头注意力权重表示。将这个过程抽象为以下几个步骤,并用数学公式表示。
26、1.权重矩阵的获得:wsc=θxy和wcs=θyx:这两个权重矩阵是通过编码器学习得到的,它们表示了源代码和注释之间的相互关系。wsc表示源代码中的每个元素与注释中的每个元素之间的关联强度,而wcs表示相反方向的关联。
27、2.矩阵转置和展升:vsc和vcs是和的列向量形式:转置这些权重矩阵是为了能够比较源代码和注释之间的对应关系。将转置后的矩阵展升为列向量是为了后续能够应用降维和归一化处理。
28、3.降维:vs′c和vc′s是降维后的列向量:降维是为了减少数据的复杂性,同时保留最重要的信息。这有助于模型更有效地学习源代码和注释之间的潜在关系。
29、4.归一化:psc=softmax(vs′c)和pcs=softmax(vc′s):归一化是为了将降维后的向量转换为概率分布,这样就可以使用信息论的方法来比较两个分布之间的相似性;
30、5.计算相似度:使用jensen-shannon散度djs计算相似度:
31、lsim(xi,yi;θxy,θyx)=djs(psc||pcs)
32、jensen-shannon散度是一种衡量两个概率分布之间差异的方法,它的值越低表示两个分布越相似。在这个上下文中,lsim衡量了源代码和注释之间的语义一致性。
33、通过这种方式,lsim(xi,yi;θxy,θyx)可以作为模型的一个正则化项,帮助模型在训练过程中更好地学习源代码和注释之间的对应关系,从而提高代码注释和代码生成任务的性能。
34、综上所述,本发明具有以下有益效果:
35、·使用transformer模型组合搭建双重模型架构很好的平衡了注释生成和代码生成任务之间性能,并且解决了长依赖问题。
36、·在transformer模型的基础上采用注释生成和代码生成之间的概率相关作为正则化项,并采用一种基于注意力的约束来保证在训练过程中两个模型的注意权重的相似性。
1.一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:包括以下步骤:
2.根据权利要求1所述的一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:在步骤(1)中,
3.根据权利要求1所述的一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:步骤(5)5.3模型训练中在代码注释模型和代码生成模型中,这种对齐关系的权重矩阵通过transform编码器-解码器注意力权重表示;将这个过程抽象为以下几个步骤,并用数学公式表示:
4.根据权利要求1所述的一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:在步骤(5)5.1模型训练中,在transformer模型的基础上采用代码注释和代码生成之间的概率相关作为正则化项;代码注释被视为一个文本生成任务,给定输入代码片段x=(x1,x2,x3…xm),目的是生成可读的自然语言y=(y1,y2,y3…yn),这n个词描述了输入代码片段x;系统试图找到最优的关于x的序列y;
5.根据权利要求4所述的一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:在transformer模型的基础上采用代码注释和代码生成之间的概率相关作为正则化项其目的是利用双重性,使两个双重任务能够保持相互学习直到收敛;给定两个任务:第一个任务将样本从空间x作为输入,映射到输出空间y,另一个任务将样本从空间y作为输入,映射到输出空间x;因此,第一个任务是p(y|x),第二个任务是p(x|y);根据贝叶斯定理,如果两个模型均完美运行,应该有:
6.根据权利要求1所述的一种基于transformer模型的代码生成和代码注释的双重模型方法,其特征在于:在步骤(5)双重任务迭代训练中:
