一种基于深度语义挖掘的代码段推荐方法技术

技术编号:19277404 阅读:46 留言:0更新日期:2018-10-30 17:59
本发明专利技术公开了一种基于深度语义挖掘的代码段推荐方法,利用了深度学习技术在自然语言处理中的作用及其在自然语言语义挖掘中的优势,并且结合了有查询代码段推荐的特点。根据输入的自然语言搜索和代码段自身及其所带的注释,深度挖掘自然语言语义和代码段具体功能,生成句向量和段落向量,使得语义属性一致的代码段和自然语言查询因此被映射到相似的向量空间,为给定的查询推荐最匹配的、相似度由高到低排好序的N个代码段。本方法不仅提高了推荐的准确度,还能提高推荐的查全率,并对输入的自然语言查询查询具有较好的容错能力。

A code segment recommendation method based on deep semantic mining

The invention discloses a code segment recommendation method based on deep semantic mining, which takes advantage of the role of deep learning technology in natural language processing and its advantages in natural language semantic mining, and combines the characteristics of query code segment recommendation. According to the input natural language search and the code segment itself and the annotations it contains, we can mine the natural language semantics and the specific functions of the code segment in depth, generate sentence vectors and paragraph vectors, so that the semantically consistent code segments and natural language queries are mapped to similar vector spaces, and recommend the best matching for a given query. The N code segment with high similarity and high order is arranged from high to low. This method not only improves the accuracy of recommendation, but also improves the recall rate of recommendation, and has a good fault-tolerant ability for inputted natural language queries.

【技术实现步骤摘要】
一种基于深度语义挖掘的代码段推荐方法
本专利技术属于有查询的代码推荐的
,具体指代一种基于深度语义挖掘的代码段推荐方法。
技术介绍
在实际的代码编写过程中,开发人员经常会遇到不熟悉的编程任务或者需要实现某些特定的功能,在这样的情况下,开发人员如果能找到已有的类似代码段来学习其使用方法或者是直接复制粘贴然后进行修改完善来进行代码复用,这样一来能够给开发人员节省大量时间、精力以及无意义的重复工作;然而,如何基于开发者实际需求推荐高质量的代码段则是软件复用的重要问题。在实际开发过程中,开发者通常会选择使用搜索引擎来查询需要的代码段。但是由于软件代码具有整体性,代码段中的关键词并不能准确的描述一段代码的功能,所以查询结果通常不能尽如人意。另外,已有的推荐方法通常仅关注代码段本身而忽视其描述信息,而代码段的描述信息最简单直观的用自然语言描述了该代码段的功能。近年来,由于深度学习的广泛应用,语言处理领域也取得了突破性进展,使得对自然语言和编程语言进行深度语义和信息挖掘也能取得很好的效果。所以,将语言处理技术与代码推荐相结合是一种新型有效的推荐方法。
技术实现思路
针对于上述现有技术的不足,本专利技术的目的在于提供一种基于深度语义挖掘的代码段推荐方法,使用深度学习技术支持面向自然语言查询的代码段推荐;本专利技术能够根据用户的自然语言搜索和代码段自身所带的注释及代码段本体,深度挖掘自然语言语义和代码段具体功能,使得语义属性一致的带注释代码段和自然语言查询因此被映射到相似的向量空间,为给定的查询推荐最匹配的代码段。为达到上述目的,本专利技术采用的技术方案如下:本专利技术的一种基于深度语义挖掘的代码段推荐方法,包括如下步骤:步骤1):构造大规模的带方法描述信息的代码段集S;步骤2):构造方法描述信息集D1和方法主体集D2,构造注释集合D1’,并利用构造好的数据集训练Encoder-Decoder自然语言句向量生成器模型M1,训练Encoder-Decoder编程语言段落向量生成器模型M2;步骤3):抽取代码段集S中每个代码段的方法名称Name,并和该代码段映射后向量表示α’构成键值对形式<Name,α’>,作为推荐时所用的索引文件;步骤4):对一个给定的自然语言查询,得到其对应的自然语言句向量,然后在带方法描述信息的代码段集S中对每个查询推荐最匹配的N个排好序的代码段。优选地,所述步骤1)具体包括:从开源软件平台获取具体项目,对具体项目中源代码文件按方法为单位进行切割,得到带方法描述信息的代码段集S,每个代码段的名称形式为包名&类名&方法名;。优选地,所述步骤1)具体还包括:所述具体项目为Java项目、Android项目以及其它项目。优选地,所述步骤2)具体包括:21)以方法描述信息集D1为训练集对Encoder-Decoder自然语言句向量生成器模型M1进行训练,收敛到指定状态,完成自然语言句向量生成器的训练;将方法描述信息集D1中每个代码段注释的第一个句子抽取出来作为输入,然后生成自然语言句子向量α1并将其作为对应带注释代码段向量表示的一部分;22)以方法主体集D2为训练集对Encoder-Decoder编程语言段落向量生成器模型M2进行训练,在训练到指定收敛状态时完成模型训练,并且同时生成每个代码段主体的段向量α2;23)将自然语言句子向量α1和代码段主体的段向量α2加权相加,得到向量α并将其作为最终能够表征整个带注释代码段的向量,然后将所有向量α的集合和注释集合D1’的自然语言句子向量表示作为训练集来训练神经网络映射模型M3,并在训练完成后经过神经网络映射模型M3的映射将向量α映射得到带注释代码段映射后向量表示α’。优选地,所述步骤4)具体包括:41)对于训练好的Encoder-Decoder自然语言句向量生成器模型M1,给定一个自然语言输入计算得到一个指定维度的查询语句句向量β;42)以两个向量的夹角cosθ表示这两个向量之间的相似度,计算映射后向量表示α’和查询语句句向量β之间的相似度值,对给定的自然语言查询推荐与其最相近的N个代码段,并按照相似度由高到低排序。本专利技术的有益效果:本专利技术利用深度学习技术在自然语言处理中的作用,以及其在语言语义挖掘中的优势,用于解决如何根据给定的自然语言查询推荐高质量的带注释代码段问题;具有以下优点:(1)利用深度学习进行自然语言处理能够真正深入挖掘自然语言语义,而不是仅仅利用文本关键词进行匹配,使得语义相同的语句所对应的句向量在语义空间距离更近,这样就能真正挖掘出查询所要表达的含义,进而使推荐时的匹配更加准确,提高了推荐的准确性。(2)利用深度学习对代码段主体进行段落向量化的处理方法能够挖掘代码段结构信息以及在编程语言层次的语义信息,而不仅仅是简单的特征词提取,这样就充分挖掘了代码段主体本身所包含的信息,进而能够改进代码段推荐的效果。(3)利用深度语义匹配得到注释语义最相近的N个代码段作为推荐结果,并按照语义相似度由高到低排序,这样即使输入的查询表达不够清晰明了或有些许偏差,也能够在相对较低的位置找到合适的推荐结果,不仅提高了查全率,还有一定的容错能力。附图说明图1为本专利技术中生成句子向量和段落向量所使用框架模型示意图。图2为本专利技术中所使用的Encoder-Decoder模型示意图。图3为本专利技术中所使用的Encoder-Decoder模型中的基本单元示意图。图4为本专利技术的原理图。具体实施方式为了便于本领域技术人员的理解,下面结合实施例与附图对本专利技术作进一步的说明,实施方式提及的内容并非对本专利技术的限定。下面结合附图1-图4以Java代码段推荐为例对专利技术的技术方案进行详细说明:步骤1:构造大规模的带方法描述信息的代码段集S;其中,11)在开源的软件平台(比如GitHub)上获取Java项目,对项目中Java文件按照方法为单位进行切割,得到带有方法描述信息的方法,写入包名&类名&方法名为文件名的文件中。12)对初步得到的带方法描述信息的代码段集S进行筛选,将劣质(比如没有方法描述信息)或无用(比如测试方法)代码段删除,得到精简后的高质量的S集合。步骤2:构造方法描述信息集D1和训练编程语言段落向量所使用的方法主体集D2;抽取所有方法的描述信息,得到训练自然语言句向量所使用的方法描述信息集D1,抽取方法描述信息的第一句得到注释集合D1’,抽取所有方法的代码段本体,得到训练代码段的段向量所使用的方法主体集D2。步骤3:构造并训练自然语言句子向量生成器和编程语言段落向量生成器,并得到带注释代码段的向量表示α,然后通过训练好的神经网络映射模型将向量α映射得到向量α’;其中,31)自然语言的句向量生成器以方法描述信息集D1为训练集,然后对Encoder-Decoder自然语言句向量生成器模型M1进行训练直至收敛到指定状态,完成自然语言句向量生成器的训练;将方法描述信息集D1中每个代码段注释的第一个句子抽取出来作为M1的输入,生成自然语言句子向量α1并将其作为对应带注释代码段向量表示的一部分;32)编程语言的段落向量生成器以方法主体集D2为输入对Encoder-Decoder编程语言段落向量生成器模型M2进行训练,在训练到指定收敛状态的时训练本文档来自技高网...

【技术保护点】
1.一种基于深度语义挖掘的代码段推荐方法,其特征在于,包括如下步骤:步骤1):构造大规模的带方法描述信息的代码段集S;步骤2):构造方法描述信息集D1和方法主体集D2,构造注释集合D1’,并利用构造好的数据集训练Encoder‑Decoder自然语言句向量生成器模型M1,训练Encoder‑Decoder编程语言段落向量生成器模型M2;步骤3):抽取代码段集S中每个代码段的方法名称Name,并和该代码段映射后向量表示α’构成键值对形式

【技术特征摘要】
1.一种基于深度语义挖掘的代码段推荐方法,其特征在于,包括如下步骤:步骤1):构造大规模的带方法描述信息的代码段集S;步骤2):构造方法描述信息集D1和方法主体集D2,构造注释集合D1’,并利用构造好的数据集训练Encoder-Decoder自然语言句向量生成器模型M1,训练Encoder-Decoder编程语言段落向量生成器模型M2;步骤3):抽取代码段集S中每个代码段的方法名称Name,并和该代码段映射后向量表示α’构成键值对形式<Name,α’>,作为推荐时所用的索引文件;步骤4):对一个给定的自然语言查询,得到其对应的自然语言句向量,然后在带方法描述信息的代码段集S中对每个查询推荐最匹配的N个排好序的代码段。2.根据权利要求1所述的基于深度语义挖掘的代码段推荐方法,其特征在于,所述步骤1)具体包括:从开源软件平台获取具体项目,对具体项目中源代码文件按方法为单位进行切割,得到带方法描述信息的代码段集S,每个代码段的名称形式为包名&类名&方法名。3.根据权利要求2所述的基于深度语义挖掘的代码段推荐方法,其特征在于,所述步骤1)具体还包括:所述具体项目为Java项目或Android项目。4.根据权利要求1所述的基于深度语义挖掘的代码段推荐方法,其特征在于,所述步骤2)具体包括:21)以方法描述信息集D1...

【专利技术属性】
技术研发人员:陶传奇包盼盼黄志球周宇王铁鑫
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1