CN116151132A - 一种编程学习场景的智能代码补全方法、系统及储存介质 - Google Patents

一种编程学习场景的智能代码补全方法、系统及储存介质 Download PDF

Info

Publication number
CN116151132A
CN116151132A CN202310421313.3A CN202310421313A CN116151132A CN 116151132 A CN116151132 A CN 116151132A CN 202310421313 A CN202310421313 A CN 202310421313A CN 116151132 A CN116151132 A CN 116151132A
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.)
Granted
Application number
CN202310421313.3A
Other languages
English (en)
Other versions
CN116151132B (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.)
Institute of Artificial Intelligence of Hefei Comprehensive National Science Center
Original Assignee
Institute of Artificial Intelligence of Hefei Comprehensive National Science Center
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 Institute of Artificial Intelligence of Hefei Comprehensive National Science Center filed Critical Institute of Artificial Intelligence of Hefei Comprehensive National Science Center
Priority to CN202310421313.3A priority Critical patent/CN116151132B/zh
Publication of CN116151132A publication Critical patent/CN116151132A/zh
Application granted granted Critical
Publication of CN116151132B publication Critical patent/CN116151132B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • G06F30/27Design optimisation, verification or simulation using machine learning, e.g. artificial intelligence, neural networks, support vector machines [SVM] or training a model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2119/00Details relating to the type or aim of the analysis or the optimisation
    • G06F2119/02Reliability analysis or reliability optimisation; Failure analysis, e.g. worst case scenario performance, failure mode and effects analysis [FMEA]
    • 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
    • Y04INFORMATION OR COMMUNICATION TECHNOLOGIES HAVING AN IMPACT ON OTHER TECHNOLOGY AREAS
    • Y04SSYSTEMS 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/00Systems supporting electrical power generation, transmission or distribution
    • Y04S10/50Systems 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)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了一种编程学习场景的智能代码补全方法、系统及储存介质,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;该智能代码补全方法、系统及储存介质采用独特的数据集进行预处理,并且根据用户反馈选择不同的推荐算法,不断提高智能代码补全功能中推荐代码的质量,源代码生成的抽象语法树进行拆分与重构,捕获了代码更多的语义信息,从而提高了代码补全的准确度;该方法全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。

Description

