CN116151132B - 一种编程学习场景的智能代码补全方法、系统及储存介质 - Google Patents
一种编程学习场景的智能代码补全方法、系统及储存介质 Download PDFInfo
- Publication number
- CN116151132B CN116151132B CN202310421313.3A CN202310421313A CN116151132B CN 116151132 B CN116151132 B CN 116151132B CN 202310421313 A CN202310421313 A CN 202310421313A CN 116151132 B CN116151132 B CN 116151132B
- Authority
- CN
- China
- Prior art keywords
- tree
- representing
- node
- neural network
- data set
- 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
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000003860 storage Methods 0.000 title claims abstract description 12
- 230000000295 complement effect Effects 0.000 claims abstract description 46
- 238000003062 neural network model Methods 0.000 claims abstract description 36
- 230000006870 function Effects 0.000 claims abstract description 18
- 238000007781 pre-processing Methods 0.000 claims abstract description 13
- 239000013598 vector Substances 0.000 claims description 37
- 238000013528 artificial neural network Methods 0.000 claims description 27
- 239000011159 matrix material Substances 0.000 claims description 18
- 238000012549 training Methods 0.000 claims description 16
- 238000011176 pooling Methods 0.000 claims description 13
- 230000007246 mechanism Effects 0.000 claims description 10
- 230000000306 recurrent effect Effects 0.000 claims description 10
- 239000002131 composite material Substances 0.000 claims description 8
- 230000004931 aggregating effect Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 7
- 238000010276 construction Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 5
- 239000003550 marker Substances 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 238000013135 deep learning Methods 0.000 description 3
- 230000000873 masking effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 102100033814 Alanine aminotransferase 2 Human genes 0.000 description 1
- 101710096000 Alanine aminotransferase 2 Proteins 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
- G06F30/27—Design optimisation, verification or simulation using machine learning, e.g. artificial intelligence, neural networks, support vector machines [SVM] or training a model
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/02—Reliability analysis or reliability optimisation; Failure analysis, e.g. worst case scenario performance, failure mode and effects analysis [FMEA]
-
- Y—GENERAL 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
- Y04—INFORMATION OR COMMUNICATION TECHNOLOGIES HAVING AN IMPACT ON OTHER TECHNOLOGY AREAS
- Y04S—SYSTEMS INTEGRATING TECHNOLOGIES RELATED TO POWER NETWORK OPERATION, COMMUNICATION OR INFORMATION TECHNOLOGIES FOR IMPROVING THE ELECTRICAL POWER GENERATION, TRANSMISSION, DISTRIBUTION, MANAGEMENT OR USAGE, i.e. SMART GRIDS
- Y04S10/00—Systems supporting electrical power generation, transmission or distribution
- Y04S10/50—Systems or methods supporting the power network operation or management, involving a certain degree of interaction with the load-side end user applications
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Computer Hardware Design (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Analysis (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种编程学习场景的智能代码补全方法、系统及储存介质,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;该智能代码补全方法、系统及储存介质采用独特的数据集进行预处理,并且根据用户反馈选择不同的推荐算法,不断提高智能代码补全功能中推荐代码的质量,源代码生成的抽象语法树进行拆分与重构,捕获了代码更多的语义信息,从而提高了代码补全的准确度;该方法全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。
Description
技术领域
本发明涉及编程教育技术领域,尤其涉及一种编程学习场景的智能代码补全方法、系统及储存介质。
背景技术
智能代码补全(Intelligent Code Completion),旨在提供一种在当前源代码位置即时预测待补全代码中的类名、方法名和代码片段等的方法,在代码技术领域发挥着重要作用,并在最近得到越来越多的关注,好的代码补全能够在排名尽可能的推荐中找到用户需要的代码,用户检查推荐列表的时间会影响对代码补全建议的信赖和编写代码的时间,因此尽可能在推荐长度短的情况下找到用户所需的补全建议非常重要。
目前,关于智能代码补全方法主要有以下方法:
1)基于传统算法的代码补全方法:
传统的代码补全方法主要通过人工定义启发式规则进行预测和补全,该方法通常利用代码的类型信息和语法规则,很少考虑上下文语义信息,并且推荐结果经常以字母顺序为依据进行推荐排序,导致在许多应用场景无法根据开发人员的需求高效推荐正确代码,传统方法的限制促使研究学者们利用机器学习进行代码预测,早期方法是在线性化的源代码标识符上采用了n-gram语言模型,决策树模型等。
2)基于深度学习的代码补全方法:
基于深度学习的代码补全方法根据代码的不同特征,将深度学习应用于代码补全,常见的神经网络模型有循环神经网络、长短记忆网络等,随着计算机算力的逐渐增加,大型预训练模型在代码补全任务中也取得了很好的效果,常用的预训练模型有Bert、GPT-2等,模型利用具有掩盖机制的多头自注意力机制,掩盖当前预测位置以后的信息,更加符合代码补全任务场景。
尽管近年来提出了许多工作,但目前大多数工作都是采用已有工程源代码作为数据进行分析工作,预测结果主要面向开发人员工作场景。然而,在青少年编程学习场景中,学生使用的应用程序接口(API)更多是已学习知识点相关的,仍应用面向开发人员场景下的普适化预测结果难以满足教育场景下学生需要的针对性代码补全方案,使得此功能无法有效的帮助学生。
发明内容
基于背景技术存在的技术问题,本发明提出了一种编程学习场景的智能代码补全方法、系统及储存介质,全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。
本发明提出的一种编程学习场景的智能代码补全方法,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;
所述transformer深度神经网络模型的训练过程如下:
S1:构建数据集,并对所述数据集进行预处理生成抽象语法树;
S2:遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
S4:将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
S5:在用户未反馈模式下,基于贪心算法推荐预测结果;
S6:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
其中,基于树的第二递推神经网络编码所述后代树具体为:
其中,表示后代树节点/>的隐藏状态,/>和/>表示可学习的权重矩阵,表示后代树节点/>的所有孩子节点集合,/>表示后代树节点/>的其中一个孩子节点,/>表示/>这个孩子节点的隐藏状态,/>表示双曲正切函数,/>表示将所有子树嵌入后得到的聚合向量。
进一步地,在步骤S1:构建数据集,并对所述数据集进行预处理生成抽象语法树中,具体包括:
获取编程学习场景下的相关数据组成数据集;
对所述数据集进行格式处理,得到格式后数据集;
将所述格式后的数据集拆分成单词集合得到训练语料,将所述训练语料中的所有单词拆分为字节,基于所述字节构建初始词表;
重复统计所述初始词表中的每个字节出现的频率,将频率最高的字节合并成新的子词并更新初始词表,直到所述初始词表大小达到期望或者剩下字节出现的频率最高为1,得到更新后词表;
将更新后词表所输出的所有子词拼接,直到遇见结束符停止拼接,得到拼接后的子词,所述结束符对应为每个单词后所加的结束符;
将所述格式后的数据集的代码生成抽象语法树,利用拼接后的子词作为词表中的子词参与到所述transformer深度神经网络模型对源代码的预测结果输出。
进一步地,在每个子树中节点的隐藏状态表达式中,若当前节点为叶节点,则
=/>。
进一步地,在基于树的第二递推神经网络编码所述后代树中,若当前节点为叶节点,则
。
进一步地,在步骤S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式中,所述后代树转化为向量形式具体公式如下:
其中,表示将所有子树/>嵌入后得到的聚合向量,/>表示最大池化,/>表示子树/>中的节点集,/>表示该子树所有节点的隐藏状态。
进一步地,所述transformer深度神经网络模型中的多头注意力机制的构建公式如下:
其中,为查询向量,/>为接收查找向量,/>为查询到的内容向量,/>、/>、/>分别对应/>、/>、/>的可学习权重矩阵,/>表示可学习权重矩阵,/>用于确定重要单词,产生大小为n × n的矩阵,其中n是输入序列的长度。
进一步地,在将源代码输入到已训练完成的transformer深度神经网络模型中之前,对源代码进行预处理,预处理过程如下:
将所述拼接后的子词作为词表中的子词,并将所述词表中所有子词按照长度从大到小进行排序,得到排序后词表;
将源代码拆分源单词,并将所有源单词拆分成子字符串,将子字符串与排序后词表进行遍历匹配;
若所述子字符串与所述排序后词表中的子词匹配,则输出当前子词,并对剩下的字符串继续匹配;
若遍历所述排序后词表结束后,部分子字符串与所述排序后词表中的子词未匹配,则输出标记符。
一种编程学习场景的智能代码补全系统,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果,所述transformer深度神经网络模型的训练具体包括数据集构建模块、第一编码模块、第二编码模块、输入模块、第一推荐模块和第二推荐模块;
所述数据集构建模块用于构建数据集,并对所述数据集进行预处理生成抽象语法树;
所述第一编码模块用于遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
所述第二编码模块用于将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
所述输入模块用于将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
所述第一推荐模块用于在用户未反馈模式下,基于贪心算法推荐预测结果;
所述第二推荐模块用于在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
其中,是子树的节点隐藏状态,/>和/>是可学习的权重矩阵,/>是子词嵌入得到的向量,/>是节点/>的所有孩子节点集合,/>表示双曲正切函数,/>表示节点/>的其中一个孩子节点,/>表示节点/>的其中一个孩子节点/>的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
其中,表示后代树节点/>的隐藏状态,/>和/>表示可学习的权重矩阵,表示后代树节点/>的所有孩子节点集合,/>表示后代树节点/>的其中一个孩子节点,/>表示/>这个孩子节点的隐藏状态,/>表示双曲正切函数,/>表示将所有子树嵌入后得到的聚合向量。
一种计算机储存介质,所述计算机储存介质上存储有若干分类程序,所述若干分类程序用于被处理器调用并执行如上所述的智能代码补全方法。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本发明提供的一种编程学习场景的智能代码补全方法、系统及储存介质的优点在于:本发明结构中提供的一种编程学习场景的智能代码补全方法、系统及储存介质,采用独特的数据集进行预处理,并且根据用户反馈选择不同的推荐算法,不断提高智能代码补全功能中推荐代码的质量,源代码生成的抽象语法树进行拆分与重构,捕获了代码更多的语义信息,从而提高了代码补全的准确度;该方法全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。
附图说明
图1为本发明的结构示意图。
具体实施方式
下面,通过具体实施例对本发明的技术方案进行详细说明,在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其他方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似改进,因此本发明不受下面公开的具体实施的限制。
如图1所示,本发明提出的一种编程学习场景的智能代码补全方法,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;
所述transformer深度神经网络模型的训练过程如下S1至S6:
S1:构建数据集,并对所述数据集进行预处理生成抽象语法树,具体包括步骤S11至S16;
S11:获取编程学习场景下的相关数据组成数据集;
需要说明的是,该数据集不是传统的通用数据集,而是为教育场景定制知识点相关的数据集。
S12:对所述数据集进行格式处理,得到格式后数据集;
格式处理采用不限于去掉空格等特殊字符、加入开始符及结束符等数据操作,以确保适当的格式可用于后续编码操作;其中,会掩盖部分代码作为需要预测的位置,相应位置的实际代码作为标签,即经过格式化处理后的数据集是存在一定代码缺失的数据集,并将缺失部分进行标记,以在通过该数据集训练transformer深度神经网络模型时,可以作为验证集进行验证transformer深度神经网络模型的正确率,以得到准确率高的transformer深度神经网络模型,从而对给定有缺陷的源代码进行准确并有效的代码补全。
S13:将所述格式后的数据集拆分成单词集合得到训练语料,将所述训练语料中的所有单词拆分为字节,基于所述字节构建初始词表;
词表构建是预处理的核心,词表构建主要是对训练语料进行处理确定得到期望的词表大小。
S14:重复统计所述初始词表中的每个字节出现的频率,将频率最高的字节合并成新的子词并更新初始词表,直到所述初始词表大小达到期望或者剩下字节出现的频率最高为1,得到更新后词表;
为了标记每个单词的结束,在每个单词后面都加入了一个结束符。
S15:将更新后词表所输出的所有子词拼接,直到遇见结束符停止拼接,得到拼接后的子词,所述结束符对应为每个单词后所加的结束符;
S16:将所述格式后的数据集的代码生成抽象语法树,利用拼接后的子词作为词表中的子词参与到所述transformer深度神经网络模型对源代码的预测结果输出,因而最终预测结果的单词是由词表中的子词构成。
针对抽象语法树的生成,使用现有代码解析工具,可直接得到该拼接后的子词的抽象语法树;
通过步骤S11至S16,对数据集进行预处理,得到抽象语法树,将代码不全的数据集拆分成字节并按照一定条件合成字节,便于后续对transformer深度神经网络模型的有效训练。
S2:遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
针对复合结构,例如if、while等复合结构,即,每次遇到复合结构 (如if、while等) 时,都会插入占位符节点,复合结构即抽象语法树中节点为关键词(例如if、while)及其所有孩子节点构成的子树,为关键词这个节点插入占位符节点。
基于树的第一递归神经网络 (RvNN),经过最大池化层来编码每个子树,其中,子树定义为 (/>,/>),/>是节点集,/>是边集;树的第一递推神经网络编码所述子树的向前传播公式如下:
其中,是子树的节点隐藏状态,/>和/>是可学习的权重矩阵,/>是子词嵌入得到的向量,/>是节点/>的所有孩子节点集合,/>表示双曲正切函数,/>表示节点/>的其中一个孩子节点,/>表示节点/>的其中一个孩子节点/>的隐藏状态。
如果当前节点为叶节点,表示此时已经没有孩子节点了,上述公式便不再适用,公式变为:
=/>。
S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
基于树的第二递推神经网络编码所述后代树具体为:
其中,表示后代树节点/>的隐藏状态,/>和/>表示可学习的权重矩阵,表示后代树节点/>的所有孩子节点集合,/>表示后代树节点/>的其中一个孩子节点,/>表示/>这个孩子节点的隐藏状态,/>表示双曲正切函数,/>表示后代树转化成的向量形式,即所有子树/>嵌入后得到的聚合向量。
若当前为叶节点,则/>表示该节点本身的词嵌入,表示此时已经没有孩子节点了,上述公式便不再适用,公式变为:
。
在本实施例中,在这种自下而上的聚合之后,每个节点都有其对应的隐藏状态,所有节点的隐藏状态通过最大池化操作聚合得到后代树,其中,所述最大池化操作用作全部所述子树的嵌入,得到聚合向量/>,具体如下:
其中,表示将所有子树/>嵌入后得到的聚合向量,/>表示最大池化,/>表示子树/>中的节点集,/>表示子树的节点隐藏状态,隐藏状态也是向量,表示该子树所有节点的隐藏状态,/>表示并运算。
S4:将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
transformer深度神经网络模型中将多头自注意力机制变成了加了掩盖机制的多头自注意力机制,其中,掩盖机制的多头自注意力机制仅关注当前位置左侧的文本,符合代码补全的场景;对于多头注意力机制是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的自注意力结果拼接起来:
其中,为查询向量,所述/>为接收查找向量,所述/>为查询到的内容向量,/>、、/>分别对应/>、/>、/>的可学习权重矩阵,/>表示可学习权重矩阵。对于/>的计算采用了带缩放的点积,如下:
即:
其中,是/>向量的维度,/>用于确定哪些单词关系是比较重要的,最后产生大小为n × n的矩阵,其中n是输入序列的长度,其中输入序列是输入到模型的单词序列,一般是数据集的数据。
S5:在用户未反馈模式下,基于贪心算法推荐预测结果;
所述贪心算法,具体的,基于源代码经过表征输入至深度神经网络模型,得到词库中单词的经验分布,根据经验分布我们会选择期望个数的推荐单词,按照可能性的从大到小作为优先级推荐给用户;其中,在用户每次使用代码补全功能,会记录下实际使用代码及相应排名以便后续优化推荐服务。
例如设定向用户推荐三个预测方案,如果经过transformer深度神经网络模型得到的预测结果按优先级由高到低排序有A1、B1、C1、D1··,n个方案,选择A1、B1、C1三个方案按序推荐给用户,以供用户查看。
S6:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果。
在本实施例中,青少年编程学习场景中不同的用户在学习过程中通常会遇到相似的学习场景,例如,当一个用户A需要个性化推荐的时候,先找到在相似学习场景下使用该智能代码补全方法推荐预测结果的其他用户,然后把其他用户使用过的推荐代码推荐给A;相当于用户A给其他水平相似已完成该学习场景的n个用户使用过的推荐代码打分,选择最可能使用的那个代码方案。
例如设定向用户推荐三个预测方案,如果经过transformer深度神经网络模型得到的预测结果按优先级由高到低排序有A2、B2、C2、D2··,n个方案,暂定选择A2、B2、C2三个方案进行推荐,找到在相似学习场景下使用该智能代码补全方法推荐预测结果的其他用户,若其他用户使用过的推荐代码为A2,则将A2、B2、C2三个方案按序最终推荐给用户,若其他用户使用过的推荐代码为B2,则将B2、A2、C2三个方案按序最终推荐给用户,若其他用户使用过的推荐代码为M2,则将M2、A2、B2三个方案按序最终推荐给用户。
需要说明的是,可能会出现某个新的学习场景而此时并没有任何其他用户完成此学习场景,将优先使用贪心算法作为第一批新学习场景下用户的推荐算法。
根据步骤S1至S6,第一递推神经网络能够增强在多个子树中捕获语义信息的能力,因为树拆分技术可以使得子树包含来自不同模块的语义信息;第二递推神经网络可以根据子树在层次结构中的相对位置进一步聚合子树信息,其次分割之后的树大小减少,从而缓解了梯度消失和爆炸问题。此外,在树拆分后,每个子树的深度都得到很好的控制,从而可以更稳定的进行transformer深度神经网络模型训练。
其中transformer深度神经网络模型具体使用过程中如下:
S01:将所述拼接后的子词作为词表中的子词,将词表中所有子词按照长度从大到小进行排序,得到排序后词表;
S02:将源代码拆分源单词,并将所有源单词拆分成子字符串,将子字符串与排序后词表进行遍历匹配;
S03:若所述子字符串与所述排序后词表中的子词匹配,则输出当前子词,并对剩下的字符串继续匹配;
S04:若遍历所述排序后词表结束后,部分子字符串与所述排序后词表中的子词未匹配,则输出标记符;
S05:将匹配的子词以及标记符输入到已训练完成的transformer深度神经网络模型中,以输出预测结果;
S06:在用户未反馈模式下,基于贪心算法推荐预测结果;
S07:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果。
根据步骤S01至S07,通过transformer深度神经网络模型实现对源代码的代码补全,其中源代码为有缺陷的代码。
本实施例采用独特的数据集进行预处理,并且根据用户反馈选择不同的推荐算法,不断提高智能代码补全功能中推荐代码的质量,源代码生成的抽象语法树进行拆分与重构,捕获了代码更多的语义信息,从而提高了代码补全的准确度;该方法全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (9)
1.一种编程学习场景的智能代码补全方法,其特征在于,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;
所述transformer深度神经网络模型的训练过程如下:
S1:构建数据集,并对所述数据集进行预处理生成抽象语法树;
S2:遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
S4:将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
S5:在用户未反馈模式下,基于贪心算法推荐预测结果;
S6:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
其中,是子树的节点隐藏状态,/>和/>是可学习的权重矩阵,/>是子词嵌入得到的向量,/>是节点/>的所有孩子节点集合,/>表示双曲正切函数,/>表示节点/>的其中一个孩子节点,/>表示节点/>的其中一个孩子节点/>的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
其中,表示后代树节点/>的隐藏状态,/>和/>表示可学习的权重矩阵,/>表示后代树节点/>的所有孩子节点集合,/>表示后代树节点/>的其中一个孩子节点,/>表示这个孩子节点的隐藏状态,/>表示双曲正切函数,/>表示将所有子树/>嵌入后得到的聚合向量。
2.根据权利要求1所述的编程学习场景的智能代码补全方法,其特征在于,在步骤S1:构建数据集,并对所述数据集进行预处理生成抽象语法树中,具体包括:
获取编程学习场景下的相关数据组成数据集;
对所述数据集进行格式处理,得到格式后数据集;
将所述格式后的数据集拆分成单词集合得到训练语料,将所述训练语料中的所有单词拆分为字节,基于所述字节构建初始词表;
重复统计所述初始词表中的每个字节出现的频率,将频率最高的字节合并成新的子词并更新初始词表,直到所述初始词表大小达到期望或者剩下字节出现的频率最高为1,得到更新后词表;
将更新后词表所输出的所有子词拼接,直到遇见结束符停止拼接,得到拼接后的子词,所述结束符对应为每个单词后所加的结束符;
将所述格式后的数据集的代码生成抽象语法树,利用拼接后的子词作为词表中的子词参与到所述transformer深度神经网络模型对源代码的预测结果输出。
3.根据权利要求2所述的编程学习场景的智能代码补全方法,其特征在于,在每个子树中节点的隐藏状态表达式中,若当前节点为叶节点,则
=/>。
4.根据权利要求3所述的编程学习场景的智能代码补全方法,其特征在于,在基于树的第二递推神经网络编码所述后代树中,若当前孩子节点为叶节点,则
。
5.根据权利要求4所述的编程学习场景的智能代码补全方法,其特征在于,在步骤S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式中,所述后代树转化为向量形式具体公式如下:
其中,表示将所有子树/>嵌入后得到的聚合向量,/>表示最大池化,表示子树/>中的节点集,/>表示该子树所有节点的隐藏状态。
6.根据权利要求1所述的编程学习场景的智能代码补全方法,其特征在于,所述transformer深度神经网络模型中的多头注意力机制的构建公式如下:
其中,为查询向量,/>为接收查找向量,/>为查询到的内容向量,/>、/>、/>分别对应Q、K、V的可学习权重矩阵,/>表示可学习权重矩阵,/>用于确定重要单词,产生大小为n×n的矩阵,其中n是输入序列的长度。
7.根据权利要求2所述的编程学习场景的智能代码补全方法,其特征在于,在将源代码输入到已训练完成的transformer深度神经网络模型中之前,对源代码进行预处理,预处理过程如下:
将所述拼接后的子词作为词表中的子词,并将所述词表中所有子词按照长度从大到小进行排序,得到排序后词表;
将源代码拆分源单词,并将所有源单词拆分成子字符串,将子字符串与排序后词表进行遍历匹配;
若所述子字符串与所述排序后词表中的子词匹配,则输出当前子词,并对剩下的字符串继续匹配;
若遍历所述排序后词表结束后,部分子字符串与所述排序后词表中的子词未匹配,则输出标记符。
8.一种编程学习场景的智能代码补全系统,其特征在于,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果,所述transformer深度神经网络模型的训练具体包括数据集构建模块、第一编码模块、第二编码模块、输入模块、第一推荐模块和第二推荐模块;
所述数据集构建模块用于构建数据集,并对所述数据集进行预处理生成抽象语法树;
所述第一编码模块用于遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
所述第二编码模块用于将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
所述输入模块用于将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
所述第一推荐模块用于在用户未反馈模式下,基于贪心算法推荐预测结果;
所述第二推荐模块用于在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
其中,是子树的节点隐藏状态,/>和/>是可学习的权重矩阵,/>是子词嵌入得到的向量,/>是节点/>的所有孩子节点集合,/>表示双曲正切函数,/>表示节点/>的其中一个孩子节点,/>表示节点/>的其中一个孩子节点/>的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
其中,表示后代树节点/>的隐藏状态,/>和/>表示可学习的权重矩阵,/>表示后代树节点/>的所有孩子节点集合,/>表示后代树节点/>的其中一个孩子节点,/>表示这个孩子节点的隐藏状态,/>表示双曲正切函数,/>表示将所有子树/>嵌入后得到的聚合向量。
9.一种计算机储存介质,其特征在于,所述计算机储存介质上存储有若干分类程序,所述若干分类程序用于被处理器调用并执行如权利要求1至7任一所述的智能代码补全方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310421313.3A CN116151132B (zh) | 2023-04-19 | 2023-04-19 | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310421313.3A CN116151132B (zh) | 2023-04-19 | 2023-04-19 | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116151132A CN116151132A (zh) | 2023-05-23 |
CN116151132B true CN116151132B (zh) | 2023-07-18 |
Family
ID=86352859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310421313.3A Active CN116151132B (zh) | 2023-04-19 | 2023-04-19 | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116151132B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116561299B (zh) * | 2023-07-10 | 2023-10-20 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 代码摘要生成方法、装置、设备及存储介质 |
CN117573084B (zh) * | 2023-08-02 | 2024-04-12 | 广东工业大学 | 一种基于逐层融合抽象语法树的代码补全方法 |
CN117422114B (zh) * | 2023-12-19 | 2024-04-09 | 电子科技大学(深圳)高等研究院 | Ai加速器的优化方法及ai加速器 |
CN117573096B (zh) * | 2024-01-17 | 2024-04-09 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种融合抽象语法树结构信息的智能代码补全方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388425A (zh) * | 2018-03-20 | 2018-08-10 | 北京大学 | 一种基于lstm自动补全代码的方法 |
CN112835585A (zh) * | 2021-01-25 | 2021-05-25 | 山东师范大学 | 一种基于抽象语法树的程序理解方法及系统 |
CN114327609A (zh) * | 2021-12-31 | 2022-04-12 | 北京航空航天大学 | 一种代码补全方法、模型和工具 |
WO2022126909A1 (zh) * | 2020-12-18 | 2022-06-23 | 平安科技(深圳)有限公司 | 一种代码补全方法、装置以及相关设备 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10983761B2 (en) * | 2019-02-02 | 2021-04-20 | Microsoft Technology Licensing, Llc | Deep learning enhanced code completion system |
-
2023
- 2023-04-19 CN CN202310421313.3A patent/CN116151132B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388425A (zh) * | 2018-03-20 | 2018-08-10 | 北京大学 | 一种基于lstm自动补全代码的方法 |
WO2022126909A1 (zh) * | 2020-12-18 | 2022-06-23 | 平安科技(深圳)有限公司 | 一种代码补全方法、装置以及相关设备 |
CN112835585A (zh) * | 2021-01-25 | 2021-05-25 | 山东师范大学 | 一种基于抽象语法树的程序理解方法及系统 |
CN114327609A (zh) * | 2021-12-31 | 2022-04-12 | 北京航空航天大学 | 一种代码补全方法、模型和工具 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116151132A (zh) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116151132B (zh) | 一种编程学习场景的智能代码补全方法、系统及储存介质 | |
Jung | Semantic vector learning for natural language understanding | |
CN112507065B (zh) | 一种基于注释语义信息的代码搜索方法 | |
JP5128629B2 (ja) | 品詞タグ付けシステム、品詞タグ付けモデルのトレーニング装置および方法 | |
CN110532353B (zh) | 基于深度学习的文本实体匹配方法、系统、装置 | |
US11860684B2 (en) | Few-shot named-entity recognition | |
CN111444320A (zh) | 文本检索方法、装置、计算机设备和存储介质 | |
CN112183094B (zh) | 一种基于多元文本特征的中文语法查错方法及系统 | |
WO2023005293A1 (zh) | 文本纠错方法、装置、设备及存储介质 | |
CN113076739A (zh) | 一种实现跨领域的中文文本纠错方法和系统 | |
CN115794480A (zh) | 一种基于日志语义编码器的系统异常日志检测方法及系统 | |
CN112800239A (zh) | 意图识别模型训练方法、意图识别方法及装置 | |
Moeng et al. | Canonical and surface morphological segmentation for nguni languages | |
CN117321565A (zh) | 包括空洞建议的代码完成 | |
CN114153978A (zh) | 模型训练方法、信息抽取方法、装置、设备及存储介质 | |
CN111709225B (zh) | 一种事件因果关系判别方法、装置和计算机可读存储介质 | |
CN113705222B (zh) | 槽识别模型训练方法及装置和槽填充方法及装置 | |
CN113901813A (zh) | 一种基于主题特征和隐式句子结构的事件抽取方法 | |
CN109902162B (zh) | 基于数字指纹的文本相似性的识别方法、存储介质及装置 | |
CN116127013A (zh) | 一种个人敏感信息知识图谱查询方法和装置 | |
CN115203206A (zh) | 数据内容搜索方法、装置、计算机设备及可读存储介质 | |
CN115203236A (zh) | 基于模板检索的文本到sql生成方法 | |
CN112528674B (zh) | 文本处理方法、模型的训练方法、装置、设备及存储介质 | |
Gong et al. | ADELT: Transpilation Between Deep Learning Frameworks | |
CN114528459A (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 |