欢迎来到知嘟嘟! 联系电话:13336804447 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13336804447
知嘟嘟经纪人
收藏
专利号: 202110368686X
申请人: 南通大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2025-04-28
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种基于JEAN的软件代码推荐方法,其特征在于,包括如下步骤:S1、构建JEAN模型;

S2、从GitHub上收集带有描述的java代码段数据集,并对其预处理用作训练集,用来训练JEAN模型;

S3、构建代码库,使用JEAN模型中的代码嵌入表示模块将代码库中的所有代码段嵌入成代码向量;

S4、开发人员进行在线搜索代码,输入查询后,JEAN模型中的描述嵌入表示模块将查询嵌入成查询向量;

S5、使用余弦相似性计算查询向量和代码库中的所有代码向量之间的相似性,返回与查询向量最相关的向量的代码段;

步骤S1中,JEAN模型分为三个子模块:

S1.1、代码嵌入表示模块:用于表示代码段中Tokens、Method name、API sequence三个模态的向量,然后Attention机制为代码段中每个模态的不同部分赋予不同的权重,最后将Attention向量融合成一个单独的向量;

S1.2、描述嵌入表示模块:用于将自然语言描述嵌入到向量中;

S1.3、余弦相似度模块:用于衡量代码段和描述之间的相似度;

步骤S1.1中的具体步骤如下:

S1.1.1、假设一个输入代码段M=[A,B,C],其中A={a1,a2 ,…,am}表示为Tokens序列,B={b1,b2 ,…,bm}表示为Method name序列,C={c1,c2,…,cm}表示为API sequence;

S1.1.1.1、对于Tokens,采用GRU网络嵌入向量:,

T T

其中,at是Tokens中的词嵌入向量,ht 是隐藏层状态值,最终隐藏层状态值hm 代表Tokens模态表示;

S1.1.1.2、与嵌入Tokens序列相同,对于Method name,也是采用GRU网络嵌入向量:,

M M

其中,bt是Method name中的词嵌入向量,ht 是隐藏层状态值,最终隐藏层状态值hm 代表Method name模态表示;

S1.1.1.3、API sequence采用GRU网络嵌入向量:,

A A

其中,ct是API sequence中的词嵌入向量,ht是隐藏层状态值,最终隐藏层状态值hm 代表API sequence模态表示;

S1.1.2、获得每个模态的嵌入表示后,由于每个模态中的不同部分对最终的语义表示的贡献度是不同的,引入Attention机制为每个模态的不同部分赋予不同的权重;

S1.1.2.1、对于Tokens,不同的Tokens对代码段的最终语义表示的贡献度是不同的,引入Attention机制为代码段中对语义有重要贡献的Tokens序列赋予更高的权重;Tokens的Attention分数计算公式如下:,

T

其中,fT是线性层函数,ht是第t个Tokens的隐藏层状态,cT是Tokens的上下文向量;

获得了Tokens的Attention分数后,得到Tokens的Attention向量:;

S1.1.2.2、对于Method name,不同的Method name对代码段的最终语义表示的贡献度是不同的,需要引入Attention机制为代码段中对语义有重要贡献的Method name序列赋予更高的权重;Method name的Attention分数计算公式如下:,

M

其中,fM是线性层函数,ht是第t个Method name的隐藏层状态,cM是Method name的上下文向量;

获得了Method name的Attention分数后,得到Method name的Attention向量:;

S1.1.2.3、对于API sequence,不同的API sequence对代码段的最终语义表示的贡献度是不同的,引入Attention机制为代码段中对语义有重要贡献的API sequence赋予更高的权重;API sequence的Attention分数计算公式如下:,

A

其中,fA是线性层函数,ht是第t个API sequence的隐藏层状态,cA是API sequence的上下文向量;

获得了API sequence的Attention分数后,就可以得到API sequence的Attention向量:;

S1.1.3、在获得了每个模态的Attention向量后,将这三个模态的Attention向量通过一个线性层来融合为一个向量:,

其中,P为最终代码段的嵌入表示,W是Attention权值,[T;M;A]表示三个向量的连接;

步骤S2中,训练模型使用的是Ranking Loss函数,Ranking Loss函数的目的是去预测输入样本之间的相对距离,也称之为度量学习;

在使用Ranking Loss的过程中,首先从输入数据中提取出特征,并且得到其各自的嵌入表达;然后,定义一个距离度量函数用以度量这些嵌入表达之间的相似度;最终,训练特征提取器,以对于特定的样本对产生特定的相似度度量;

+ ‑

步骤S2中,训练时,将每个训练实例构建为一个三元组,对于每个代码段P,都+ ‑ ‑有一个正确的描述Q 和一个错误的描述Q ,错误的描述Q 是从所有的描述中随机选择的,当+ ‑ + ‑在三元组< P,Q ,Q >训练集上进行训练时,首先预测两个< P,Q >对和< P,Q>对的余弦相‑ ‑似性d,其目标是代码段P和错误的描述Q间的余弦相似性d(P,Q)与代码段M和正确的描述Q+ +间的余弦相似性d(P,Q)之差大于一个阈值0.05,最小化Ranking Loss:,

其中,α代表模型参数,T代表训练数据集;

+ ‑

步骤S2中,训练过程中,三元组有三种情况:‑ +

S2.1、d(P,Q)>0.05+d(P,Q),在向量空间中,对比起正确的描述,错误的描述和代码段已经有足够的距离,此时loss为0,网络参数将不会继续更新;

‑ +

S2.2、d(P,Q)< d(P,Q),错误的描述比起正确的描述更接近代码段,此时loss为正值并且比0.05大,网络参数可以继续更新;

+ ‑ +

S2.3、d(P,Q)< d(P,Q)< 0.05+d(P,Q),在这种情况下,错误的描述到代码段的距离比起正确的描述来说,虽然是大于后者,但是并没有大于设定的阈值0.05,此时loss仍然为正值,但是小于0.05,此时网络参数可以继续更新;

步骤S4的具体步骤如下:

开发人员输入查询后,JEAN模型中的描述嵌入表示模块将查询嵌入成查询向量,描述嵌入表示模块具体如下:描述嵌入表示模块将自然语言描述和查询嵌入到向量中,一个自然语言描述或者查询Q={q1,q2,…,qn}是由n个单词序列组成的,对于自然语言描述或者查询Q,使用GRU网络嵌入到向量中:,

Q

其中,qt是自然语言描述或者查询中的词嵌入向量,ht 是隐藏层状态值,最终隐藏层状Q态值hn代表自然语言描述或者查询Q的嵌入表示。

2.根据权利要求1所述的基于JEAN的软件代码推荐方法,其特征在于,步骤S3的具体步骤如下:从GitHub上收集至少有25颗Star的Java项目,然后使用JEAN模型中的代码嵌入表示模块将代码库中的所有代码段嵌入成代码向量,以构建代码库。

3.根据权利要求1所述的基于JEAN的软件代码推荐方法,其特征在于,步骤S5的具体步骤如下:在获得代码嵌入向量P和查询向量Q后,使用余弦相似度来测量它们两个向量之间的相似度,其定义公式如下:,

sim(P,Q)值越高,说明代码和自然语言描述或者查询的相关性就越高,然后返回与查询向量最相关的向量的代码段。