一种编程学习场景的智能代码补全方法、系统及储存介质
技术领域
本发明涉及编程教育技术领域,尤其涉及一种编程学习场景的智能代码补全方法、系统及储存介质。
背景技术
智能代码补全(Intelligent Code Completion),旨在提供一种在当前源代码位置即时预测待补全代码中的类名、方法名和代码片段等的方法,在代码技术领域发挥着重要作用,并在最近得到越来越多的关注,好的代码补全能够在排名尽可能的推荐中找到用户需要的代码,用户检查推荐列表的时间会影响对代码补全建议的信赖和编写代码的时间,因此尽可能在推荐长度短的情况下找到用户所需的补全建议非常重要。
目前,关于智能代码补全方法主要有以下方法:
1)基于传统算法的代码补全方法:
传统的代码补全方法主要通过人工定义启发式规则进行预测和补全,该方法通常利用代码的类型信息和语法规则,很少考虑上下文语义信息,并且推荐结果经常以字母顺序为依据进行推荐排序,导致在许多应用场景无法根据开发人员的需求高效推荐正确代码,传统方法的限制促使研究学者们利用机器学习进行代码预测,早期方法是在线性化的源代码标识符上采用了n-gram语言模型,决策树模型等。
2)基于深度学习的代码补全方法:
基于深度学习的代码补全方法根据代码的不同特征,将深度学习应用于代码补全,常见的神经网络模型有循环神经网络、长短记忆网络等,随着计算机算力的逐渐增加,大型预训练模型在代码补全任务中也取得了很好的效果,常用的预训练模型有Bert、GPT-2等,模型利用具有掩盖机制的多头自注意力机制,掩盖当前预测位置以后的信息,更加符合代码补全任务场景。
尽管近年来提出了许多工作,但目前大多数工作都是采用已有工程源代码作为数据进行分析工作,预测结果主要面向开发人员工作场景。然而,在青少年编程学习场景中,学生使用的应用程序接口(API)更多是已学习知识点相关的,仍应用面向开发人员场景下的普适化预测结果难以满足教育场景下学生需要的针对性代码补全方案,使得此功能无法有效的帮助学生。
发明内容
基于背景技术存在的技术问题,本发明提出了一种编程学习场景的智能代码补全方法、系统及储存介质,全面考虑了青少年编程学习场景下智能代码补全功能的适配性,可以提高智能代码补全结果的多样性、准确性。
本发明提出的一种编程学习场景的智能代码补全方法,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果;
所述transformer深度神经网络模型的训练过程如下:
S1:构建数据集,并对所述数据集进行预处理生成抽象语法树;
S2:遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
S4:将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
S5:在用户未反馈模式下,基于贪心算法推荐预测结果;
S6:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
其中,基于树的第二递推神经网络编码所述后代树具体为:
Figure SMS_1
其中,
Figure SMS_3
表示后代树节点/>
Figure SMS_9
的隐藏状态,/>
Figure SMS_12
和/>
Figure SMS_4
表示可学习的权重矩阵,/>
Figure SMS_8
表示后代树节点/>
Figure SMS_11
的所有孩子节点集合,/>
Figure SMS_14
表示后代树节点/>
Figure SMS_2
的其中一个孩子节点,/>
Figure SMS_6
表示/>
Figure SMS_10
这个孩子节点的隐藏状态,/>
Figure SMS_13
表示双曲正切函数,/>
Figure SMS_5
表示将所有子树/>
Figure SMS_7
嵌入后得到的聚合向量。
进一步地,在步骤S1:构建数据集,并对所述数据集进行预处理生成抽象语法树中,具体包括:
获取编程学习场景下的相关数据组成数据集;
对所述数据集进行格式处理,得到格式后数据集;
将所述格式后的数据集拆分成单词集合得到训练语料,将所述训练语料中的所有单词拆分为字节,基于所述字节构建初始词表;
重复统计所述初始词表中的每个字节出现的频率,将频率最高的字节合并成新的子词并更新初始词表,直到所述初始词表大小达到期望或者剩下字节出现的频率最高为1,得到更新后词表;
将更新后词表所输出的所有子词拼接,直到遇见结束符停止拼接,得到拼接后的子词,所述结束符对应为每个单词后所加的结束符;
将所述格式后的数据集的代码生成抽象语法树,利用拼接后的子词作为词表中的子词参与到所述transformer深度神经网络模型对源代码的预测结果输出。
进一步地,在每个子树中节点的隐藏状态表达式中,若当前节点
Figure SMS_15
为叶节点,则
Figure SMS_16
=/>
Figure SMS_17
进一步地,在基于树的第二递推神经网络编码所述后代树中,若当前节点
Figure SMS_18
为叶节点,则
Figure SMS_19
进一步地,在步骤S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式中,所述后代树转化为向量形式具体公式如下:
Figure SMS_20
其中,
Figure SMS_21
表示将所有子树/>
Figure SMS_22
嵌入后得到的聚合向量,/>
Figure SMS_23
表示最大池化,/>
Figure SMS_24
表示子树/>
Figure SMS_25
中的节点集,/>
Figure SMS_26
表示该子树所有节点的隐藏状态。
进一步地,所述transformer深度神经网络模型中的多头注意力机制的构建公式如下:
Figure SMS_27
Figure SMS_28
其中,
Figure SMS_29
为查询向量,/>
Figure SMS_33
为接收查找向量,/>
Figure SMS_37
为查询到的内容向量,/>
Figure SMS_31
、/>
Figure SMS_34
、/>
Figure SMS_35
分别对应/>
Figure SMS_38
、/>
Figure SMS_30
、/>
Figure SMS_32
的可学习权重矩阵,/>
Figure SMS_36
表示可学习权重矩阵,/>
Figure SMS_39
用于确定重要单词,产生大小为n × n的矩阵,其中n是输入序列的长度。
进一步地,在将源代码输入到已训练完成的transformer深度神经网络模型中之前,对源代码进行预处理,预处理过程如下:
将所述拼接后的子词作为词表中的子词,并将所述词表中所有子词按照长度从大到小进行排序,得到排序后词表;
将源代码拆分源单词,并将所有源单词拆分成子字符串,将子字符串与排序后词表进行遍历匹配;
若所述子字符串与所述排序后词表中的子词匹配,则输出当前子词,并对剩下的字符串继续匹配;
若遍历所述排序后词表结束后,部分子字符串与所述排序后词表中的子词未匹配,则输出标记符。
一种编程学习场景的智能代码补全系统,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果,所述transformer深度神经网络模型的训练具体包括数据集构建模块、第一编码模块、第二编码模块、输入模块、第一推荐模块和第二推荐模块;
所述数据集构建模块用于构建数据集,并对所述数据集进行预处理生成抽象语法树;
所述第一编码模块用于遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
所述第二编码模块用于将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
所述输入模块用于将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
所述第一推荐模块用于在用户未反馈模式下,基于贪心算法推荐预测结果;
所述第二推荐模块用于在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
Figure SMS_40
其中,
Figure SMS_41
是子树的节点隐藏状态,/>
Figure SMS_47
和/>
Figure SMS_49
是可学习的权重矩阵,/>
Figure SMS_44
是子词嵌入得到的向量,/>
Figure SMS_45
是节点/>
Figure SMS_48
的所有孩子节点集合,/>
Figure SMS_51
表示双曲正切函数,/>
Figure SMS_42
表示节点/>
Figure SMS_46
的其中一个孩子节点,/>
Figure SMS_50
表示节点/>
Figure SMS_52
的其中一个孩子节点/>
Figure SMS_43
的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
Figure SMS_53
其中,
Figure SMS_55
表示后代树节点/>
Figure SMS_61
的隐藏状态,/>
Figure SMS_64
和/>
Figure SMS_56
表示可学习的权重矩阵,/>
Figure SMS_59
表示后代树节点/>
Figure SMS_63
的所有孩子节点集合,/>
Figure SMS_65
表示后代树节点/>
Figure SMS_54
的其中一个孩子节点,/>
Figure SMS_58
表示/>
Figure SMS_62
这个孩子节点的隐藏状态,/>
Figure SMS_66
表示双曲正切函数,/>
Figure SMS_57
表示将所有子树/>
Figure SMS_60
嵌入后得到的聚合向量。
一种计算机储存介质,所述计算机储存介质上存储有若干分类程序,所述若干分类程序用于被处理器调用并执行如上所述的智能代码补全方法。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括: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),经过最大池化层来编码每个子树,其中,子树
Figure SMS_67
定义为 (/>
Figure SMS_68
,/>
Figure SMS_69
),/>
Figure SMS_70
是节点集,/>
Figure SMS_71
是边集;树的第一递推神经网络编码所述子树的向前传播公式如下:
Figure SMS_72
其中,
Figure SMS_75
是子树的节点隐藏状态,/>
Figure SMS_77
和/>
Figure SMS_82
是可学习的权重矩阵,/>
Figure SMS_76
是子词嵌入得到的向量,/>
Figure SMS_79
是节点/>
Figure SMS_81
的所有孩子节点集合,/>
Figure SMS_83
表示双曲正切函数,/>
Figure SMS_73
表示节点/>
Figure SMS_78
的其中一个孩子节点,/>
Figure SMS_80
表示节点/>
Figure SMS_84
的其中一个孩子节点/>
Figure SMS_74
的隐藏状态。
如果当前节点
Figure SMS_85
为叶节点,表示此时已经没有孩子节点了,上述公式便不再适用,公式变为:
Figure SMS_86
=/>
Figure SMS_87
S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
基于树的第二递推神经网络编码所述后代树具体为:
Figure SMS_88
其中,
Figure SMS_91
表示后代树节点/>
Figure SMS_95
的隐藏状态,/>
Figure SMS_98
和/>
Figure SMS_90
表示可学习的权重矩阵,/>
Figure SMS_96
表示后代树节点/>
Figure SMS_99
的所有孩子节点集合,/>
Figure SMS_101
表示后代树节点/>
Figure SMS_92
的其中一个孩子节点,/>
Figure SMS_93
表示/>
Figure SMS_97
这个孩子节点的隐藏状态,/>
Figure SMS_100
表示双曲正切函数,/>
Figure SMS_89
表示后代树转化成的向量形式,即所有子树/>
Figure SMS_94
嵌入后得到的聚合向量。
若当前
Figure SMS_102
为叶节点,则/>
Figure SMS_103
表示该节点本身的词嵌入,表示此时已经没有孩子节点了,上述公式便不再适用,公式变为:
Figure SMS_104
在本实施例中,在这种自下而上的聚合之后,每个节点都有其对应的隐藏状态,所有节点的隐藏状态通过最大池化操作聚合得到后代树,其中,所述最大池化操作用作全部所述子树
Figure SMS_105
的嵌入,得到聚合向量/>
Figure SMS_106
,具体如下:
Figure SMS_107
其中,
Figure SMS_110
表示将所有子树/>
Figure SMS_111
嵌入后得到的聚合向量,/>
Figure SMS_113
表示最大池化,/>
Figure SMS_109
表示子树/>
Figure SMS_112
中的节点集,/>
Figure SMS_114
表示子树的节点隐藏状态,隐藏状态也是向量,/>
Figure SMS_115
表示该子树所有节点的隐藏状态,/>
Figure SMS_108
表示并运算。
S4:将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
transformer深度神经网络模型中将多头自注意力机制变成了加了掩盖机制的多头自注意力机制,其中,掩盖机制的多头自注意力机制仅关注当前位置左侧的文本,符合代码补全的场景;对于多头注意力机制是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的自注意力结果拼接起来:
Figure SMS_116
Figure SMS_117
其中,
Figure SMS_120
为查询向量,所述/>
Figure SMS_121
为接收查找向量,所述/>
Figure SMS_124
为查询到的内容向量,/>
Figure SMS_119
、/>
Figure SMS_123
Figure SMS_126
分别对应/>
Figure SMS_128
、/>
Figure SMS_118
、/>
Figure SMS_122
的可学习权重矩阵,/>
Figure SMS_125
表示可学习权重矩阵。对于/>
Figure SMS_127
的计算采用了带缩放的点积,如下:
Figure SMS_129
即:
Figure SMS_130
其中,
Figure SMS_131
是/>
Figure SMS_132
向量的维度,/>
Figure SMS_133
用于确定哪些单词关系是比较重要的,最后产生大小为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:在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
Figure QLYQS_1
其中,
Figure QLYQS_2
是子树的节点隐藏状态,/>
Figure QLYQS_6
和/>
Figure QLYQS_10
是可学习的权重矩阵,/>
Figure QLYQS_4
是子词嵌入得到的向量,/>
Figure QLYQS_8
是节点/>
Figure QLYQS_11
的所有孩子节点集合,/>
Figure QLYQS_13
表示双曲正切函数,/>
Figure QLYQS_3
表示节点/>
Figure QLYQS_7
的其中一个孩子节点,/>
Figure QLYQS_9
表示节点/>
Figure QLYQS_12
的其中一个孩子节点/>
Figure QLYQS_5
的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
Figure QLYQS_14
其中,
Figure QLYQS_15
表示后代树节点/>
Figure QLYQS_21
的隐藏状态,/>
Figure QLYQS_23
和/>
Figure QLYQS_17
表示可学习的权重矩阵,/>
Figure QLYQS_22
表示后代树节点/>
Figure QLYQS_25
的所有孩子节点集合,/>
Figure QLYQS_27
表示后代树节点/>
Figure QLYQS_16
的其中一个孩子节点,/>
Figure QLYQS_20
表示/>
Figure QLYQS_24
这个孩子节点的隐藏状态,/>
Figure QLYQS_26
表示双曲正切函数,/>
Figure QLYQS_18
表示将所有子树/>
Figure QLYQS_19
嵌入后得到的聚合向量。
2.根据权利要求1所述的编程学习场景的智能代码补全方法,其特征在于,在步骤S1:构建数据集,并对所述数据集进行预处理生成抽象语法树中,具体包括:
获取编程学习场景下的相关数据组成数据集;
对所述数据集进行格式处理,得到格式后数据集;
将所述格式后的数据集拆分成单词集合得到训练语料,将所述训练语料中的所有单词拆分为字节,基于所述字节构建初始词表;
重复统计所述初始词表中的每个字节出现的频率,将频率最高的字节合并成新的子词并更新初始词表,直到所述初始词表大小达到期望或者剩下字节出现的频率最高为1,得到更新后词表;
将更新后词表所输出的所有子词拼接,直到遇见结束符停止拼接,得到拼接后的子词,所述结束符对应为每个单词后所加的结束符;
将所述格式后的数据集的代码生成抽象语法树,利用拼接后的子词作为词表中的子词参与到所述transformer深度神经网络模型对源代码的预测结果输出。
3.根据权利要求2所述的编程学习场景的智能代码补全方法,其特征在于,在每个子树中节点的隐藏状态表达式中,若当前节点
Figure QLYQS_28
为叶节点,则
Figure QLYQS_29
=/>
Figure QLYQS_30
4.根据权利要求3所述的编程学习场景的智能代码补全方法,其特征在于,在基于树的第二递推神经网络编码所述后代树中,若当前孩子节点
Figure QLYQS_31
为叶节点,则
Figure QLYQS_32
5.根据权利要求4所述的编程学习场景的智能代码补全方法,其特征在于,在步骤S3:将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式中,所述后代树转化为向量形式具体公式如下:
Figure QLYQS_33
其中,
Figure QLYQS_34
表示将所有子树/>
Figure QLYQS_35
嵌入后得到的聚合向量,/>
Figure QLYQS_36
表示最大池化,/>
Figure QLYQS_37
表示子树/>
Figure QLYQS_38
中的节点集,/>
Figure QLYQS_39
表示该子树所有节点的隐藏状态。
6.根据权利要求1所述的编程学习场景的智能代码补全方法,其特征在于,所述transformer深度神经网络模型中的多头注意力机制的构建公式如下:
Figure QLYQS_40
Figure QLYQS_41
其中,
Figure QLYQS_42
为查询向量,/>
Figure QLYQS_46
为接收查找向量,/>
Figure QLYQS_48
为查询到的内容向量,/>
Figure QLYQS_44
、/>
Figure QLYQS_45
、/>
Figure QLYQS_47
分别对应QKV的可学习权重矩阵,/>
Figure QLYQS_49
表示可学习权重矩阵,/>
Figure QLYQS_43
用于确定重要单词,产生大小为n×n的矩阵,其中n是输入序列的长度。
7.根据权利要求2所述的编程学习场景的智能代码补全方法,其特征在于,在将源代码输入到已训练完成的transformer深度神经网络模型中之前,对源代码进行预处理,预处理过程如下:
将所述拼接后的子词作为词表中的子词,并将所述词表中所有子词按照长度从大到小进行排序,得到排序后词表;
将源代码拆分源单词,并将所有源单词拆分成子字符串,将子字符串与排序后词表进行遍历匹配;
若所述子字符串与所述排序后词表中的子词匹配,则输出当前子词,并对剩下的字符串继续匹配;
若遍历所述排序后词表结束后,部分子字符串与所述排序后词表中的子词未匹配,则输出标记符。
8.一种编程学习场景的智能代码补全系统,其特征在于,将源代码输入到已训练完成的transformer深度神经网络模型中以输出源代码补全后的预测结果,所述transformer深度神经网络模型的训练具体包括数据集构建模块、第一编码模块、第二编码模块、输入模块、第一推荐模块和第二推荐模块;
所述数据集构建模块用于构建数据集,并对所述数据集进行预处理生成抽象语法树;
所述第一编码模块用于遍历所述抽象语法树并在复合结构处插入占位符节点,将所述占位符节点的语句子树拆分出来形成单独的子树,利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态;
所述第二编码模块用于将所有节点的隐藏状态通过最大池化操作聚合得到后代树,基于树的第二递推神经网络编码所述后代树,将所述后代树转化为向量形式;
所述输入模块用于将向量形式后代树输入到已构建好的transformer深度神经网络模型中,输出数据集代码补全后的预测结果;
所述第一推荐模块用于在用户未反馈模式下,基于贪心算法推荐预测结果;
所述第二推荐模块用于在用户反馈模式下,基于其他用户的选择辅助推荐所述预测结果;
所述利用树的第一递推神经网络编码所述子树,得到每个子树中节点的隐藏状态中,所述每个子树中节点的隐藏状态采用如下公式表示:
Figure QLYQS_50
其中,
Figure QLYQS_52
是子树的节点隐藏状态,/>
Figure QLYQS_55
和/>
Figure QLYQS_59
是可学习的权重矩阵,/>
Figure QLYQS_54
是子词嵌入得到的向量,/>
Figure QLYQS_57
是节点/>
Figure QLYQS_60
的所有孩子节点集合,/>
Figure QLYQS_62
表示双曲正切函数,/>
Figure QLYQS_51
表示节点/>
Figure QLYQS_56
的其中一个孩子节点,/>
Figure QLYQS_58
表示节点/>
Figure QLYQS_61
的其中一个孩子节点/>
Figure QLYQS_53
的隐藏状态;
所述基于树的第二递推神经网络编码所述后代树具体为:
Figure QLYQS_63
其中,
Figure QLYQS_65
表示后代树节点/>
Figure QLYQS_70
的隐藏状态,/>
Figure QLYQS_73
和/>
Figure QLYQS_66
表示可学习的权重矩阵,/>
Figure QLYQS_68
表示后代树节点/>
Figure QLYQS_74
的所有孩子节点集合,/>
Figure QLYQS_76
表示后代树节点/>
Figure QLYQS_64
的其中一个孩子节点,/>
Figure QLYQS_69
表示/>
Figure QLYQS_71
这个孩子节点的隐藏状态,/>
Figure QLYQS_75
表示双曲正切函数,/>
Figure QLYQS_67
表示将所有子树/>
Figure QLYQS_72
嵌入后得到的聚合向量。
9.一种计算机储存介质,其特征在于,所述计算机储存介质上存储有若干分类程序,所述若干分类程序用于被处理器调用并执行如权利要求1至7任一所述的智能代码补全方法。
CN202310421313.3A 2023-04-19 2023-04-19 一种编程学习场景的智能代码补全方法、系统及储存介质 Active CN116151132B (zh)

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 true CN116151132A (zh) 2023-05-23
CN116151132B 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)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561299A (zh) * 2023-07-10 2023-08-08 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN117422114A (zh) * 2023-12-19 2024-01-19 电子科技大学(深圳)高等研究院 Ai加速器的优化方法及ai加速器
CN117573096A (zh) * 2024-01-17 2024-02-20 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种融合抽象语法树结构信息的智能代码补全方法
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388425A (zh) * 2018-03-20 2018-08-10 北京大学 一种基于lstm自动补全代码的方法
US20200249918A1 (en) * 2019-02-02 2020-08-06 Microsoft Technology Licensing, Llc. Deep learning enhanced code completion system
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 南京航空航天大学 一种基于结构特征和序列特征的代码补全方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388425A (zh) * 2018-03-20 2018-08-10 北京大学 一种基于lstm自动补全代码的方法
US20200249918A1 (en) * 2019-02-02 2020-08-06 Microsoft Technology Licensing, Llc. Deep learning enhanced code completion system
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 南京航空航天大学 一种基于结构特征和序列特征的代码补全方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116561299A (zh) * 2023-07-10 2023-08-08 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN116561299B (zh) * 2023-07-10 2023-10-20 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 代码摘要生成方法、装置、设备及存储介质
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法
CN117573084B (zh) * 2023-08-02 2024-04-12 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法
CN117422114A (zh) * 2023-12-19 2024-01-19 电子科技大学(深圳)高等研究院 Ai加速器的优化方法及ai加速器
CN117422114B (zh) * 2023-12-19 2024-04-09 电子科技大学(深圳)高等研究院 Ai加速器的优化方法及ai加速器
CN117573096A (zh) * 2024-01-17 2024-02-20 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种融合抽象语法树结构信息的智能代码补全方法
CN117573096B (zh) * 2024-01-17 2024-04-09 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种融合抽象语法树结构信息的智能代码补全方法

Also Published As

Publication number Publication date
CN116151132B (zh) 2023-07-18

Similar Documents

Publication Publication Date Title
CN116151132B (zh) 一种编程学习场景的智能代码补全方法、系统及储存介质
CN111694924B (zh) 一种事件抽取方法和系统
Jung Semantic vector learning for natural language understanding
CN109918666B (zh) 一种基于神经网络的中文标点符号添加方法
JP5128629B2 (ja) 品詞タグ付けシステム、品詞タグ付けモデルのトレーニング装置および方法
CN112507065B (zh) 一种基于注释语义信息的代码搜索方法
CN110532353B (zh) 基于深度学习的文本实体匹配方法、系统、装置
US7035789B2 (en) Supervised automatic text generation based on word classes for language modeling
CN111444320A (zh) 文本检索方法、装置、计算机设备和存储介质
CN112183094B (zh) 一种基于多元文本特征的中文语法查错方法及系统
WO2023005293A1 (zh) 文本纠错方法、装置、设备及存储介质
CN113076739A (zh) 一种实现跨领域的中文文本纠错方法和系统
Moeng et al. Canonical and surface morphological segmentation for nguni languages
CN111709225B (zh) 一种事件因果关系判别方法、装置和计算机可读存储介质
CN117321565A (zh) 包括空洞建议的代码完成
CN117390189A (zh) 基于前置分类器的中立文本生成方法
CN113705222B (zh) 槽识别模型训练方法及装置和槽填充方法及装置
CN116127013A (zh) 一种个人敏感信息知识图谱查询方法和装置
CN115879669A (zh) 一种评论评分的预测方法、装置、电子设备及存储介质
CN112966501B (zh) 一种新词发现方法、系统、终端及介质
CN115203236A (zh) 基于模板检索的文本到sql生成方法
CN112528674B (zh) 文本处理方法、模型的训练方法、装置、设备及存储介质
CN113901813A (zh) 一种基于主题特征和隐式句子结构的事件抽取方法
CN112446206A (zh) 一种菜谱标题的生成方法及装置
Hertel Neural language models for spelling correction

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