CN110569030B - 代码推荐方法及装置 - Google Patents
代码推荐方法及装置 Download PDFInfo
- Publication number
- CN110569030B CN110569030B CN201810575512.9A CN201810575512A CN110569030B CN 110569030 B CN110569030 B CN 110569030B CN 201810575512 A CN201810575512 A CN 201810575512A CN 110569030 B CN110569030 B CN 110569030B
- Authority
- CN
- China
- Prior art keywords
- code unit
- candidate
- scope
- candidate code
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了一种用于推荐代码的方法和装置。该方法包括:估计候选集合中的候选代码单元在下一代码单元输入位置出现的可能性,以及根据所述估计的可能性,推荐所述候选集合中可能性高的候选代码单元,其中估计所述可能性包括应用约束条件,所述约束条件包括类型约束条件或作用域约束条件。对于每个候选代码单元,如果该候选代码单元满足约束条件,则降低该候选代码单元的可能性。
Description
背景技术
在程序开发环境中,通过使用代码编辑器中的代码补全功能,可以减少人工键入的次数,避免编辑错误,从而提高软件开发效率,优化代码质量。代码补全功能可以根据已经输入的一个或更多个代码单元(token),来预测并推荐下一个可能要输入的代码单元。这里,代码单元是对编程语言来说有意义的代码块。
依据代码单元出现的频率,代码单元可以被分为两类:高频出现的代码单元,低频出现的代码单元。其中,高频出现的代码单元例如包括关键字、运算符、换行符等;低频出现的代码单元例如包括变量等。
现有代码补全方法可以基于神经网络来实现,并且主要集中在两个方面:1.预测高频出现的代码单元的内容模式;2.预测低频出现的代码单元的位置模式。
针对上述第一方面,循环神经网络被广泛的应用于挖掘代码单元上下文的前后依赖关系,从而帮助预测高频代码单元的内容模式。针对上述第二方面,由于变量名之类的代码单元出现频率低,仅通过挖掘代码单元之间的依赖关系,往往无法得到正确的预测结果;为了提高例如变量名之类的低频出现的代码单元的预测精度,通常预测变量定义与变量使用之间的位置关联关系。
现有方法已经提出了基于指针网络(Pointer Network)的位置关联关系提取与基于循环神经网络的上下文信息提取的融合方法,但是仍然需要改进代码补全的准确度。
发明内容
为了解决上述问题,发明人认识到可以在位置关联关系中考虑代码单元的作用域与代码单元的类型之间的关系,以改进代码补全的准确度。
根据本公开内容的一个方面,提供了一种用于推荐代码的方法,包括:估计候选集合中的候选代码单元在下一代码单元输入位置出现的可能性,以及根据所述估计的可能性,推荐所述候选集合中可能性高的候选代码单元,其中估计所述可能性包括应用约束条件,所述约束条件包括类型约束条件或作用域约束条件,其中对于每个候选代码单元,如果该候选代码单元满足约束条件,则降低该候选代码单元的可能性。
根据本公开内容的一个方面,类型约束条件包括所述候选代码单元在当前输入的代码单元附近存在的代码单元中出现并且所述候选代码单元与当前输入的代码单元类型相同。
根据本公开内容的一个方面,作用域约束条件包括所述候选代码单元在当前输入的代码单元附近存在的代码单元中出现并且当前输入的代码单元不在该候选代码单元的作用域内。
根据本公开内容的另一个方面,提供了一种用于推荐代码的装置,包括至少一个处理器,被配置成执行如上所述所述的方法。
附图说明
参照下面结合附图对本发明实施例的说明,会更加容易地理解本发明的以上和其它目的、特点和优点。在附图中,相同的或对应的技术特征或部件将采用相同或对应的附图标记来表示。
图1示出了根据本公开内容的示例性实施例的代码推荐方法的流程图。
图2示出了根据本公开内容的示例性实施例的步骤S103中的应用类型约束条件的方法的流程图。
图3示出了根据本公开内容的一个示例性实施例的步骤S103中的应用作用域约束条件的方法300的流程图。
图4是示出作用域的一个示例的示意图。
图5是示出包含循环神经网络、类型注意力网络、作用域注意力网络和融合网络的整体框架的示意图。
图6是示出其中实现本公开内容的设备和方法的计算机的示例性结构的框图。
具体实施方式
本文中所用的术语,仅仅是为了描述特定的实施例,而不意图限定本公开内容。本文中所用的单数形式的“一”和“该”,旨在也包括复数形式,除非上下文中明确地另行指出。还要知道,“包含”一词在本说明书中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件,以及/或者它们的组合。
以下参照按照本公开内容实施例的方法、设备的流程图和/或框图描述本公开内容。应当注意,为了清楚的目的,附图和说明中省略了与本公开内容无关的、本领域普通技术人员已知的部件和处理的表示和描述。流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的制造品。
也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
应当明白,附图中的流程图和框图,图示了按照本公开内容各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本公开内容中,用于对网络进行训练的代码的集合(简称为“训练集”)是例如Github之类的代码库,并且可选地,还可以包括用户自己书写的代码的集合。在本公开内容中,以代码单元为序列中的基本单元。本文所称的序列指由代码单元组成的序列,有时也称为“代码单元序列”。
图1示出了根据本公开内容的示例性实施例的代码推荐方法100的流程图。
如图1所示,方法100从步骤S101开始。在步骤S103,对于候选集合中的每个候选代码单元,执行以下处理:估计该候选代码单元在下一代码单元输入位置出现的可能性,其中估计所述可能性包括应用约束条件。对于每个候选代码单元,如果该候选代码单元满足约束条件,则降低该候选代码单元的可能性,其中,所述约束条件包括类型约束或作用域约束。
候选集合可以包括之前已经输入的代码单元。用户下次将要输入的代码单元可能是候选集合中的代码单元,也可能是候选集合中未包含的代码单元。在一个示例中,候选集合是通过如下方式构造的代码字典:将来自训练集中的代码字符串分解为在语法上有意义的代码单元;对于相同的代码单元,只保留一个代码单元;将包含所有唯一的代码单元的集合用作代码字典。其中,训练集可以来自Github之类的代码库,可选地,训练集还可以包括用户自己编写的代码。
在步骤S105,根据在步骤S103中估计的候选集合中的每个候选代码单元的可能性,推荐所述候选集合中可能性高的候选代码单元。
方法100在步骤S107结束。
通过本示例性实施例的代码推荐方法,引入代码单元的作用域约束和/或类型约束(相邻类型互斥性约束),可以克服现有方法中代码补全准确度受限的问题,提升代码补全的准确度。图2示出了根据本公开内容的示例性实施例的步骤S103中的应用类型约束条件的方法200的流程图。类型约束的基本思想在于,在合法的代码序列中,相邻的两个代码单元的类型不能相同,即必须互斥。
如图2所示,方法200从步骤S201开始。在步骤S203,判断候选代码单元是否在当前输入的代码单元之前的若干个位置(以下,简称为“窗口”)出现。如果步骤S203中的判断结果为是,则转到步骤S205;否则,转到步骤S207结束。在步骤S205中,判断所述候选代码单元是否与当前输入的代码单元的类型相同。如果步骤S205中的判断结果为是,则由于如上所述的类型约束,在步骤S207中降低该候选代码单元在下一代码单元输入位置出现的可能性,然后,转到步骤S209结束;否则,直接转到步骤S209结束。
在一个示例中,代码单元的类型例如包括关键字、运算符、换行符、自定义变量名等。代码单元的类型可以通过如下方式来获得:通过对代码序列进行语法分析得到抽象语法树(AST),提取抽象语法树中的AST节点的类型,作为与该AST节点对应的代码单元的类型。
图3示出了根据本公开内容的一个示例性实施例的步骤S103中的应用作用域约束条件的方法300的流程图。作用域约束的基本思想在于:对于一个候选代码单元,如果当前输入的代码单元在该候选代码单元的作用域内,即当前输入位置可以访问到该候选代码单元,则该候选代码单元才有可能在下一输入位置与当前输入的代码单元一起出现以构成完整的语义。
如图3所示,方法从步骤S301开始。在步骤S303,判断候选代码单元是否在当前输入的代码单元之前的若干个位置出现。如果步骤S303中的判断结果为是,则转到步骤S305;否则,转到步骤S307结束。在步骤S305中,判断当前输入的代码单元是否无法访问到该候选代码单元。如果步骤S305中的判断结果为是,则由于如上所述的作用域约束,在步骤S307降低该候选代码单元在下一代码单元输入位置出现的可能性,然后,转到步骤S309结束;否则,直接转到步骤S309结束。
图4是示出作用域的一个示例的示意图。如图4所示,方框401表示第一层作用域,方框402表示第二层作用域,方框403和方框404分别表示第三层作用域。例如图中的变量j的内层变量在例如图中的变量i的外层变量的作用域内,即在变量j的位置可以访问变量i。例如图中的变量i的外层变量不在例如图中的变量j的内层变量的作用域内。同层不同作用域的变量(如图中的变量k和l)之间不能访问。
在一个示例中,通过将当前输入的代码单元的作用域嵌套路径与候选代码单元的作用域嵌套路径进行比较,判断当前输入的代码单元的位置是否可以访问到该候选代码单元。具体而言,如果该候选代码单元未被包含在以所述当前输入的代码单元为起点的序列中,则判断为当前输入的代码单元的位置不可以访问到该候选代码单元。在本实施例中,上述操作可由第三方工具来进行,其原理如下:建立一个作用域栈,并对代码序列经语法分析得到的抽象语法树(AST)进行深度优先遍历;每当遍历到树中的一个节点,根据该节点的类型,决定将该节点推入作用域栈(以下称为“入栈”)或弹出作用域栈(以下称为“出栈”),其中某些特殊的节点在入栈时被赋予新作用域开始标记;当遍历到标识出当前作用域结束的节点时,从作用域栈中弹出从栈顶到离栈顶最近的具有新作用域开始标记的节点之间的所有节点;通过入栈和出栈,获取节点之间的可访问关系,由此修改抽象语法树,生成作用域嵌套层级关系树,其中子节点可以访问父节点,父节点不可以访问子节点,兄弟节点之间可以相互访问。
在一个示例中,步骤S103中的应用约束条件可以既包括如图2所示的应用类型约束条件,也包括如图3所示的应用作用域约束条件。
在一个示例中,步骤S103还包括,如果判断候选代码单元不在当前输入的代码单元附近存在的代码单元中出现,则降低该候选代码单元的可能性。
在一个示例中,方法100还包括:通过循环神经网络来生成每个候选代码单元的上下文特征。相应地,方法100中如上所述的应用约束条件包括:基于所述上下文特征,通过针对类型约束条件的注意力网络(以下,简称为“类型注意力网络”)来生成与每个候选代码单元的可能性相关的类型注意力权重。
作为类型注意力网络的补充或替代,应用约束条件可包括:基于所述上下文特征,通过针对作用域约束条件的注意力网络(以下,简称为“作用域注意力网络”)来生成与每个候选代码单元的可能性相关的作用域注意力权重。
方法100还包括:通过融合网络将所述上下文特征与所述类型注意力权重和/或作用域注意力权重进行融合,以得到候选集合中的候选代码单元的可能性。
图5示出了包含循环神经网络、类型注意力网络、作用域注意力网络和融合网络的整体框架的示意图。以下,将结合图5分别描述循环神经网络、类型注意力网络、作用域注意力网络和融合网络的构造和功能。
循环神经网络
循环神经网络用于学习代码单元之间的上下文依赖关系,所述上下文依赖关系是通过代码序列中的前一位置代码单元与后一位置代码单元之间的状态传递来获取的。循环神经网络的输入是通过对代码字典中的每个代码单元进行独热(one-hot)编码而获得的独热编码向量,所述独热编码向量只有一个分量为1,其余分量全为0,并且与代码字典长度相等。
在一个示例中,可以通过循环神经网络中的嵌入操作单元501对独热编码向量进行由下面的式(1)表示的嵌入操作,从而转换成低维向量形式的非稀疏的嵌入特征:
xt=WembedSt (1)
其中,St表示序列中位置t处的独热编码向量,Wembed表示用于嵌入操作的权重矩阵,是要通过训练来得到的参数,xt表示与独热编码向量对应的嵌入特征,其可以是长度为数百的向量。
嵌入操作单元501连接有循环神经网络单元(RNN Cell)502,用于生成上下文特征。循环神经网络单元502的示例包括门控循环单元(GRU Cell)、长短期记忆单元(LSTMCell)等。
在一个示例中,将当前位置的来自嵌入操作单元501的嵌入特征xt和前一个位置的上下文特征ht-1通过由下面的式(2)-(7)表示的操作,转换成当前位置的上下文特征ht:
ft=σ(Wf·[ht-1,xt]+bf) (2)
it=σ(Wi·[ht-1,xt]+bi) (3)
ot=σ(Wo·[ht-1,xt]+bo) (6)
ht=ot*tanh(Ct) (7)
其中,σ为sigmoid函数,tanh为tanh激活函数,Wf,Wi,Wo分别表示遗忘门、输入门和输出门的循环神经网络单元权重矩阵,是要通过训练来得到的参数;bf,bi,bo分别表示遗忘门、输入门和输出门的循环神经网络单元偏置向量,是要通过训练来得到的参数;表示所产生的当前循环神经网络单元的状态增量;bc表示当前位置的长期记忆信息向量,是要通过训练来得到的参数;ft,it,ot分别表示循环神经网络单元中的遗忘门向量、输入门向量和输出门向量;Ct-1,Ct分别表示前一个循环神经网络单元和当前循环神经网络单元所对应的状态;“[]”表示向量连接操作,“·”表示点乘操作,“*”表示矩阵相乘运算。
类型注意力网络
类型注意力网络用于获得每个候选代码单元的类型约束特征(“类型注意力权重”的示例);具体地,类型注意力网络根据局部上下文信息,结合注意力机制,利用在合法的代码序列中相邻的两个代码单元的类型不能相同即必须互斥的约束来提取代码预测的位置模式,得到每个候选代码单元的类型约束特征。
在一个示例中,将由来自循环神经网络的当前位置的上下文特征ht和当前位置之前的固定大小的若干个位置(以下,简称为“窗口”)的上下文特征组成的序列[ht-N,…,ht-1]输入到类型注意力网络中包括的类型注意力单元503,通过由下面的式(8)-(10)表示的注意力机制网络来学习窗口中的每个上下文特征对预测当前位置代码单元的类型重要度:
CHt=[ht-N,…,ht-1] (8)
其中,N为窗口的大小,在本实施例中,N是事先人为指定的大于1的整数;CHt为由窗口中的上下文特征所组成的向量,WCH和Wch分别表示用于窗口中的上下文特征的类型权重和用于当前位置的上下文特征的类型权重,是要通过训练来得到的参数;Mc t表示提取到的类型权重特征矩阵,为其分量全为1的N维向量;向量αt的每个分量表示窗口内的每个上下文特征对预测出当前位置代码单元的类型重要度。
然后,依据代码单元的类型,通过类型注意力网络中包括的类型过滤单元504对由类型注意力单元503输出的窗口中的每个上下文特征的类型重要度进行调整,从而得到代码字典中的每个候选代码单元对于预测当前位置代码单元的类型重要度权重分值。具体地,对于代码字典中的每个候选代码单元,如果该候选代码单元未出现在窗口内,则降低该候选代码单元的类型重要度权重分值,例如将其类型重要度权重分值设为-1000;在该候选代码单元出现在窗口内的情况下,如果该候选代码单元的类型与当前位置代码单元的类型相同,则降低该候选代码单元的类型重要度权重分值,例如将其类型重要度权重分值设为-1000,否则,即当该候选代码单元的类型与当前位置代码单元的类型不同时,将该候选代码单元的类型重要度权重分值设为由类型注意力单元503输出的类型重要度。
通过类型注意力网络中包括的类型归一化单元505对由类型过滤单元504输出的每个候选代码单元的类型重要度分值进行归一化,以得到每个候选代码单元的类型约束特征。例如,可以采用softmax函数来进行归一化。在本实施例中,类型约束特征由向量ict表示,其长度等于代码字典的长度。
作用域注意力网络
作用域约束网络用于获得每个候选代码单元的作用域约束特征(“作用域注意力权重”的示例);具体地,作用域约束网络根据局部上下文信息,结合注意力机制,利用对于窗口中的代码单元,只有其作用域对于当前位置而言是可见的代码单元(即,只有当前位置可以访问到的代码单元)才能构成完整的语义的作用域可见约束来提取代码预测的位置模式,得到每个候选代码单元的作用域约束特征。
与如上所述的类型注意力网络类似,将由来自循环神经网络的当前位置的上下文特征ht和当前位置之前的窗口中的上下文特征组成的序列[ht-N,…,ht-1]输入到作用域注意力网络中包括的作用域注意力单元506,通过由下面的式(11)-(13)表示的注意力机制来学习窗口中的每个上下文特征对预测当前位置代码单元的作用域重要度:
LHt=[ht-N,…,ht-1] (11)
其中,N为窗口的大小,在本实施例中,N是事先人为指定的大于1的整数;LHt为窗口中的上下文特征所组成的向量,WLH和Wlh分别表示用于窗口中的上下文特征的作用域权重和用于当前位置的上下文特征的作用域权重,是要通过训练来得到的参数;Ml t表示提取到的作用域权重特征矩阵,为其分量全为1的N维向量;向量βt的每个分量表示当前位置之前的窗口内的每个上下文特征对预测出当前位置代码单元的作用域重要度。
然后,依据代码单元的作用域,通过作用域注意力网络中包括的作用域过滤单元507对由作用域注意力单元506输出的窗口中的每个上下文特征的作用域重要度进行调整,从而得到代码字典中的每个候选代码单元对于预测当前位置代码单元的作用域重要度权重分值。具体地,对于代码字典中的每个候选代码单元,如果该候选代码单元未出现在窗口内,则降低该候选代码单元的作用域重要度权重分值,例如将其作用域重要度权重分值设为-1000;在该候选代码单元出现在窗口内的情况下,如果该候选代码单元的作用域对于当前位置而言不可见(即当前位置无法访问到该候选代码单元),则降低该候选代码单元的作用域重要度权重分值,例如将其作用域重要度权重分值设为-1000,否则,当该候选代码单元对于当前位置而言可见时(即当前位置可以访问到该候选代码单元),将该候选代码单元的作用域重要度权重分值设为由作用域注意力单元506输出的作用域重要度。
与上述类型归一化单元505类似,作用域注意力网络中包括的作用域归一化单元508对由作用域过滤单元507输出的每个候选代码单元的作用域重要度分值进行归一化,得到每个候选代码单元的作用域约束特征。例如,可以采用softmax函数来进行归一化。在本实施例中,作用域约束特征由向量ilt表示,其长度等于代码字典的长度。
融合网络
特征融合网络将来自循环神经网络、类型约束网络和/或作用域约束网络的特征进行融合,以得到每个候选代码单元出现在当前预测位置的概率。以下,将给出在一个示例中类型约束网络和作用域约束网络二者都被包括的情况下的示例性特征融合网络的构造和功能。
首先,通过下面的式(14)所表示的操作,特征融合网络将与当前循环神经网络单元对应的上下文特征通过例如softmax之类的回归操作转化为长度与代码字典的长度相等的特征yt:
yt=softmax(Wyht+by) (14)
其中,Wy和by是要通过训练来得到的参数;
接着,通过下面的式(15)所表示的操作,特征融合网络利用来自类型约束网络的类型权重特征矩阵Mc t和类型重要度向量αt以及来自作用域约束网络的作用域权重特征矩阵Ml t和作用域重要度向量βt来构造注意力特征θt:
θt=αtMc t+βtMl t (15)
随后,通过下面的式(16)所表示的操作,特征融合网络利用来自循环神经网络的嵌入操作单元501的嵌入特征xt、来自循环神经网络的循环神经网络单元502的上下文特征ht以及上述注意力特征θt,通过例如softmax之类的回归操作,来得到上述yt、从类型约束网络输出的类型约束特征ict以及从作用域约束网络输出的作用域约束特征ilt的融合权重λt:
其中,Wλ和bλ是要通过训练来得到的参数;
最后,通过下面的式(17)所表示的操作,特征融合网络得到预测出的整个代码字典中的每个候选代码单元出现在当前位置的概率ypt:
ypt=[yt,ict,ilt]λt (17)
在类型约束网络和作用域约束网络中的仅一个被包含的情况下,本领域技术人员可以根据需要相应地修改上述特征融合网络的结构。
在本实施例中,对神经网络模型的训练可采用传统的操作方式。例如,基于梯度的参数学习算法,在例如最小二乘准则之类的准则下,使得当通过将来自训练数据的输入数据输入到包含待定参数的神经网络模型而获得的估计结果与来自训练数据的标准答案之间的差异最小时的参数的值成为最终要得到的神经网络模型的参数,从而完成神经网络模型的参数训练。所述待定参数例如包括上面所述的Wembed,Wf,Wi,Wo,bf,bi,bo等。
如上所述,完成神经网络模型的训练后,可以使用经训练的神经网络模型来预测和推荐代码。具体而言,将在预测起点之前已经输入的代码单元序列输入到经训练的神经网络模型,以便得到预测出的代码字典中的每个候选代码单元出现在下一个位置的概率。在一个实施例中,所述神经网络模型可以仅被使用一次,以预测下一个位置的代码单元。在另一个实施例中,可以连续多次使用该神经网络模型,来对代码单元序列进行预测。例如,可以根据预测出的候选代码单元的概率,选取概率最大的候选代码单元,作为当前的输入,继续预测下一个位置要出现的候选代码单元。例如,还可以选取概率较大的多于一个的候选代码单元,以分支形式分别以这些候选代码单元中的每一个作为当前的输入,继续预测下一个位置要出现的代码单元。预测出的代码单元可以被推荐给用户以供输入或选择。
所属技术领域的技术人员知道,本公开内容可以体现为系统、方法或计算机程序产品。因此,本公开内容可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本公开内容还可以采取体现在任何有形的表达介质(medium ofexpression)中的计算机程序产品的形式,该介质中包含计算机可用的程序码。
可以使用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质,计算机可读存储介质例如可以是--但不限于--电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或传播介质、或前述各项的任何适当的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下:有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或前述各项的任何适当的组合。在本文语境中,计算机可读存储介质可以是任何含有或存储供指令执行系统、装置或器件使用的或与指令执行系统、装置或器件相联系的程序的有形介质。
计算机可读信号介质可以包括例如在基带中或作为载波的一部分传播的带有计算机可读程序代码的数据信号。这样一种传播信号可以采取任何适当的形式,包括--但不限于--电磁的、光的或其任何适当的组合。计算机可读信号介质可以是不同于计算机可读存储介质的、可以传达、传播或传输供指令执行系统、装置或器件使用的或与指令执行系统、装置或器件相联系的程序的任何一种计算机可读介质。包含在计算机可读介质中的程序代码可以采用任何适当的介质传输,包括-但不限于-无线、有线、光缆、射频等等、或上述各项的任何适当的组合。
用于执行本公开内容的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言—诸如”C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络--包括局域网(LAN)或广域网(WAN)--连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。
图6是示出其中实现本公开内容的设备和方法的计算机的示例性结构的框图。
在图6中,中央处理单元(CPU)601根据只读映射数据(ROM)602中存储的程序或从存储部分608加载到随机存取映射数据(RAM)603的程序执行各种处理。在RAM 603中,也根据需要存储当CPU 601执行各种处理等等时所需的数据。
CPU 601、ROM 602和RAM 603经由总线604彼此连接。输入/输出接口605也连接到总线604。
下述部件连接到输入/输出接口605:输入部分606,包括键盘、鼠标等等;输出部分607,包括显示器,比如阴极射线管(CRT)、液晶显示器(LCD)等等,和扬声器等等;存储部分608,包括硬盘等等;和通信部分609,包括网络接口卡比如LAN卡、调制解调器等等。通信部分609经由网络比如因特网执行通信处理。
根据需要,驱动器610也连接到输入/输出接口605。可拆卸介质611比如磁盘、光盘、磁光盘、半导体映射数据等等根据需要被安装在驱动器610上,使得从中读出的计算机程序根据需要被安装到存储部分608中。
在通过软件实现上述步骤和处理的情况下,从网络比如因特网或存储介质比如可拆卸介质611安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图6所示的其中存储有程序、与方法相分离地分发以向用户提供程序的可拆卸介质611。可拆卸介质611的例子包含磁盘、光盘(包含光盘只读映射数据(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)和半导体映射数据。或者,存储介质可以是ROM 602、存储部分608中包含的硬盘等等,其中存有程序,并且与包含它们的方法一起被分发给用户。
以下的权利要求中的对应结构、材料、操作以及所有功能性限定的装置(means)或步骤的等同替换,旨在包括任何用于与在权利要求中具体指出的其它单元相组合地执行该功能的结构、材料或操作。所给出的对本公开内容的描述其目的在于示意和描述,并非是穷尽性的,也并非是要把本公开内容限定到所表述的形式。对于所属技术领域的普通技术人员来说,在不偏离本公开内容范围和精神的情况下,显然可以作出许多修改和变型。对实施例的选择和说明,是为了最好地解释本公开内容的原理和实际应用,使所属技术领域的普通技术人员能够明了,本公开内容可以有适合所要的特定用途的具有各种改变的各种实施方式。
这里描述了下面的示例性实施例(均用“附记”表示)。
附记1.一种用于推荐代码的方法,包括:
估计候选集合中的候选代码单元在下一代码单元输入位置出现的可能性,以及
根据所述估计的可能性,推荐所述候选集合中可能性高的候选代码单元,
其中估计所述可能性包括应用约束条件,所述约束条件包括类型约束条件或作用域约束条件,其中对于每个候选代码单元,如果该候选代码单元满足约束条件,则降低该候选代码单元的可能性。
附记2.根据附记1所述的方法,其中所述类型约束条件包括:
所述候选代码单元在当前输入的代码单元附近存在的代码单元中出现并且所述候选代码单元与当前输入的代码单元类型相同。
附记3.根据附记1或2所述的方法,其中所述作用域约束条件包括:
所述候选代码单元在当前输入的代码单元附近存在的代码单元中出现,并且当前输入的代码单元不在该候选代码单元的作用域内。
附记4.根据附记3所述的方法,其中估计所述可能性包括应用所述类型约束条件和所述作用域约束条件。
附记5.根据附记1或3所述的方法,其中估计所述可能性还包括:
对于每个候选代码单元,如果该候选代码单元不在当前输入的代码单元附近存在的代码单元中出现,则降低该候选代码单元的可能性。
附记6.根据附记1所述的方法,还包括:
通过循环神经网络来生成每个候选代码单元的上下文特征;
其中应用约束条件包括:
基于所述上下文特征,通过针对类型约束条件的注意力网络来生成与每个候选代码单元的可能性相关的权重;以及
通过融合网络将所述上下文特征与所述权重进行融合,以得到候选集合中的候选代码单元的可能性。
附记7.根据附记1所述的方法,还包括:
通过循环神经网络来生成每个候选代码单元的上下文特征;
其中应用约束条件包括:
基于所述上下文特征,通过针对作用域约束条件的注意力网络来生成与每个候选代码单元的可能性相关的权重;以及
通过融合网络将所述上下文特征与所述权重进行融合,以得到候选集合中的候选代码单元的可能性。
附记8.根据附记6或7所述的方法,还包括根据估计的可能性与标记的可能性来训练所述网络。
附记9.根据附记3所述的方法,其中所述当前输入的代码单元是否在候选代码单元的作用域内是通过将所述当前输入的代码单元的作用域嵌套路径与所述候选代码单元的作用域嵌套路径进行比较来判断的,其中如果所述候选代码单元未被包含在以所述当前输入的代码单元为起点的序列中,则判断为当前输入的代码单元不在所述候选代码单元的作用域内。
附记10.根据附记3所述的方法,其中代码单元的类型包括关键字、自定义变量名、运算符、换行符。
附记11.一种用于推荐代码的装置,包括:
至少一个处理器,被配置成执行如附记1-10中任一个所述的方法。
Claims (10)
1.一种用于推荐代码的方法,包括:
估计候选集合中的候选代码单元在下一代码单元输入位置出现的可能性,以及
根据所估计的可能性,推荐所述候选集合中的所述可能性高的候选代码单元,
其中估计所述可能性包括应用约束条件,所述约束条件包括类型约束条件或作用域约束条件,其中对于每个候选代码单元:
应用于该候选代码单元的类型约束条件与该候选代码单元的类型及当前输入的代码单元的类型相关联,
应用于该候选代码单元的作用域约束条件与该候选代码单元的作用域及所述当前输入的代码单元的位置相关联;并且
如果该候选代码单元满足约束条件,则降低该候选代码单元的所述可能性。
2.根据权利要求1所述的方法,其中所述类型约束条件包括:
所述候选代码单元在所述当前输入的代码单元附近存在的代码单元中出现并且所述候选代码单元与所述当前输入的代码单元类型相同。
3.根据权利要求1或2所述的方法,其中所述作用域约束条件包括:
所述候选代码单元在所述当前输入的代码单元附近存在的代码单元中出现,并且所述当前输入的代码单元不在该候选代码单元的作用域内。
4.根据权利要求3所述的方法,其中估计所述可能性包括应用所述类型约束条件和所述作用域约束条件。
5.根据权利要求1或3所述的方法,其中估计所述可能性还包括:
对于每个候选代码单元,如果该候选代码单元不在所述当前输入的代码单元附近存在的代码单元中出现,则降低该候选代码单元的可能性。
6.根据权利要求1所述的方法,还包括:
通过循环神经网络来生成每个候选代码单元的上下文特征;
其中应用约束条件包括:
基于所述上下文特征,通过针对类型约束条件的注意力网络来生成与每个候选代码单元的可能性相关的权重;以及
通过融合网络将所述上下文特征与所述权重进行融合,以得到候选集合中的候选代码单元的可能性。
7.根据权利要求1所述的方法,还包括:
通过循环神经网络来生成每个候选代码单元的上下文特征;
其中应用约束条件包括:
基于所述上下文特征,通过针对作用域约束条件的注意力网络来生成与每个候选代码单元的可能性相关的权重;以及
通过融合网络将所述上下文特征与所述权重进行融合,以得到候选集合中的候选代码单元的可能性。
8.根据权利要求6或7所述的方法,还包括根据估计的可能性与标记的可能性来训练所述网络。
9.根据权利要求3所述的方法,其中所述当前输入的代码单元是否在候选代码单元的作用域内是通过将所述当前输入的代码单元的作用域嵌套路径与所述候选代码单元的作用域嵌套路径进行比较来判断的,其中如果所述候选代码单元未被包含在以所述当前输入的代码单元为起点的序列中,则判断为当前输入的代码单元不在所述候选代码单元的作用域内。
10.一种用于推荐代码的装置,包括:
至少一个处理器,被配置成执行如权利要求1-9中任一个所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810575512.9A CN110569030B (zh) | 2018-06-06 | 2018-06-06 | 代码推荐方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810575512.9A CN110569030B (zh) | 2018-06-06 | 2018-06-06 | 代码推荐方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110569030A CN110569030A (zh) | 2019-12-13 |
CN110569030B true CN110569030B (zh) | 2023-04-07 |
Family
ID=68772645
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810575512.9A Active CN110569030B (zh) | 2018-06-06 | 2018-06-06 | 代码推荐方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110569030B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111142850B (zh) * | 2019-12-23 | 2021-05-25 | 南京航空航天大学 | 一种基于深度神经网络的代码片段推荐方法与装置 |
CN112328232A (zh) * | 2020-11-26 | 2021-02-05 | 杭州安恒信息安全技术有限公司 | 一种代码提示方法及相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN106569618A (zh) * | 2016-10-19 | 2017-04-19 | 武汉悦然心动网络科技股份有限公司 | 基于循环神经网络模型的滑动输入方法及系统 |
CN106710596A (zh) * | 2016-12-15 | 2017-05-24 | 腾讯科技(上海)有限公司 | 回答语句确定方法及装置 |
CN107506414A (zh) * | 2017-08-11 | 2017-12-22 | 武汉大学 | 一种基于长短期记忆网络的代码推荐方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006092079A1 (en) * | 2005-03-03 | 2006-09-08 | Intel Corporation | Mining for performance data for systems with dynamic compilers |
NZ589831A (en) * | 2005-06-27 | 2012-07-27 | Csc Technology Singapore Pte Ltd | Code Transformation |
US8312427B2 (en) * | 2007-05-15 | 2012-11-13 | International Business Machines Corporation | Selecting a set of candidate code expressions from a section of program code for copying |
US9785983B2 (en) * | 2012-06-13 | 2017-10-10 | Opera Solutions U.S.A., Llc | System and method for detecting billing errors using predictive modeling |
KR102190813B1 (ko) * | 2014-03-25 | 2020-12-14 | 한국전자통신연구원 | 코드 추천 및 공유 시스템 및 방법 |
US11087199B2 (en) * | 2016-11-03 | 2021-08-10 | Nec Corporation | Context-aware attention-based neural network for interactive question answering |
-
2018
- 2018-06-06 CN CN201810575512.9A patent/CN110569030B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN106569618A (zh) * | 2016-10-19 | 2017-04-19 | 武汉悦然心动网络科技股份有限公司 | 基于循环神经网络模型的滑动输入方法及系统 |
CN106710596A (zh) * | 2016-12-15 | 2017-05-24 | 腾讯科技(上海)有限公司 | 回答语句确定方法及装置 |
CN107506414A (zh) * | 2017-08-11 | 2017-12-22 | 武汉大学 | 一种基于长短期记忆网络的代码推荐方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110569030A (zh) | 2019-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4007951B1 (en) | Multi-lingual line-of-code completion system | |
US11157698B2 (en) | Method of training a descriptive text generating model, and method and apparatus for generating descriptive text | |
US11379190B2 (en) | Deep learning enhanced code completion system | |
CN112084337B (zh) | 文本分类模型的训练方法、文本分类方法及设备 | |
US20240160940A1 (en) | Transfer learning system for automated software engineering tasks | |
EP4204968B1 (en) | Unit test case generation with transformers | |
US11983513B2 (en) | Multi-lingual code generation with zero-shot inference | |
CN111079432B (zh) | 文本检测方法、装置、电子设备及存储介质 | |
US11093195B2 (en) | Method, device and computer program product for updating user interface | |
CN113254602B (zh) | 面向科技政策领域的知识图谱构建方法及系统 | |
CN113420822B (zh) | 模型训练方法和装置、文本预测方法和装置 | |
CN113065322B (zh) | 一种代码段注释生成方法、系统及可读存储介质 | |
CN110569030B (zh) | 代码推荐方法及装置 | |
CN112528654A (zh) | 自然语言处理方法、装置及电子设备 | |
CN113392929A (zh) | 一种基于词嵌入与自编码器融合的生物序列特征提取方法 | |
CN113761845A (zh) | 一种文本生成方法、装置、存储介质及电子设备 | |
US20140372106A1 (en) | Assisted Free Form Decision Definition Using Rules Vocabulary | |
CN112528674B (zh) | 文本处理方法、模型的训练方法、装置、设备及存储介质 | |
CN114490946A (zh) | 基于Xlnet模型的类案检索方法、系统及设备 | |
CN113011162A (zh) | 一种指代消解方法、装置、电子设备及介质 | |
CN116719944A (zh) | 客服文本分类方法及装置、电子设备和存储介质 | |
CN116933128A (zh) | 基于语义认知的物联网终端数据分类方法及其应用 | |
CN118410803A (zh) | 文本的敏感信息识别方法及装置 | |
CN117610569A (zh) | 运维工单质检方法、装置、设备及介质 | |
CN116975289A (zh) | 基于语义信息的文本属性级情感分类方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |