CN110502226A - 在编程环境中推荐代码的方法和装置 - Google Patents

在编程环境中推荐代码的方法和装置 Download PDF

Info

Publication number
CN110502226A
CN110502226A CN201810468804.2A CN201810468804A CN110502226A CN 110502226 A CN110502226 A CN 110502226A CN 201810468804 A CN201810468804 A CN 201810468804A CN 110502226 A CN110502226 A CN 110502226A
Authority
CN
China
Prior art keywords
chip
sequence
code
prediction result
currently entered
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.)
Granted
Application number
CN201810468804.2A
Other languages
English (en)
Other versions
CN110502226B (zh
Inventor
杨铭
钟朝亮
孙俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to CN201810468804.2A priority Critical patent/CN110502226B/zh
Publication of CN110502226A publication Critical patent/CN110502226A/zh
Application granted granted Critical
Publication of CN110502226B publication Critical patent/CN110502226B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及一种在编程环境中推荐代码码片的方法,用于基于已输入的若干码片构成的码片序列和当前输入的码片预测后续码片,包括:分别计算当前输入的码片与码片序列中的每个码片之间的相关度,基于当前输入的码片的码片类型与码片序列中的每个码片的码片类型是否相同相应地对每个相关度进行调整,其中,当类型相同时,减小相关度;基于经调整的每个相关度生成对后续码片进行预测的预测结果的第一影响因子,然后基于第一影响因子生成预测结果,最后基于预测结果确定后续码片。

Description

在编程环境中推荐代码的方法和装置
技术领域
本公开涉及信息处理装置和信息处理方法。具体地,涉及在编程环境中推荐代码码片。
背景技术
代码推荐是现代集成开发环境(IDE)中的主要功能之一。它通过减少所需的名称记忆和键盘输入量来加速软件开发。它还允许较少地参考外部文档,例如在活动范围中的许多符号(如变量、函数等)的交互式文档常常在编程时以工具提示的形式动态出现。当用户在具有一个或多个可访问成员(例如包含变量或函数)的实体名称之后立即键入其中一个字符时,代码推荐会在弹出窗口中建议匹配。用户可以通过键入一个语句完成字符(Tab或Enter)或特定于语言的标记(例如C++的分号)来接受建议,也可以继续输入名称。随着时间的推移,代码推荐会确定用户最可能想要的变量或功能。该功能还允许用户从支持面向对象编程的语言中选择许多重载函数。还可以在弹出窗口中显示功能的简短说明,具体取决于功能源代码中的文档数量。
在集成开发环境中,代码推荐可以分类为码片(token)层级的推荐和陈述(statement)层级的推荐。码片的示例可以是编程语言中使用的各种关键字、标识符、字面值等,而陈述的示例可以是编程语言中使用的语句。
码片层级的推荐可以基于编程人员已输入的字符来自动地推荐完整的码片,而陈述层级的推荐可以基于编程人员已输入的码片序列来推荐接下来可能性最高的码片。本发明涉及陈述层级的推荐,即根据事先构建的模型向编程人员推荐接下来的可能性最高的码片。
对于诸如Java等静态编程语言,得益于标识符类型注释,传统的代码推荐方法能够很好地工作。然而,对于近年来广泛使用的诸如Python、JavaScript等动态编程语言,由于不存在标识符类型注释,因而传统的代码推荐方法不能提供与静态编程语言等同的支持。
因此,本发明旨在提供一种用于为动态编程语言提供良好的代码推荐功能的代码推荐技术。
应该注意,上面对技术背景的介绍只是为了方便对本申请的技术方案进行清楚、完整的说明,并方便本领域技术人员的理解而阐述的。不能仅仅因为这些方案在本申请的背景技术部分进行了阐述而认为上述技术方案为本领域技术人员所公知。
发明内容
在下文中将给出关于本公开的简要概述,以便提供关于本公开的某些方面的基本理解。应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图确定本公开的关键或重要部分,也不是意图限定本公开的范围。其目的仅仅是以简化的形式给出某些概念,以此作为稍后论述的更详细描述的前序。
本公开的目的在于提供一种信息处理技术,可应用于在动态编程语言的编程环境中推荐代码。通过根据本公开的信息处理技术实现的代码推荐方法,较之传统的代码推荐方法,不仅能够适用于静态编程语言还能够适用于动态编程语言,并且即使在动态编程语言环境下,也能够提供准确或接近准确的推荐结果,提升了开发效率。
为了实现本公开的目的,根据本公开的一个方面,提供了在编程环境中推荐代码码片的方法,用于基于已输入的若干码片构成的码片序列和当前输入的码片预测后续码片,包括:分别计算当前输入的码片与码片序列中的每个码片之间的相关度;基于当前输入的码片的码片类型与码片序列中的每个码片的码片类型是否相同相应地对每个相关度进行调整,其中,当类型相同时,减小相关度;基于经调整的每个相关度生成对后续码片进行预测的预测结果的第一影响因子;基于第一影响因子生成预测结果;基于预测结果确定所述后续码片。
根据本公开的另一方面,还提供了一种在编程环境中推荐代码码片的装置,包括:至少一个处理器,被配置成执行推荐代码码片的方法。
根据本公开的另一方面,还提供了一种存储有计算机可读的程序指令的计算机可读介质,当所述程序指令由计算机执行时,用于实现推荐代码码片的方法。
通过根据本公开的信息处理技术实现的用于在编程环境中推荐代码码片的方法,不仅能够适用于静态编程语言还能够适用于动态编程语言,并且即使在动态编程语言环境下,也能够提供准确或接近准确的推荐结果,提升了开发效率。
附图说明
参照下面结合附图对本公开实施方式的说明,会更加容易地理解本公开的以上和其它目的、特点和优点,在附图中:
图1是示出集成开发环境中的代码推荐的示意图;
图2是示出代码推荐模型的训练过程的示意性流程图;
图3是示出根据本公开第一实施方式的代码码片推荐方法的流程图;
图4是示出根据本公开第一实施方式的代码码片推荐方法的示意性框图;
图5是示出作为递归神经网络的LTSM的示意图;
图6是示出根据本公开的另一实施方式的代码码片推荐方法的示意性框图;
图7是示出根据本公开的另一实施方式的代码码片推荐方法的示意性框图;
图8是示出根据本公开的另一实施方式的代码码片推荐方法的示意性框图;
图9是示出可用来实现根据本公开的实施方式的代码码片推荐方法和代码码片的装置的通用机器的结构简图。
具体实施方式
在下文中将结合附图对本公开的示例性实施方式进行描述。为了清楚和简明起见,在说明书中并未描述实际实施方式的所有特征。然而,应该了解,在开发任何这种实际实施方式的过程中可以做出很多特定于实施方式的决定,以便实现开发人员的具体目标,并且这些决定可能会随着实施方式的不同而有所改变。
在此,还需要说明的一点是,为了避免因不必要的细节而模糊了本公开,在附图中仅仅示出了与根据本公开的方案密切相关的部件,而省略了与本公开关系不大的其他细节。
通常,代码推荐可以通过如下方式实现:从编程语言的源代码库学习语言模型,根据所学习的语言模型针对输入的代码来预测接下来的可能性最高的代码并推荐给编程人员。事实上,编程语言中的所有代码可以被视为构成向量空间,由作为元素的代码组合而成的代码片段,即元素序列,可以被视为向量空间中的向量序列。换言之,代码推荐可以被视为对元素集合中的若干元素构成的元素序列进行处理以预测后续元素,其中元素序列中的元素之间存在逻辑关系。
例如,对于某一特定的编程语言,该编程语言中的所有代码可以由码片构成。假设编程语言的所有码片构成了向量空间,每个向量的长度即是所有码片的总数目。对于由一些码片构成的代码片段,可以将其按时间步骤拆分为向量集合,该向量集合中的向量之间存在逻辑关系,在某种程度上该逻辑关系的示例可以是编程语言的语法。通过所学习的语言模型可以预测接下来的可能性最高的向量,也就是代码片段接下来的可能性最高的码片。
为此,提供了在编程环境中推荐代码码片的方法,用于基于已输入的若干码片构成的码片序列和当前输入的码片预测后续码片,包括:分别计算当前输入的码片与码片序列中的每个码片之间的相关度;基于当前输入的码片的码片类型与码片序列中的每个码片的码片类型是否相同相应地对每个相关度进行调整,其中,当类型相同时,减小相关度;基于经调整的每个相关度生成对后续码片进行预测的预测结果的第一影响因子;基于第一影响因子生成预测结果;基于预测结果确定后续码片。
根据本公开的在编程环境中推荐代码码片的技术还通过递归神经网络生成当前输入的码片的上下文特征,作为对后续码片进行预测的预测结果的第二影响因子,以及还基于第二影响因子生成预测结果,用于提高对后续码片的预测的准确性。
根据本公开的在编程环境中推荐代码码片的技术使用基于注意力网络的自然语言模型,以便于获取码片序列中的码片之间的长距离的相互依赖关系作为第三影响因子,也用于提高对后续码片的预测的准确性。
例如,根据本公开的信息处理技术可以用于在集成开发环境中基于编程人员已输入的程序代码向编程人员推荐接下来可能性最高的代码。
图1是示出集成开发环境中的代码推荐的示意图。
如图1中所示,码片层级的推荐可以基于编程人员已输入的字符来自动地推荐完整的码片,而陈述层级的推荐可以基于编程人员已输入的码片序列来推荐接下来可能性最高的码片。例如,如图1所示,对于码片层级的推荐,当编程人员输入“Re”时,集成开发环境的推荐功能可以自动推荐字头为“Re”的码片“Reader”、“Reduce(function,sequence)”、“ReferenceEror”等作为要输入的码片的候选。再者,例如,如图1所示,对于陈述层级的推荐,当编程人员输入代码片段,即码片序列“for(int i=0;i<10;”时,集成开发环境的推荐功能可以自动推荐码片“i++)”以补全该陈述。
本文所描述的实施方式仅涉及陈述层级的推荐,即根据事先构建的模型向编程人员推荐接下来的可能性最高的码片。
图2是示出代码推荐模型的训练过程的一个示例的示意性流程图。
如图2中所示,首先可以对作为训练数据的源代码进行码片化处理以获得码片序列。随后,对码片序列进行分割以获得码片,即获得无标签的训练数据(上下文码片)以及带标签的训练数据(预测码片)。接着使用学习算法对带标签的训练数据进行训练以得到代码推荐模型,从而可用于无标签的训练数据的处理以获得标签,即接下来可能性最高的码片。
下面参照图3至图8对根据本公开的实施方式的代码推荐方法进行描述。
图3是示出根据本公开第一实施方式的代码码片推荐方法的流程图。
图4是示出根据本公开第一实施方式的代码码片推荐方法的示意性框图。
下面结合图3和图4对本发明的第一实施方式进行说明,在图3的步骤301,首先要获取已输入的若干码片构成的序列,即在图4中,该序列为X0,X1…Xt-1构成的序列,而在步骤302中输入当前的码片Xt,接下来参照表达(1)和(2)对各个码片执行词嵌入操作,Wembed1和Wembed1分别表示两种不同的词嵌入(WORD EMBEDDING)方法,这里对于词嵌入方法进行必要的说明。
e1t=Wembed1Xt (1)
e2t=Wembed2Xt (2)
由单词组成的文档可以表示为单词的序列,为了对文档中的单词进行计算(用于例如计算单词间的语义相关性等),期望将文档中每个不同的单词转化成不同的对应的向量表示。比如,通过特定的词嵌入方法,在例如“A F C B”的序列中,单词A可以被转化为对应的向量[0.21 0.34 -0.52],单词B可以被转化为对应的向量[-0.23 0.97 0.76](上述数值仅处于示意的目的)。这样,不同的单词就可以被转换到相同维度的多维空间坐标系,进而例如在该多维空间坐标系下通过例如余弦相似度度量计算单词间的相似度。
在下面的表达(3)和(4)中
IMt=[e10,...,e1t-1] (3)
OMt=[e20,...,e2t-1] (4)
针对在当前输入的码片之前已输入的若干码片构成的码片序列中的各个码片,分别使用不同的词嵌入方法进行Wembed1嵌入和Wembed1嵌入,例如对于第t-1个码片,分别通过Wembed1嵌入和Wembed1嵌入得到e1t-1和e2t-1,这些经嵌入处理的码片按照上面的表达(3)和(4)分别组成了新的序列IMt和OMt,其中,这两个序列均包括t个元素,在图3中,IMt和OMt分别对应于输入存储器序列和输出存储器序列。
接下来,在步骤303中,计算当前输入的码片与码片序列中的每个码片之间的相关度。具体方式为例如图4中示出的将经嵌入处理的当前输入的码片与IMt中的各个元素分别例如通过内积运算计算当前输入的码片与码片序列中的每个码片之间的相关度,从而得到t个相关度(例如实数)组成的序列ow1t
ow1t=e1t·IMt (5)
然后,在步骤304中基于当前输入码片的码片类型和码片序列中各个码片的码片类型对相应地对各个相关度进行调整,具体地,根据当前输入码片的码片类型(例如函数、类、结构体、变量、数组等)与码片序列中的每个码片的码片类型是否相同相应地对每个相关度进行调整,需要注意的是,下面的表达仅是一种示例性的调整方式,并发明并不限于该调整方式。
即,当前输入码片的码片类型与码片序列中的每个码片的码片类型相同时,减小相关度,在本示例性实施方式中,将相关度值调整为-1000。当前输入码片的码片类型与码片序列中的每个码片的码片类型不同时,维持相关度值不变。
然后,在步骤305中,基于调整后的相关度计算对后续码片进行预测的预测结果的第一影响因子mft
图4示出了一种特定的计算第一影响因子的方式,即对调整后的相关度序列进行归一化处理,例如使用Softmax函数。
ncow1t=softmax(cow1t) (7)
然后,按照下面的表达(8),计算出第一影响因子mft,并在步骤306基于该影响因子mft计算出最终的码片预测的概率分布,进而选择概率最大的码片作为预测出的推荐码片,并呈现给用户。
随后,将经词嵌入处理的当前输入的码片e1t和e2t分别添加到IMt和OMt中生成IMt+1和OMt+1,以用于后续码片的预测。
IMt+1·append(e1t) (9)
OMt+1·append(e2t) (10)
在对不同于上述实施方式的实施方式进行说明之前,首先对于递归神经网络RNN(Recurrent Neuron Network)以及递归神经网络中的长短期记忆网络LTSM,以帮助对下述实施方式的理解。
递归神经网络RNN是一种对序列数据建模的神经网络。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,预测句子的下一个单词一般需要使用前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为递归神经网络,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再是无连接的而是相互连接的,隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
所有RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个简单的结构,例如一个tanh层。LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于单一神经网络层,而是以一种特定的方式进行交互。下面以LTSM为例,对本实施方式进行说明。
LSTM神经网络是一种时间递归神经网络(RNN),其适用于处理和预测时间序列中间隔和延迟非常长的重要事件。鉴于LSTM神经网络对于本领域技术人员是公知,本文仅对其在本公开的实施方式中的应用进行描述,而不对其原理进行更详细的描述。图5是LTSM的示意性框图。
在另一实施方式中,通过LSTM神经网络接收由码片构成的序列输入(e20,e21,…,e2t-1)并且输出中间状态(h0,h1,…,ht-1),通过输入的e2t以及已经计算得出的ht-1再借助下面的公式(11)-(16)计算得到当前输入的码片的上下文特征,作为对后续码片进行预测的预测结果的第二影响因子ht
ft=σ(Wf·[ht-1,e2t]+bf) (11)
it=σ(Wi·[ht-1,e2t]+bi) (12)
ot=σ(Wo·[ht-1,e2t]+bo) (15)
ht=ot*tanh(Ct) (16)
其中tanh表示取tanh函数,而softmax表示取softmax函数。
参照图5和图6,在公式(11)中,LSTM中的第一步是决定从细胞状态中丢弃什么信息。这个决定通过忘记门完成。该门会读取ht-1和e2t,输出一个在0到1之间的数值给每个在细胞状态Ct-1中的数字。1表示“完全保留”,0表示“完全舍弃”。
在公式(12)中,确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,输入门决定将要更新什么值。然后,在公式(13)中,由tanh层创建新的候选值向量
在公式(14)中,将旧的细胞状态状态Ct-1与ft相乘,丢弃掉需要丢弃的信息。接着加上it的乘积,从而得到新的细胞状态。
然后,在公式(15)中,通过一个sigmoid门来确定细胞状态的哪部分将被输出。接着,细胞状态通过tanh函数进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,得到ht。其中tanh函数是为了特征能够逐层抽象,而sigmoid门用于进行门限约束从而进行选通滤波。
因此,参照图6,基于上述的第一影响因子mft以及当前计算得出的ht计算出最终的码片预测的概率分布,进而选择概率最大的码片作为预测出的推荐码片,并呈现给用户,其中在该实施方式中的各个参数均是可以通过训练进行调整的参数,本领域技术人员基于神经网络领域的技术常识能够明确上述公式中各个参数及符号所代表的具体含义,因此,在此无需对上述参数和符号进行更详细的描述。
在上面的实施方式中所生成的第二影响因子ht基础上,通过对ht进行进一步处理,可以生成影响预测结果的第三影响因子。另一种实施方式是通过注意力网络(AttentionNetwork)模型来实现处理。
在一个具体示例中,通过下述处理来应用注意力网络模型。
Ht=[ht-N,...,ht-1] (17)
ncαt=softmax(cαt) (21)
其中是可以通过训练进行调整的参数,并且1N表示元素均为1的N维向量。tanh表示取tanh函数,而softmax表示取softmax函数。
优选地,可以使用例如公式(17)的时间窗,将注意力限定在该时间窗内的所有码片上,即,针对在时间上距离当前输入码片的时间最近的N个码片应用注意力模型,这种采用时间窗的方式可以进一步提高预测准确度。
根据上述公式(17)-(22),生成当前输入的码片关于码片序列中的子序列的每个码片的注意力权重αt[i],以及基于当前输入的码片的码片类型与码片序列的子序列的每个码片的码片类型是否相同相应地对每个注意力权重进行调整,其中,当类型相同时,减小注意力权重,在本示例性实施方式中,将注意力权重值减小至-1000。当前输入码片的码片类型与码片序列中的子序列每个码片的码片类型不同时,维持注意力权重不变。这里的子序列的含义为码片序列的后向截断序列,正如表达(17)示出的那样。然后,对调整后的注意力权重序列使用Softmax函数进行运算处理。
接下来,按照公式(22),计算出对后续码片进行预测的预测结果的第三影响因子aft,并基于上述的第一影响因子以及该第三影响因子aft计算出最终的码片预测的概率分布,进而选择概率最大的码片作为预测出的推荐码片,并呈现给用户,其中权重W和偏置b是可以通过不断的迭代学习得到的参数。
同时,为了对后续输入进行预测,还需要将固定长度的时间窗更新到最新状态,也就是按照下面的表达(23)和(24)那样,将在时间上距离当前输入码片最远的码片移除,并将当前码片增加到时间窗中,这样,时间窗的大小仍为包括N个码片,该实施方式如图7所示
Ht.remove(ht-N) (23)
Ht.append(ht) (24)
在另一实施方式中,也可以考虑码片序列中所有的已输入码片来应用注意力模型。与上面的实施方式有相似之处,但区别在于,不对已输入的所有码片应用时间窗。即,生成当前输入的码片关于码片序列中的每个码片的注意力权重,以及基于当前输入的码片的码片类型与码片序列的每个码片的码片类型是否相同相应地对每个注意力权重进行调整,其中,当类型相同时,减小注意力权重,同样地,在本示例性实施方式中,将注意力权重减小至-1000。当前输入码片的码片类型与码片序列中的每个码片的码片类型不同时,维持注意力权重不变。然后,对调整后的注意力权重序列使用Softmax函数进行运算处理。然后,计算出对后续码片进行预测的预测结果的第三影响因子aft
在另一实施方式中,结合图8所示,按照上面实施方式中的计算方式计算得到的第一影响因子、第二影响因子和第三影响因子按照公式(25)计算出最终的码片预测的概率分布,进而选择概率最大的码片作为预测出的推荐码片,并呈现给用户,其中权重W和偏置b是可以通过不断的迭代学习得到的参数。
yt=softmax(W·[mft,ht,αft]+b) (25)
在上述各种实施方式,递归神经网络可以是长短期记忆网络LSTM、GRU神经网络或LSTM的变体等。
在上述各种实施方式,通过编程环境中的已有代码的训练得到递归神经网络和递归神经网络中的各个参数值以及根据输入的结果和/或预测的结果更新递归神经网络中的各个参数值。
在上述各种实施方式中,W·*+b的含义为进行线性变换运算,其表示对特征进行平移或缩放等操作。
尽管上文结合集成开发环境中的代码推荐描述了本公开的实施方式,但是对于本领域技术人员明显的是,本公开的实施方式同样可以应用于根据已有元素序列预测接下来可能性最高的元素的其他的应用,例如自然语言处理、语音处理等。
图9是示出可用来实现根据本公开的实施方式的信息处理装置和信息处理方法的通用机器900的结构简图。通用机器900可以是例如计算机系统。应注意,通用机器900只是一个示例,并非暗示对本公开的方法和装置的使用范围或者功能的局限。也不应将通用机器900解释为对上述信息处理方法和信息处理装置中示出的任一组件或其组合具有依赖或需求。
在图9中,中央处理单元(CPU)901根据只读存储器(ROM)902中存储的程序或从存储部分908加载到随机存取存储器(RAM)903的程序执行各种处理。在RAM 903中,还根据需要存储当CPU 901执行各种处理等等时所需的数据。CPU 901、ROM 902和RAM 903经由总线904彼此连接。输入/输出接口905也连接到总线904。
下述部件也连接到输入/输出接口905:输入部分906(包括键盘、鼠标等等)、输出部分907(包括显示器,例如阴极射线管(CRT)、液晶显示器(LCD)等,和扬声器等)、存储部分908(包括硬盘等)、通信部分909(包括网络接口卡例如LAN卡、调制解调器等)。通信部分909经由网络例如因特网执行通信处理。根据需要,驱动器910也可连接到输入/输出接口905。可拆卸介质911例如磁盘、光盘、磁光盘、半导体存储器等等可以根据需要被安装在驱动器910上,使得从中读出的计算机程序可根据需要被安装到存储部分908中。
在通过软件实现上述系列处理的情况下,可以从网络例如因特网或从存储介质例如可拆卸介质911安装构成软件的程序。
本领域的技术人员应当理解,这种存储介质不局限于图9所示的其中存储有程序、与设备相分离地分发以向用户提供程序的可拆卸介质911。可拆卸介质911的例子包含磁盘(包含软盘)、光盘(包含光盘只读存储器(CD-ROM)和数字通用盘(DVD))、磁光盘(包含迷你盘(MD)(注册商标))和半导体存储器。或者,存储介质可以是ROM 902、存储部分908中包含的硬盘等等,其中存有程序,并且与包含它们的设备一起被分发给用户。
此外,本公开还提出了一种存储有计算机可读的程序指令的计算机程序产品。所述指令代码由计算机读取并执行时,可执行上述根据本公开的信息处理方法。相应地,用于承载这种程序指令的上面列举的各种存储介质也包括在本公开的范围内。
上面已通过框图、流程图和/或实施方式进行了详细描述,阐明了根据本公开的实施方式的装置和/或方法的具体实施方式。当这些框图、流程图和/或实施方式包含一个或多个功能和/或操作时,本领域的技术人员明白,这些框图、流程图和/或实施方式中的各功能和/或操作可以通过各种硬件、软件、固件或实质上它们的任意组合而单独地和/或共同地实施。在一种实施方式中,本说明书中描述的主题的几个部分可通过特定用途集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其他集成形式实现。然而,本领域的技术人员会认识到,本说明书中描述的实施方式的一些方面能够全部或部分地在集成电路中以在一个或多个计算机上运行的一个或多个计算机程序的形式(例如,以在一个或多个计算机系统上运行的一个或多个计算机程序的形式)、以在一个或多个处理器上运行的一个或多个程序的形式(例如,以在一个或多个微处理器上运行的一个或多个程序的形式)、以固件的形式、或以实质上它们的任意组合的形式等效地实施,并且,根据本说明书中公开的内容,设计用于本公开的电路和/或编写用于本公开的软件和/或固件的代码完全是在本领域技术人员的能力范围之内。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。涉及序数的术语“第一”,“第二”等并不表示这些术语所限定的特征、要素、步骤或组件的实施顺序或者重要性程度,而仅仅是为了描述清楚起见而用于在这些特征、要素、步骤或组件之间进行标识。
综上,在根据本公开的实施方式中,本公开提供了如下方案,但不限于此:
方案1.一种在编程环境中推荐代码码片的方法,用于基于已输入的若干码片构成的码片序列和当前输入的码片预测后续码片,包括:
分别计算当前输入的码片与所述码片序列中的每个码片之间的相关度;
基于所述当前输入的码片的码片类型与所述码片序列中的每个码片的码片类型是否相同相应地对每个所述相关度进行调整,其中,当类型相同时,减小所述相关度;
基于经调整的每个所述相关度生成对后续码片进行预测的预测结果的第一影响因子;
基于所述第一影响因子生成所述预测结果;
基于所述预测结果确定所述后续码片。
方案2.根据方案1所述的方法,其中,通过递归神经网络生成所述当前输入的码片的上下文特征,作为对后续码片进行预测的预测结果的第二影响因子,以及还基于所述第二影响因子生成所述预测结果。
方案3.根据方案2所述的方法,其中,所述递归神经网络为长短期记忆网络LSTM、GRU神经网络或LSTM的变体。
方案4.根据方案1-3之一所述的方法,其中,通过递归神经网络生成所述码片序列的每个码片的上下文特征,通过注意力网络生成所述当前输入的码片关于所述码片序列中的每个码片的注意力权重,以及基于所述当前输入的码片的码片类型与所述码片序列的每个码片的码片类型是否相同相应地对每个所述注意力权重进行调整,其中,当类型相同时,减小所述注意力权重,基于经调整的每个注意力权重和所述码片序列中的每个码片的上下文特征生成所述预测结果的第三影响因子,以及还基于所述第三影响因子生成所述预测结果。
方案5.根据方案1-3之一所述的方法,其中,通过递归神经网络生成所述码片序列的子序列中的每个码片的上下文特征,通过注意力网络生成所述当前输入的码片关于所述子序列中的每个码片的注意力权重,以及基于所述当前输入的码片的码片类型与所述子序列中的每个码片的码片类型是否相同相应地对每个所述注意力权重进行调整,其中,当类型相同时,减小所述注意力权重,基于经调整的每个注意力权重和所述子序列中的每个码片的上下文特征生成所述预测结果的第三影响因子,以及还基于所述第三影响因子生成所述预测结果,其中所述子序列为所述码片序列的后向截断序列。
方案6.根据方案2或3所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述递归神经网络。
方案7.根据方案4所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述注意力网络。
方案8.根据方案5所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述注意力网络。
方案9.根据方案1所述的方法,其中基于经调整的每个所述相关度生成对后续码片进行预测的预测结果的第一影响因子包括:对经调整的每个所述相关度进行归一化处理。
方案10.根据方案9所述的方法,所述归一化处理为softmax函数。
方案11.根据方案1所述的方法,其中所述减小所述相关度为将所述相关度减小到-1000。
方案12.根据方案1所述的方法,所述码片类型包括但不限于函数、类、结构体、变量或数组。
方案13.根据方案1所述的方法,其中,所述分别计算当前输入的码片与所述码片序列中的每个码片之间的相关度是基于码片经词嵌入方法得到的向量实现的。
方案14.一种在编程环境中推荐代码码片的装置,包括:
至少一个处理器,被配置成执行如方案1至13中任一项所述的方法。
方案15.一种存储有计算机可读的程序指令的计算机可读介质,当所述程序指令由计算机执行时,用于实现根据方案1-13中任一项所述的方法。
尽管上面已经通过对本公开的具体实施方式的描述对本公开进行了披露,但是,应该理解,本领域的技术人员可在所附权利要求的精神和范围内设计对本公开的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本公开的保护范围内。

Claims (10)

1.一种在编程环境中推荐代码码片的方法,用于基于已输入的若干码片构成的码片序列和当前输入的码片预测后续码片,包括:
分别计算当前输入的码片与所述码片序列中的每个码片之间的相关度;
基于所述当前输入的码片的码片类型与所述码片序列中的每个码片的码片类型是否相同相应地对每个所述相关度进行调整,其中,当类型相同时,减小所述相关度;
基于经调整的每个所述相关度生成对后续码片进行预测的预测结果的第一影响因子;
基于所述第一影响因子生成所述预测结果;
基于所述预测结果确定所述后续码片。
2.根据权利要求1所述的方法,其中,通过递归神经网络生成所述当前输入的码片的上下文特征,作为对后续码片进行预测的预测结果的第二影响因子,以及还基于所述第二影响因子生成所述预测结果。
3.根据权利要求2所述的方法,其中,所述递归神经网络为长短期记忆网络LSTM、GRU神经网络或LSTM的变体。
4.根据权利要求1-3之一所述的方法,其中,通过递归神经网络生成所述码片序列的每个码片的上下文特征,通过注意力网络生成所述当前输入的码片关于所述码片序列中的每个码片的注意力权重,以及基于所述当前输入的码片的码片类型与所述码片序列的每个码片的码片类型是否相同相应地对每个所述注意力权重进行调整,其中,当类型相同时,减小所述注意力权重,基于经调整的每个注意力权重和所述码片序列中的每个码片的上下文特征生成所述预测结果的第三影响因子,以及还基于所述第三影响因子生成所述预测结果。
5.根据权利要求1-3之一所述的方法,其中,通过递归神经网络生成所述码片序列的子序列中的每个码片的上下文特征,通过注意力网络生成所述当前输入的码片关于所述子序列中的每个码片的注意力权重,以及基于所述当前输入的码片的码片类型与所述子序列中的每个码片的码片类型是否相同相应地对每个所述注意力权重进行调整,其中,当类型相同时,减小所述注意力权重,基于经调整的每个注意力权重和所述子序列中的每个码片的上下文特征生成所述预测结果的第三影响因子,以及还基于所述第三影响因子生成所述预测结果,其中所述子序列为所述码片序列的后向截断序列。
6.根据权利要求2或3所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述递归神经网络。
7.根据权利要求4所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述注意力网络。
8.根据权利要求5所述的方法,其中,通过所述编程环境中的已有代码的训练得到所述注意力网络。
9.一种在编程环境中推荐代码码片的装置,包括:
至少一个处理器,被配置成执行如权利要求1-8中任一项所述的方法。
10.一种存储有计算机可读的程序指令的计算机可读介质,当所述程序指令由计算机执行时,用于实现根据权利要求1-8中任一项所述的方法。
CN201810468804.2A 2018-05-16 2018-05-16 在编程环境中推荐代码的方法和装置 Active CN110502226B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810468804.2A CN110502226B (zh) 2018-05-16 2018-05-16 在编程环境中推荐代码的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810468804.2A CN110502226B (zh) 2018-05-16 2018-05-16 在编程环境中推荐代码的方法和装置

Publications (2)

Publication Number Publication Date
CN110502226A true CN110502226A (zh) 2019-11-26
CN110502226B CN110502226B (zh) 2023-06-09

Family

ID=68583701

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810468804.2A Active CN110502226B (zh) 2018-05-16 2018-05-16 在编程环境中推荐代码的方法和装置

Country Status (1)

Country Link
CN (1) CN110502226B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090064091A1 (en) * 2005-06-27 2009-03-05 Albert Donald Tonkin Code transformation
US20090178032A1 (en) * 2005-03-03 2009-07-09 Rongzhen Yang Mining for performance data for systems with dynamic compilers
US20130227533A1 (en) * 2008-11-06 2013-08-29 Albert Donald Tonkin Code transformation
US20130339202A1 (en) * 2012-06-13 2013-12-19 Opera Solutions, Llc System and Method for Detecting Billing Errors Using Predictive Modeling
US20150277860A1 (en) * 2014-03-25 2015-10-01 Electronics And Telecommunications Research Institute System and method for code recommendation and share
US20150378692A1 (en) * 2014-06-30 2015-12-31 Microsoft Corporation Code recommendation
CN106569618A (zh) * 2016-10-19 2017-04-19 武汉悦然心动网络科技股份有限公司 基于循环神经网络模型的滑动输入方法及系统
CN106710596A (zh) * 2016-12-15 2017-05-24 腾讯科技(上海)有限公司 回答语句确定方法及装置
CN107506414A (zh) * 2017-08-11 2017-12-22 武汉大学 一种基于长短期记忆网络的代码推荐方法
US20180121785A1 (en) * 2016-11-03 2018-05-03 Nec Laboratories America, Inc. Context-aware attention-based neural network for interactive question answering

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090178032A1 (en) * 2005-03-03 2009-07-09 Rongzhen Yang Mining for performance data for systems with dynamic compilers
US20090064091A1 (en) * 2005-06-27 2009-03-05 Albert Donald Tonkin Code transformation
US20130227533A1 (en) * 2008-11-06 2013-08-29 Albert Donald Tonkin Code transformation
US20130339202A1 (en) * 2012-06-13 2013-12-19 Opera Solutions, Llc System and Method for Detecting Billing Errors Using Predictive Modeling
US20150277860A1 (en) * 2014-03-25 2015-10-01 Electronics And Telecommunications Research Institute System and method for code recommendation and share
US20150378692A1 (en) * 2014-06-30 2015-12-31 Microsoft Corporation Code recommendation
CN106462399A (zh) * 2014-06-30 2017-02-22 微软技术许可有限责任公司 代码推荐
CN106569618A (zh) * 2016-10-19 2017-04-19 武汉悦然心动网络科技股份有限公司 基于循环神经网络模型的滑动输入方法及系统
US20180121785A1 (en) * 2016-11-03 2018-05-03 Nec Laboratories America, Inc. Context-aware attention-based neural network for interactive question answering
CN106710596A (zh) * 2016-12-15 2017-05-24 腾讯科技(上海)有限公司 回答语句确定方法及装置
CN107506414A (zh) * 2017-08-11 2017-12-22 武汉大学 一种基于长短期记忆网络的代码推荐方法

Also Published As

Publication number Publication date
CN110502226B (zh) 2023-06-09

Similar Documents

Publication Publication Date Title
CN108628823B (zh) 结合注意力机制和多任务协同训练的命名实体识别方法
CN111368996B (zh) 可传递自然语言表示的重新训练投影网络
US11604956B2 (en) Sequence-to-sequence prediction using a neural network model
Luan et al. Scientific information extraction with semi-supervised neural tagging
CN110532353B (zh) 基于深度学习的文本实体匹配方法、系统、装置
US10678769B2 (en) Artificial intelligence system and method for auto-naming customer tree nodes in a data structure
WO2017007740A1 (en) Learning word embedding using morphological and contextual knowledge
CN113076739A (zh) 一种实现跨领域的中文文本纠错方法和系统
CN108664512B (zh) 文本对象分类方法及装置
JP6291443B2 (ja) 接続関係推定装置、方法、及びプログラム
CN113641819B (zh) 基于多任务稀疏共享学习的论辩挖掘系统及方法
CN111859967B (zh) 实体识别方法、装置,电子设备
JP2022145623A (ja) ヒント情報を提示する方法及び装置並びにコンピュータプログラム
Silaparasetty Deep Learning Projects Using TensorFlow 2
CN113822054A (zh) 基于数据增强的中文语法纠错方法及装置
Wakchaure et al. A scheme of answer selection in community question answering using machine learning techniques
CN112131363B (zh) 自动问答方法、装置、设备及存储介质
Liu et al. Exploring segment representations for neural semi-Markov conditional random fields
CN110502226A (zh) 在编程环境中推荐代码的方法和装置
CN107729509A (zh) 基于隐性高维分布式特征表示的篇章相似度判定方法
CN111310459B (zh) 机器学习组件的训练方法及装置、中文分词方法及装置
CN113361277A (zh) 基于注意力机制的医学命名实体识别建模方法
CN112329440A (zh) 一种基于两阶段筛选和分类的关系抽取方法和装置
CN112347784A (zh) 一种结合多任务学习的跨文档实体识别方法
Patel et al. To laugh or not to laugh–LSTM based humor detection approach

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