CN112527273A - 一种代码补全方法、装置以及相关设备 - Google Patents

一种代码补全方法、装置以及相关设备 Download PDF

Info

Publication number
CN112527273A
CN112527273A CN202011507517.1A CN202011507517A CN112527273A CN 112527273 A CN112527273 A CN 112527273A CN 202011507517 A CN202011507517 A CN 202011507517A CN 112527273 A CN112527273 A CN 112527273A
Authority
CN
China
Prior art keywords
model parameters
local
local model
code
model
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.)
Pending
Application number
CN202011507517.1A
Other languages
English (en)
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.)
Ping An Technology Shenzhen Co Ltd
Original Assignee
Ping An Technology Shenzhen Co 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 Ping An Technology Shenzhen Co Ltd filed Critical Ping An Technology Shenzhen Co Ltd
Priority to CN202011507517.1A priority Critical patent/CN112527273A/zh
Publication of CN112527273A publication Critical patent/CN112527273A/zh
Priority to PCT/CN2021/083488 priority patent/WO2022126909A1/zh
Pending legal-status Critical Current

Links

Images

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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Telephonic Communication Services (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供一种代码补全方法,包括:获取本地数据集和聚合服务器发送的初始模型参数;根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到训练好的代码补全模型;获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。本申请实施例有效地解决了以往代码补全过程中数据集采用的是公开的数据集,缺乏数据隐私保护问题,并且可以提供个性化的代码补全服务,加快软件开发的进程。

Description

一种代码补全方法、装置以及相关设备
技术领域
本申请涉及计算机技术领域,具体涉及一种代码补全方法、装置以及相关设备。
背景技术
随着计算机网络技术的日益普及,代码补全是集成开发环境(IntegratedDevelopment Environments,IDEs)最重要的功能之一,代码补全可以减少程序员的工作量,加快软件开发的进程。
目前,代码补全方法主要是首先从开源代码库(例如github上的开源项目)或者开源社区获得大量的数据作为深度学习的语料库,利用代码解析器对源代码进行处理,例如将源代码转化为Token序列或者转化为抽象语法树,然后选择或设计一个合适的深度神经网络对语料库中的数据进行训练。在这个过程中,数据集采用的是公开的数据集,通常缺乏数据隐私保护,而且无法根据IDEs用户的编程习惯提供个性化的代码补全服务。
发明内容
本申请提供了一种代码补全方法、装置以及相关设备,能够有效地解决以往代码补全过程中数据集采用的是公开的数据集,缺乏数据隐私保护而且无法提供个性化的代码补全服务的问题。
第一方面,本申请提供一种代码补全方法,应用于第一参与方,第一参与方是包括聚合服务器和多个参与方的系统中的任意一个参与方,包括:获取本地数据集和聚合服务器发送的初始模型参数,其中,本地数据集包括多个源代码;根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到训练好的代码补全模型;获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
第二方面,本申请实施例提供了一种代码补全装置,包括:获取单元,用于获取本地数据集和聚合服务器发送的初始模型参数,其中,本地数据集包括多个源代码;局部训练单元,用于根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;发送单元,用于将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;更新单元,用于获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型得到训练好的代码补全模型;处理单元,用于获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
第三方面,本申请实施例提供一种代码补全设备,包括:处理器和存储器,处理器执行存储器中的代码执行如第一方面或第一方面任意一种实现方式提供的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,包括指令,当指令在计算机上运行时,使得计算机执行如第一方面或第一方面任意一种实现方式提供的方法。
本申请实施例通过采用联邦学习的架构,可以在保证各个参与方的代码不公开情况下,一起训练一个高效的代码补全模型,模型可以根据每个参与方用户的编码习惯,提供更加个性化的代码补全服务,满足开发编程过程中的各种需求,进一步加快软件开发的过程。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请实施例提供的一种联邦学习的系统;
图2是本申请实施例提供的一种的代码补全方法流程图;
图3是本申请实施例提供的一种代码补全示意图;
图4是本申请实施例提供的一种局部模型的代码补全方法流程图;
图5是本申请实施例提供的一种局部模型框架示意图;
图6是本申请实施例提供的一种代码补全装置的结构示意图;
图7是本申请实施例提供的一种电子设备结构框图。
具体实施方式
本申请的实施例部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如图1所示,图1是一种联邦学习的系统架构示意图。图1示出的系统包括聚合服务器和多个参与方。其中,每个参与方都拥有自己的本地数据集和局部模型,每个参与方拥有的局部模型相同,每个参与方的本地数据集可以有部分相同或者全部不同。
本申请实施例中,上述每个参与方首先根据本地数据集和聚合服务器发送的参数训练局部模型,得到局部模型参数,然后将局部模型参数发送给聚合服务器。聚合服务器对上述多个参与方的局部模型参数进行聚合得到全局模型参数,并将全局模型参数发送给每个参与方。每个参与方收到全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到新的局部模型,再将新的局部模型参数发给聚合服务器进行聚合,聚合服务器对多个参与方发送的新的局部模型参数进行聚合,得到新的全局模型参数,并将新的全局模型参数发送给每个参与方。当聚合服务器与每个参与方交互的次数未达到预设次数时,重复上述聚合服务器与每个参与方交互的步骤,当聚合服务器与每个参与方交互的次数达到预设次数时,则停止训练,得到训练好的代码补全模型。
参见图2,图2是本申请实施例提供的一种代码补全方法的流程图,该方法包括:
S101、获取本地数据集和聚合服务器发送的初始模型参数。
具体地,聚合服务器随机生成初始模型参数W,然后将初始模型参数W发送给n个参与方。其中,每个参与方拥有局部模型Mi,n个参与方分别拥有模型M1,M2,…,Mn,每个模型Mi有m个模型参数,第i个模型有参数
Figure BDA0002845352210000031
初始模型参数W的个数与每个局部模型中参数的个数一致,即包括m个参数。每个参与方拥有一个本地数据集,n个参与方分别有数据集D1,D2,…,Dn,不同参与方的数据集可以部分相同或者全部不同,其中,本地数据集包括源代码,例如,多个参与方是一个公司的不同部门,每个部门都有自己部门的业务对应的源代码,那么每个参与方数据集可以有部分的相同或者全部不同。
示例性地,若有4个参与方,4个参与方分别拥有M1,M2,M3,M4和本地数据集D1,D2,D3,D4,若每个模型有3个模型参数,那么第1个模型(即第1个参与方)M1有参数
Figure BDA0002845352210000032
和数据集D1;同样,第2个模型(即第2个参与方)M2有参数
Figure BDA0002845352210000033
和数据集D2;第3个模型(即第3个参与方)M3有参数
Figure BDA0002845352210000041
和数据集D3;第4个模型(即第4个参与方)M4有参数
Figure BDA0002845352210000042
和数据集D4,初始模型参数W包括3个参数。
S102、根据初始模型参数和本地数据集训练局部模型,得到局部模型参数。
具体地,对于第i个参与方,使用本地数据集Di训练自己的局部模型Mi,在满足收敛条件时,得到局部模型参数Wi。其中,收敛条件为迭代次数等于预设迭代次数或损失函数值小于预设值。
S103、将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数。
具体地,每个参与方将基于局部模型Mi训练收敛后得到的参数Wi进行同态加密得到[Wi],然后把[Wi]发送给聚合服务器。其中,聚合服务器根据每个参与方发送的局部模型参数进行聚合,得到全局模型参数,具体实现过程为:对于每个局部模型的第j个参数
Figure BDA0002845352210000043
聚合服务器对其求平均可以得到全局模型参数
Figure BDA0002845352210000044
Figure BDA0002845352210000045
可以理解的是,对于每个局部模型有m个参数,经过聚合服务器聚合可以得到m个全局模型参数
Figure BDA0002845352210000046
然后聚合服务器将全局模型参数
Figure BDA0002845352210000047
发送给每个参与方。
其中,同态加密是基于数学难题的计算复杂性理论的密码学技术。对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。
本申请实施例中,通过基于同态加密方式,可以有效地保护每个参与方的参数不公开,保护每个参与方数据的隐私,同时,聚合服务器不用解密,减少计算量。
S104、获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到训练好的代码补全模型。
具体地,每个参与方收到聚合服务器发送的全局模型参数
Figure BDA0002845352210000048
后,对全局模型参数
Figure BDA0002845352210000049
进行解密得到解密的全局参数
Figure BDA00028453522100000410
Figure BDA00028453522100000411
每个参与方根据各自的局部模型参数与解密后全局模型参数进行加权平均得到新的局部模型参数,其中,第i个参与方的第j个局部模型参数Wi,j更新为:
Figure BDA00028453522100000412
其中,β是一个取值范围为0到1的实数。根据各自的局部模型参数与全局模型参数更新局部模型,得到新的局部模型。当β值越大时,表明新的局部模型保留更多本地局部模型的特征,即提供更个性化的代码补全;反之,当β值越小时,表明新的局部模型保留更少本地局部模型的特征。
当聚合服务器与每个参与方交互的次数未达到预设次数时,重复上述S101-S104;当聚合服务器与每个参与方交互的次数达到预设次数时,则停止训练,得到训练好的代码补全模型。本申请实施例可以通过调节β的值,选择保留本地局部模型的特征,根据参与方的实际需求,提供更个性化、更加精准的代码补全。
S105、获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
具体地,获取用户输入的待预测的代码,代码补全模型会根据用户输入的代码进行自动提示和补全,得到目标代码。
示例性地,在代码补全的系统中,用户输入的代码可以如图3所示代码,当用户输入字符串“co”时,系统会自动提示“config”、“contributes”、“contributors”、“publishConfig”、“categories”等字符串,当检测到用户点击其中一个字符串时,例如系统检测到字符串“config”上的触控操作时,响应该操作,系统会自动补全代码。
示例性地,用户输入的代码可以是如下代码:
Figure BDA0002845352210000051
其中()表示缺失的代码,将该段代码输入代码补全模型中,输出目标代码为:
Figure BDA0002845352210000052
Figure BDA0002845352210000061
本申请实施例可以在保证各个参与方的代码不公开情况下,一起训练一个高效的代码补全模型,提供更加精准、更加个性化的代码补全服务,满足开发编程过程中的各种需求,进一步加快软件开发的过程。
如图4所示,上述对于第i个参与方,使用本地数据集Di训练自己的局部模型Mi,在满足收敛条件时,得到局部模型参数Wi的具体过程为以下步骤:
S201、获取本地数据集中的源代码,将源代码解析成抽象语法树。
具体地,每个参与方获取本地数据集Di中的源代码,并且为每一个源代码建立一颗对应于此源代码的抽象语法树(Abstract Syntax Tree,AST),用AST表示对应的源代码。
其中,抽象语法树是源代码语法结构的一种抽象表示。以树状的形式表现编程语言的语法结构,抽象语法树包括多个节点,树上的每个节点都表示源代码中的一种结构。S202、将抽象语法树作为局部模型的输入,训练局部模型,得到目标节点元素。
具体地,局部模型包括节点值预测模型和节点类型预测模型两个并联模型。其中,节点值预测模型用于对抽象语法树编码,预测目标节点的值;节点类型预测模型用于提取抽象语法树的层次结构,预测目标节点的类型。具体可参见图5,图5示出了本申请实施例的一种局部模型框架示意图。训练局部模型时两个并联的模型是并行训练,训练具体步骤为:
步骤1:对抽象语法树进行深度优先遍历,得到节点序列,同时采用Path2root保存抽象语法树的层次结构,得到Path2root层次化特征。
具体地,对抽象语法树AST进行深度优先遍历,得到节点序列。同时,采用Path2root保存抽象语法树的层次结构,得到Path2root层次化特征。其中,Path2root是一个编码器,输入是AST中当前节点到根节点的路径,然后把路径上的所有节点的类型编码成一个特征向量。
其中,深度优先遍历是是一种用于遍历或搜索树或图的算法。该算法会尽可能深的搜索树的分支。当节点的所在边都己被探寻过,搜索将回溯到发现节点的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
在本实施例中,由于深度优先遍历,步骤1中的节点序列失去了AST的层次结构,因此采用Path2root来保存AST的层次结构。
步骤2:分别编码AST,预测下一个节点的值和下一个节点的类型。
具体地,采用Transformer XL算法对节点序列进行编码,得到抽象语法树向量,即AST向量。采用循环神经网络(Recurrent Neural Network,RNN)算法对Path2root层次化特征进行编码,得到Path2root向量。
其中,Transformer XL算法是一种语言训练模型,是Transformer算法的改进。
示例性地,假设Sτ=[xτ,1,…,xτ,L]和Sτ+1=[xτ+1,1,…,xτ+1,L]是两个连续的、长度为L的代码片段。记第τ个片段Sτ的第n个隐藏层状态为
Figure BDA0002845352210000071
其中d表示隐藏层状态的维数。片段Sτ+1的第n个隐藏层状态可以按照下列公式计算:
Figure BDA0002845352210000072
Figure BDA0002845352210000073
Figure BDA0002845352210000074
其中,函数SG(·)表示停止梯度计算;
Figure BDA0002845352210000075
表示连接两个隐藏层序列;
Figure BDA0002845352210000076
表示包含前一个代码片段信息的输入;
Figure BDA0002845352210000077
表示第τ+1个代码片段第n层输出,也就是Transformer XL编码后的AST向量;w表示模型参数。
双向RNN算法具体步骤为:假设Path2root上有
Figure BDA0002845352210000078
其中
Figure BDA0002845352210000079
表示在第t个时间步,路径中第i个节点的类型。双向RNN的隐藏层状态可以按下列公式计算:
Figure BDA00028453522100000710
Figure BDA00028453522100000711
然后将
Figure BDA00028453522100000712
Figure BDA00028453522100000713
连接起来得到由双向RNN编码得到的Path2root向量表示Pt
本申请实施例通过采用Transformer XL算法解决了代码序列中的长依赖问题以及代码序列长度不一问题;同时,由于深度优先遍历,节点序列失去了AST的层次结构,采用Path2root来保存AST的层次结构,使得模型预测更加准确。其中,长依赖问题是两个关联度高的词之间距离很远。
步骤3:输出目标元素
将AST向量和Path2root向量连接预测目标节点的值,得到目标节点的值;将AST向量和Path2root向量连接预测目标节点的类型,得到目标节点的类型。
具体地,对于每个预测模型,分别将来自另一个预测模型的输出向量与该预测模型的输出向量连接起来,然后计算两个预测模型的输出:
Figure BDA00028453522100000714
然后用softmax函数来生成输出的概率分布,以选择最终代码补全的结果:
Figure BDA00028453522100000715
其中
Figure BDA00028453522100000716
都是可训练的参数。V表示词典大小,H表示AST编码结果的维数,Hp表示Path2root编码结果的维数,k取值为1、2,用来表示不同的预测模型。
S203、计算整个局部模型的损失函数值。
具体地,对于节点值预测模型,根据目标节点的值与实际节点的值确定第一损失函数值Loss1,对于节点类型预测模型,目标节点的类型与实际节点的类型确定第二损失函数值Loss2。将第一损失函数值Loss1与第二损失函数值Loss2进行加权平均,得到整个局部模型的损失函数值Loss:
Figure BDA0002845352210000081
αk的初值被设为0.5,随着模型的更新,αk的值会更新。
S204、根据损失函数值更新局部模型。
根据局部模型的损失函数值更新局部模型,采用随机梯度下降的方法对整个局部模型进行迭代,迭代次数等于预设迭代次数或损失函数值小于预设值,则停止训练局部模型Mi
本申请实施例通过将局部训练模型分成两个并联的节点值预测模型和节点类型预测模型,可以提取更多层次、更多尺度的特征,获得更准确的代码推荐服务。节点值预测模型对抽象语法树进行优先遍历,得到节点序列,采用Transformer XL算法对节点序列进行编码,得到AST向量,解决了代码序列中的长依赖问题以及代码序列长度不一问题。节点类型预测模型采用Path2root来保存AST的层次结构,得到Path2root层次化特征,采用循环神经网络(Recurrent Neural Network,RNN)算法对Path2root层次化特征进行编码,得到Path2root向量,可以很好的捕捉抽象语法树的结构信息,提供更加精确的代码预测。最后将AST向量与Path2root向量连接起来预测节点值预测模型的输出,将AST向量与Path2root向量连接起来预测节点类型预测模型的输出,可以更加精确的预测目标代码。
本申请实施例还提供了一种代码补全装置,该装置可用于实现本申请上述各代码补全方法实施例。具体地,参见图6,图6是本申请实施例提供的一种代码补全装置结构示意图。本实施例的装置600包括:
获取单元601,用于获取本地数据集和聚合服务器发送的初始模型参数,其中,本地数据集包括多个源代码;
处理单元602,用于根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;
发送单元603,用于将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;
更新单元604,用于获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型得到训练好的代码补全模型;
处理单元602,还用于获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
在本申请代码补全装置的一个具体实施例中,上述获取单元601获取本地数据集和聚合服务器发送的初始模型参数的具体操作可以参照上述S101中的相关操作,在此不再赘述;上述发送单元603将局部模型参数加密并发送给聚合服务器的具体操作可以参照上述S103中的相关操作,在此不再赘述;上述更新单元604得到训练好的代码补全模型的具体操作可以参照上述S104中的相关操作,在此不再赘述;上述处理单元602得到目标代码的具体操作可以参照上述S105中的相关操作,在此不再赘述。
在一种具体的实现方式中,上述处理单元602用于根据初始模型参数和本地数据集训练局部模型,得到局部模型参数的过程具体包括:
获取本地数据集中的源代码,将源代码解析成抽象语法树,抽象语法树包括多个节点;
将抽象语法树输入局部模型,训练局部模型,得到目标节点元素,目标节点元素包括目标节点的值与目标节点的类型;
根据目标节点元素与实际节点元素确定损失函数值;
根据损失函数值更新局部模型;
在满足收敛条件时,得到更新后的局部模型对应的局部模型参数,收敛条件为迭代次数等于预设迭代次数或损失函数值小于预设值。
在一种具体的实现方式中,上述处理单元602获取本地数据集中的源代码,将源代码解析成抽象语法树的具体操作可以参见上述S201中的相关操作,在此不再赘述;上述处理单元602得到目标节点元素的具体操作可以参见上述S202中的相关操作,在此不再赘述;上述处理单元602确定损失函数值的具体操作可以参见上述S203中的相关操作,在此不再赘述;上述处理单元602更新局部模型、得到更新后的局部模型对应的局部模型参数的具体操作可以参见上述S204中的相关操作,在此不再赘述。
另外,本申请实施例提供了一种电子设备,其可以包括本申请上述任一实施例的代码补全方法。具体地,该电子设备例如可以是终端设备或者服务器等设备。
本申请实施例还提供了另一种电子设备,包括:
处理器和存储器,处理器执行存储器中的代码,从而完成本申请上述任一实施例代码补全方法的操作。
图7是本申请实施例提供的一种电子设备结构框图。下面参考图7,其示出了适于用来实现本申请实施例的终端设备或服务器的电子设备的结构示意图。如图7所示,该电子设备包括:一个或多个处理器701;通信接口702,存储器703。上述处理器701、通信接口702、和存储器703通过总线704连接。存储器703用于存储指令,处理器701用于执行存储器703存储的指令。其中,处理器701被配置用于调用程序指令执行:
获取本地数据集和聚合服务器发送的初始模型参数,其中,本地数据集包括多个源代码;
根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;
将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;
获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到训练好的代码补全模型;
获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
应当理解,在本申请实施例中,所称处理器701可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
通信接口702可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。
存储器703可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器1003也可以是易失性存储器,易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。
存储器703也可用于存储指令和数据,以便于处理器701调用存储器703中存储的指令实现上述代码补全装置执行的操作。
总线704可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线704可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选地,还可以包括输入/输出接口705,输入/输出接口705连接有输入/输出设备,用于接收输入的信息,输出操作结果。
具体实现中,本申请实施例中所描述的处理器701、通信接口702、可执行本申请实施例提供的一种代码补全方法和装置的各个实施例中所描述的实现方式,在此不再赘述。
在本申请的另一实施例中提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令被处理器执行时实现:获取本地数据集和聚合服务器发送的初始模型参数,其中,本地数据集包括多个源代码;根据初始模型参数和本地数据集训练局部模型,得到局部模型参数;将局部模型参数加密并发送给聚合服务器,以供聚合服务器根据多个参与方发送的局部模型参数进行聚合,得到全局模型参数;获取全局模型参数,根据全局模型参数和局部模型参数更新局部模型,得到训练好的代码补全模型;获取用户输入的代码,将代码输入至代码补全模型,得到目标代码。
计算机可读存储介质可以是前述任一实施例的电子设备的内部存储单元,例如终端的硬盘或内存。计算机可读存储介质也可以是终端的外部存储设备,例如终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,计算机可读存储介质还可以既包括电子设备的内部存储单元也包括外部存储设备。计算机可读存储介质用于存储计算机程序以及电子设备所需的其他程序和数据。计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的服务器、设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,也可执行发明实施例所描述的电子设备的实现方式,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的服务器、设备和方法,可以通过其它的方式实现。例如,以上所描述的服务器实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种代码补全方法,其特征在于,应用于第一参与方,所述第一参与方是包括聚合服务器和多个参与方的系统中的任意一个参与方,包括:
获取本地数据集和聚合服务器发送的初始模型参数,其中,所述本地数据集包括多个源代码;
根据所述初始模型参数和所述本地数据集训练局部模型,得到局部模型参数;
将所述局部模型参数加密并发送给所述聚合服务器,以供所述聚合服务器根据所述多个参与方发送的所述局部模型参数进行聚合,得到全局模型参数;
获取所述全局模型参数,根据所述全局模型参数和所述局部模型参数更新所述局部模型,得到训练好的代码补全模型;
获取用户输入的代码,将所述代码输入至所述代码补全模型,得到目标代码。
2.根据权利要求1所述的方法,其特征在于,所述根据所述初始模型参数和所述本地数据集训练局部模型,得到局部模型参数,包括:
获取本地数据集中的源代码,将所述源代码解析成抽象语法树,所述抽象语法树包括多个节点;
将所述抽象语法树输入所述局部模型,训练所述局部模型,得到目标节点元素,所述目标节点元素包括目标节点的值与目标节点的类型;
根据所述目标节点元素与实际节点元素确定损失函数值;
根据所述损失函数值更新所述局部模型;
在满足收敛条件时,得到更新后的局部模型对应的所述局部模型参数,所述收敛条件为迭代次数等于预设迭代次数或所述损失函数值小于预设值。
3.根据权利要求2所述的方法,其特征在于,
所述局部模型包括并联的节点值预测模型和节点类型预测模型;所述节点值预测模型用于对所述抽象语法树编码,预测所述目标节点的值,所述节点类型预测模型用于提取所述抽象语法树的层次结构,预测所述目标节点的类型。
4.根据权利要求2所述方法,其特征在于,所述训练所述局部模型,得到目标节点元素,包括:
对所述抽象语法树进行深度优先遍历,得到节点序列,采用Path2root保存所述抽象语法树的层次结构,得到Path2root层次化特征;
采用Transformer XL算法对所述节点序列进行编码,得到抽象语法树向量,采用循环神经网络算法对所述Path2root层次化特征进行编码,得到Path2root向量;
将所述抽象语法树向量和所述Path2root向量连接预测目标节点的值,得到所述目标节点的值;将所述抽象语法树向量和所述Path2root向量连接预测目标节点的类型,得到所述目标节点的类型。
5.根据权利要求2所述的方法,其特征在于,所述根据目标节点元素与实际节点元素确定损失函数值,包括:
根据所述目标节点的值与实际节点的值确定第一损失函数值;
根据所述目标节点的类型与实际节点的类型确定第二损失函数值;
将所述第一损失函数值与第二损失函数值进行加权平均,得到所述局部模型的损失函数值。
6.根据权利要求1所述的方法,其特征在于,所述将所述局部模型参数加密并发送给所述聚合服务器,包括:
将所述局部模型参数进行同态加密,得到加密的局部模型参数,将所述加密的局部模型参数发送给所述聚合服务器。
7.根据权利要求1所述的方法,其特征在于,所述根据所述全局模型参数和所述局部模型参数更新所述局部模型,包括:
将所述局部模型参数与所述全局模型参数进行加权平均,得到新的局部模型参数,根据所述新的局部模型参数更新所述局部模型。
8.一种代码补全装置,其特征在于,包括:
获取单元,用于获取本地数据集和聚合服务器发送的初始模型参数,其中,所述本地数据集包括多个源代码;
处理单元,用于根据所述初始模型参数和所述本地数据集训练局部模型,得到局部模型参数;
发送单元,用于将所述局部模型参数加密并发送给所述聚合服务器,以供所述聚合服务器根据所述多个参与方发送的所述局部模型参数进行聚合,得到全局模型参数;
更新单元,用于获取所述全局模型参数,根据所述全局模型参数和所述局部模型参数更新所述局部模型得到训练好的代码补全模型;
所述处理单元,还用于获取用户输入的代码,将所述代码输入至所述代码补全模型,得到目标代码。
9.一种代码补全设备,其特征在于,包括:处理器和存储器,所述处理器执行所述存储器中的代码执行如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,包括指令,当所述指令在计算机上运行时,使得所述计算机执行如权利要求1至7任一项所述的方法。
CN202011507517.1A 2020-12-18 2020-12-18 一种代码补全方法、装置以及相关设备 Pending CN112527273A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202011507517.1A CN112527273A (zh) 2020-12-18 2020-12-18 一种代码补全方法、装置以及相关设备
PCT/CN2021/083488 WO2022126909A1 (zh) 2020-12-18 2021-03-29 一种代码补全方法、装置以及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011507517.1A CN112527273A (zh) 2020-12-18 2020-12-18 一种代码补全方法、装置以及相关设备

Publications (1)

Publication Number Publication Date
CN112527273A true CN112527273A (zh) 2021-03-19

Family

ID=75001791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011507517.1A Pending CN112527273A (zh) 2020-12-18 2020-12-18 一种代码补全方法、装置以及相关设备

Country Status (2)

Country Link
CN (1) CN112527273A (zh)
WO (1) WO2022126909A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113487041A (zh) * 2021-07-15 2021-10-08 Oppo广东移动通信有限公司 横向联邦学习方法、装置及存储介质
CN113805861A (zh) * 2021-09-17 2021-12-17 平安银行股份有限公司 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN114647408A (zh) * 2022-04-02 2022-06-21 北京白海科技有限公司 一种代码的补全方法、装置、电子设备及存储介质
WO2022126909A1 (zh) * 2020-12-18 2022-06-23 平安科技(深圳)有限公司 一种代码补全方法、装置以及相关设备
CN115840965A (zh) * 2022-12-27 2023-03-24 光谷技术有限公司 一种信息安全保障模型训练方法和系统

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115834580B (zh) * 2022-11-17 2023-05-30 清华大学 面向海洋大数据的分布式数据处理方法、装置和设备
CN116151132B (zh) * 2023-04-19 2023-07-18 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种编程学习场景的智能代码补全方法、系统及储存介质
CN117395085B (zh) * 2023-12-12 2024-03-22 天津医康互联科技有限公司 全局协方差矩阵计算方法、装置、电子设备及存储介质
CN117573096B (zh) * 2024-01-17 2024-04-09 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种融合抽象语法树结构信息的智能代码补全方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388425B (zh) * 2018-03-20 2021-02-19 北京大学 一种基于lstm自动补全代码的方法
EP3794515A1 (en) * 2018-05-17 2021-03-24 FRAUNHOFER-GESELLSCHAFT zur Förderung der angewandten Forschung e.V. Concepts for distributed learning of neural networks and/or transmission of parameterization updates therefor
CN109614103A (zh) * 2018-10-19 2019-04-12 北京硅心科技有限公司 一种基于字符的代码补全方法及系统
CN110688121A (zh) * 2019-08-22 2020-01-14 深圳壹账通智能科技有限公司 代码补全方法、装置、计算机装置及存储介质
CN112527273A (zh) * 2020-12-18 2021-03-19 平安科技(深圳)有限公司 一种代码补全方法、装置以及相关设备

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022126909A1 (zh) * 2020-12-18 2022-06-23 平安科技(深圳)有限公司 一种代码补全方法、装置以及相关设备
CN113487041A (zh) * 2021-07-15 2021-10-08 Oppo广东移动通信有限公司 横向联邦学习方法、装置及存储介质
CN113487041B (zh) * 2021-07-15 2024-05-07 深圳市与飞科技有限公司 横向联邦学习方法、装置及存储介质
CN113805861A (zh) * 2021-09-17 2021-12-17 平安银行股份有限公司 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN113805861B (zh) * 2021-09-17 2023-08-11 平安银行股份有限公司 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN114647408A (zh) * 2022-04-02 2022-06-21 北京白海科技有限公司 一种代码的补全方法、装置、电子设备及存储介质
CN115840965A (zh) * 2022-12-27 2023-03-24 光谷技术有限公司 一种信息安全保障模型训练方法和系统
CN115840965B (zh) * 2022-12-27 2023-08-08 光谷技术有限公司 一种信息安全保障模型训练方法和系统

Also Published As

Publication number Publication date
WO2022126909A1 (zh) 2022-06-23

Similar Documents

Publication Publication Date Title
CN112527273A (zh) 一种代码补全方法、装置以及相关设备
CN109284313B (zh) 基于半监督学习的联邦建模方法、设备及可读存储介质
CN111400504B (zh) 企业关键人的识别方法和装置
KR102031123B1 (ko) 이상패턴 감지 시스템 및 방법
CN108984733B (zh) 跨域数据融合方法、系统以及存储介质
CN110597799A (zh) 一种时序数据缺失值自动填补方法、系统和设备
CN112508199B (zh) 针对跨特征联邦学习的特征选择方法、装置及相关设备
WO2020211240A1 (zh) 预测模型的联合构建方法、装置及计算机设备
CN111144576A (zh) 模型训练方法、装置和电子设备
WO2023159888A1 (zh) 一种数据匹配方法、装置、设备及介质
CN113592593B (zh) 序列推荐模型的训练及应用方法、装置、设备及存储介质
CN114186256A (zh) 神经网络模型的训练方法、装置、设备和存储介质
Jyuo-Min et al. ECSTASY: A new environment for IC design optimization
Puglisi et al. Data compression and learning in time sequences analysis
CN111478885A (zh) 一种非对称加解密方法、设备及存储介质
CN111898135A (zh) 数据处理方法、数据处理装置、计算机设备和介质
US20240232237A9 (en) Information generation method, apparatus, electronic device, and computer -readable medium
CN115150063A (zh) 模型加密的方法、装置及电子设备
CN113312058B (zh) 一种智能合约二进制函数的相似性分析方法
CN109492844B (zh) 业务策略的生成方法和装置
CN116760528B (zh) 一种基于多密钥同态共享下的多方资产交付方法和装置
CN116542290B (zh) 基于多源多维数据的信息预测模型构建方法、装置及应用
CN115700548A (zh) 用户行为预测的方法、设备和计算机程序产品
WO2020128606A1 (en) Method for reducing computing operation time or computer resource usage
CN107239693B (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