1.一种基于代码层次结构的预训练网络的输入编码方法,其特征在于,包括:对原始代码序列进行分词并构建相应的token词表;
利用所述token词表对分词后的代码序列进行转化,获取代码序列嵌入;
根据所述原始代码序列的缩进层次,获取层次值序列嵌入;
根据所述层次值序列嵌入,获取层次编码结果;以及拼接每行的所述层次值序列嵌入与该行所属的所述代码序列嵌入,获取向量表示结果;
获取所述原始代码序列的位置编码结果;
融合所述向量表示结果、所述层次编码结果和所述位置编码结果,获取所述预训练网络的输入向量;
所述根据所述原始代码序列的缩进层次,获取层次值序列嵌入;包括:对所述原始代码序列普通格式化并按行遍历,将每行的缩进量作为层次值,获取与代码序列Stoken对应的层次值序列Slevel;
对所述层次值序列Slevel处理:
Elevel=Embedding′(Slevel,d)其中,Elevel表示层次值序列嵌入,Embedding′表示层次嵌入操作;
将所述层次值序列嵌入进行归一化,获取所述层次编码结果,表示为:E′level=Sigmoid(Elevel)其中,E′level表示层次编码结果,Sigmoid表示非线性激活函数;
拼接每行的所述层次值序列嵌入与该行所属的所述代码序列嵌入,获取向量表示结果;表示为:E′token=Linear(concat(Elevel,Etoken,0),k*d,d)其中,E′token表示向量表示结果;Linear表示线性变换操作;concat表示拼接操作;Etoken表示代码序列嵌入。
2.如权利要求1所述的输入编码方法,其特征在于,所述对原始代码序列进行分词并构建相应的词表;包括:根据数据样本中包含的语言类型,选择与所述原始代码序列所使用的编程语言对应的语法分析器;
加载本地的语法分析器和对应的语言;
通过加载的语法分析器对所述原始代码序列进行分词,并构建相应的token词表;其中每个token组包含若干子token。
3.如权利要求2所述的输入编码方法,其特征在于,所述利用所述token词表对分词后的代码序列进行转化,获取代码序列嵌入;包括:利用所述token词表对分词后的代码序列进行替换,并对token进行填充,使得每个token组均包含有k个子token,以获取代码序列Stoken;
对所述代码序列Stoken进行处理,获取代码序列嵌入Etoken;
其中,tokeni,j表示代码序列Stoken中第i个token中的第j个子token,ntoken表示token词表中包含的token值范围,Embedding表示代码嵌入操作,d表示嵌入的维数。
4.如权利要求1所述的输入编码方法,其特征在于,采用余弦位置编码方式获取所述原始代码序列的位置编码结果PE。
5.如权利要求4所述的输入编码方法,其特征在于,所述融合所述向量表示结果、所述层次编码结果和所述位置编码结果,获取所述预训练网络的输入向量;表示为:input=Wh·E′level+Wp·PE+E'token其中,input表示输入向量,Wh、Wp分别表示相应权重。
6.一种基于代码层次结构的预训练网络的输入编码系统,其特征在于,用于执行如权利要求1所述的输入编码方法,包括:分词模块,用于对原始代码序列进行分词并构建相应的token词表;
转化模块,用于利用所述token词表对分词后的代码序列进行转化,获取代码序列嵌入;
获取模块,用于根据所述原始代码序列的缩进层次,获取层次值序列嵌入;
第一编码模块,用于根据所述层次值序列嵌入,获取层次编码结果;以及拼接每行的所述层次值序列嵌入与该行所属的所述代码序列嵌入,获取向量表示结果;
第二编码模块,用于获取所述原始代码序列的位置编码结果;
融合模块,用于融合所述向量表示结果、所述层次编码结果和所述位置编码结果,获取所述预训练网络的输入向量。
7.一种存储介质,其特征在于,其存储有用于基于代码层次结构的预训练网络的输入编码的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1~5任一项所述的输入编码方法。
8.一种电子设备,其特征在于,包括:
一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如权利要求1~5任一项所述的输入编码方法。