[发明专利]一种自动给代码打数据结构标签的方法有效
申请号: | 201910304797.7 | 申请日: | 2019-04-16 |
公开(公告)号: | CN110008344B | 公开(公告)日: | 2020-09-29 |
发明(设计)人: | 不公告发明人 | 申请(专利权)人: | 中森云链(成都)科技有限责任公司 |
主分类号: | G06F16/35 | 分类号: | G06F16/35;G06F16/335;G06F40/205 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 610041 四川省成都市高新*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自动 代码 数据结构 标签 方法 | ||
1.一种自动给代码打数据结构标签的方法,其特征在于,所述方法包括:
收集大量标注了数据结构的代码;
使用词法分析器和语法分析器把代码转为抽象语法树;
在树上使用注意力机制和残差块对结点编码,使用编码对代码打标签;
训练模型以及使用训练后的模型对新的代码进行预测,所述训练模型包括:
使用大量标数据结构代码来训练整体模型,首先使用词法分析器对这段代码进行词法分析;
使用语法分析器把词法分析后的代码转为抽象语法树;
把抽象语法树中每个结点进行嵌入,也就是把结点找到对应的实维向量;
使用残差块对每个结点的嵌入编码进行非线性变换得到新的语义编码;如下面公式:
e'=Rebq(e)=LN(W2·ReLU(W1·e)+e)
其中e为当前结点对应的嵌入编码,e∈Rembedding_size,embedding size为每个结点嵌入的维度,W1∈Rd_i×embedding_size,W2∈Rembedding_size×d_i,d_i为超参数,ReLU是ReLU激活函数,LN是层次归一化,Reb为残差块;
在树上从下到上对非叶子结点进行编码,使用注意力机制计算当前结点下所有子结点与当前结点最相关的语义表达;
Vc=A·HT
A=softmax(score(Q,H))
Q为n个相同当前结点通过残差块变换后的向量叠加后的矩阵,H为当前结点下n个子结点通过残差块变换后的向量叠加后的矩阵,score函数是计算当前结点表达与每个子结点表达的相似度,相似度越高,softmax后概率越大,score函数可以通过三种方式来计算当前结点与子结点的相似度,Vc为注意力表达;再把注意力向量与当前结点向量融合形成新的当前结点的向量表达,现在当前结点的向量表达既包括自己本身的语义表达,也包括所有子结点的语义表达;如下面的公式:
e”=ReLU(Rebq(e')+Rebc(Vc)+b)
其中e'为当前结点的向量编码,Vc为注意力向量Vc,Reb为残差块,b为偏值,ReLU为ReLU激活函数,e”为e'当前结点向量编码使用残差块编码与Vc注意力向量编码使用残差块编码融合后的向量编码;
最后使用根结点的编码进行分类,因为代码有可能属于多个类别,所以使用多个sigmoid分类器来得到多个数据结构的标签;
yi=sigmoid(W2·ReLU(W1·e'r)+b)
e'r为根结点的语义表达,ReLU为ReLU激活函数,sigmoid为sigmoid函数;
根结点的编码通过sigmoid函数有预测概率与真实概率差会产生损失值,再通过反向梯度传播来更新每个参数,进而达到训练的作用。
2.根据权利要求1所述的自动给代码打数据结构标签的方法,其特征在于,所述收集大量标注了数据结构的代码包括:
从网上通过爬虫技术收集十几万的代码,其中标注了对应的数据结构,数据结构包括树、链表、队列。
3.根据权利要求1所述的自动给代码打数据结构标签的方法,其特征在于,所述使用词法分析器包括:由于不同的代码语法不一样,需要针对不同语言使用不同的词法分析器,使用词法分析器把代码中不同类型的变量替换为对应的词。
4.根据权利要求1所述的自动给代码打数据结构标签的方法,其特征在于,所述使用语法分析器包括:针对不同的语言使用对应的语法分析器,使用语法分析器把词法分析后的代码转为抽象语法树。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中森云链(成都)科技有限责任公司,未经中森云链(成都)科技有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910304797.7/1.html,转载请声明来源钻瓜专利网。