CN118276913B - 一种基于人工智能的代码补全方法 - Google Patents
一种基于人工智能的代码补全方法 Download PDFInfo
- Publication number
- CN118276913B CN118276913B CN202410699751.0A CN202410699751A CN118276913B CN 118276913 B CN118276913 B CN 118276913B CN 202410699751 A CN202410699751 A CN 202410699751A CN 118276913 B CN118276913 B CN 118276913B
- Authority
- CN
- China
- Prior art keywords
- code
- vector
- complement
- model
- context
- 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 37
- 238000013473 artificial intelligence Methods 0.000 title claims abstract description 24
- 239000013598 vector Substances 0.000 claims abstract description 97
- 230000000295 complement effect Effects 0.000 claims abstract description 77
- 238000013528 artificial neural network Methods 0.000 claims abstract description 28
- 238000004458 analytical method Methods 0.000 claims abstract description 21
- 238000012545 processing Methods 0.000 claims abstract description 7
- 230000014509 gene expression Effects 0.000 claims description 24
- 238000004364 calculation method Methods 0.000 claims description 20
- 230000007246 mechanism Effects 0.000 claims description 12
- 239000002131 composite material Substances 0.000 claims description 7
- 238000013135 deep learning Methods 0.000 claims description 7
- 238000009826 distribution Methods 0.000 claims description 6
- 238000012549 training Methods 0.000 claims description 6
- 238000007781 pre-processing Methods 0.000 claims description 5
- 230000003068 static effect Effects 0.000 claims description 5
- 238000011156 evaluation Methods 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 4
- 238000000605 extraction Methods 0.000 claims description 3
- 238000005206 flow analysis Methods 0.000 claims description 3
- 238000013507 mapping Methods 0.000 claims description 3
- 239000011159 matrix material Substances 0.000 claims description 3
- 230000000306 recurrent effect Effects 0.000 claims description 3
- 238000012216 screening Methods 0.000 claims description 3
- 230000009466 transformation Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000001914 filtration Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000003066 decision tree Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
- 238000012706 support-vector machine Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
- G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
- G06N3/0455—Auto-encoder networks; Encoder-decoder networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种基于人工智能的代码补全方法,涉及代码补全技术领域,包括,收集目标代码片段所在项目的语境信息,将所述语境信息转化为语境向量,利用神经网络架构的编码器对所述语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量;利用所述嵌入数值向量和起始标记点位置信息,通过驱动代码补全预测模型生成补全候选集合;通过对所述补全候选集合中的每个候选补全结果进行多维度的语义分析,生成语义评分数组。本发明不仅考虑了代码的局部上下文,还综合了整个项目的全局语境,使得补全建议更能符合实际编程需求和代码规范。
Description
技术领域
本发明涉及代码补全技术领域,特别是一种基于人工智能的代码补全方法。
背景技术
随着计算机科学与人工智能技术的快速发展,智能代码补全作为一项重要的人机交互与自动化编程技术,在提升软件开发效率、降低编程错误率等方面的作用日益凸显。早期的代码补全技术主要基于规则引擎和统计模型,如n-gram模型,利用历史代码片段的频次统计和简单的语法结构进行补全预测。随着机器学习技术的应用,特别是浅层学习算法如决策树、支持向量机等在代码补全任务中的实践,部分实现了对代码结构和类型的识别,但仍受制于模型对上下文语义理解的局限性,往往只能提供较为基础且缺乏语义一致性的补全建议。
然而,现有技术在处理复杂编程场景时暴露出一些明显的不足。一方面,传统的代码补全方法大多忽视了上下文语义信息,无法全面理解代码的实际意图和业务逻辑,导致补全结果有时与实际需求脱节,补全准确率有待提高。另一方面,由于未能充分结合项目全局语境,如项目结构、依赖库和编程语言特性等因素,补全建议在个性化和精准度方面存在欠缺。此外,现有方法普遍未实现对补全结果的多维度评估,仅仅依赖单一的字符匹配度或代码频率统计,忽略了诸如语法正确性、语义连贯性、领域相关性等多元语义维度的考量,这无疑限制了补全建议的质量和用户体验。
发明内容
鉴于上述现有存在的问题,提出了本发明。
为解决上述技术问题,本发明提供如下技术方案:
第一方面,本发明实施例提供了一种基于人工智能的代码补全方法,其包括,收集目标代码片段所在项目的语境信息,将所述语境信息转化为语境向量,利用神经网络架构的编码器对所述语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量;利用所述嵌入数值向量和起始标记点位置信息,通过驱动代码补全预测模型生成补全候选集合;通过对所述补全候选集合中的每个候选补全结果进行多维度的语义分析,生成语义评分数组;利用所述语义评分数组对所述补全候选集合进行排序,并选择最佳补全结果,输出最优代码补全建议给用户。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中:所述语境信息包括编辑文件的内容、相关依赖库、项目结构、编程语言特性和项目内的关联代码。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中:将所述语境信息转化为语境向量包含如下步骤:
使用预训练的词嵌入模型将代码片段中的词汇转换为低维向量,表达式为:
其中,是词汇表中的第t个词,E是词嵌入模型,是对应的词向量;
应用树形神经网络Tree-LSTM对AST进行编码,得到表示代码结构信息的向量,表达式为:
其中,n是AST中的节点,n1,n2,……nk是其子节点,hn是节点n的结构向量,是子节点的隐藏状态,是节点n的特征向量,TreeLSTM是树形递归神经网络的计算单元;
使用静态代码分析工具对代码进行扫描,提取变量类型信息,选择预训练类型嵌入模型对变量类型进行编码;表达式为:
其中是变量类型的特征向量,是变量的实际类型标识符;
构建控制流图并对其中的循环头、条件判断点赋予编号,统计各类控制结构的数量,将这些统计数值通过嵌入层映射至高维空间:
其中,是一个预定义的神经网络层,将离散的统计特征转化为连续的特征向量,count_loop表示源代码中循环结构的总数,count_branch表示是源代码中条件分支的数量;
对代码进行数据流分析以建立变量依赖图,然后应用图神经网络来编码依赖关系:
其中,是由节点、依赖关系构成的邻接矩阵,是对这个图结构进行卷积运算,输出整个依赖关系图的语法结构编码向量;
将提取到的各个高级特征编码整合成一个统一的高级特征向量:
其中,操作将不同类型特征向量拼接在一起形成完整的高级特征编码;
将词汇编码、语法结构编码向量和高级特征向量按一定方式拼接整合为一个统一的向量表示公式:
其中,Vc是整合后的语境向量。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中:利用神经网络架构的编码器对所述语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量,其步骤为:
使用专为代码语义理解预训练的神经网络编码器模型,首先载入模型所需的参数和配置设定;
对语境向量Vc进行截断预处理以适应编码器模型的输入要求,添加位置编码PE以保留序列中元素的位置信息,表达式为:;
将预处理后的语境向量输入到编码器模型中,进行深度学习特征提取和语义编码;
对于目标代码片段,取其对应位置在编码器最后一层输出的隐藏状态向量作为上下文嵌入向量。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中将预处理后的向量输入到编码器模型中,进行深度学习特征提取和语义编码的步骤为,
通过多头自注意力机制计算公式进行h次计算,得到h个输出,然后拼接并经过一个线性变换得到最终的自注意力输出:
将输入前馈神经网络机制计算公式得到重要的特征;
每个编码器块完成多头自注意力机制计算和前馈神经网络机制计算后,其输出会被传递给下一个编码器块作为输入形成了链式处理结构,逐层对输入序列进行语义编码,直到达到模型的最后一层;
编码器模型内部包含多层Transformer块,每个块由多头自注意力和前馈神经网络组成。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中:所述通过驱动代码补全预测模型生成补全候选集合,具体步骤为:
将生成的嵌入数值向量C与起始标记点位置信息组合成模型,输入补全请求结构;
加载一个预训练的代码补全模型,将封装好的补全请求输入到预训练的代码补全模型中,进行前向传播计算并形成补全后的预测模型;
将补全后的预测模型输出为一系列概率分布;
根据模型输出的概率、代码语法规则、代码风格一致性等因素,对初步候选集进行筛选和排序;
将排序后的补全候选集合以下拉列表和气泡提示的形式在IDE中呈现给开发者。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中所述多维度的语义分析具体步骤为:
对评价补全结果进行多语义维度分析和设计相应的评分模型,分析内容包括语法正确性、词汇恰当性、句法连贯性,评分模型包括语法正确性模型、词汇恰当性模型和句法连贯性模型;
所述生成语义评分数组具体步骤为:
通过评分模型逐一进行每个候选补全结果的所述多维度的语义分析,得到该候选补全结果在各个维度上的评分,将这些评分组合成一个数组,即为该候选补全结果的语义评分数组。
作为本发明所述基于人工智能的代码补全方法的一种优选方案,其中:所述利用所述语义评分数组对所述补全候选集合进行排序的具体步骤为:
为每个语义评分数组赋予相应的权重向量,权重向量表达式为:
其中wd为第d个语义维度的权重,0<wd≤1且;
为每个候选补全计算加权综合得分,作为排序依据,综合得分计算表达式如下:
其中,为第i个候选补全的加权综合得分,为第i个候选补全在第d个语义维度上的得分;
根据加权综合得分对候选补全集合进行降序排序,排序后的候选补全集合记为,其中为排序后的第N个候选补全,且;
选择排序后的首位补全结果作为最佳补全结果。
第二方面,本发明实施例提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其中:所述计算机程序被处理器执行时实现如本发明第一方面所述的基于人工智能的代码补全方法的任一步骤。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其中:所述计算机程序被处理器执行时实现如本发明第一方面所述的基于人工智能的代码补全方法的任一步骤。
本发明有益效果为:本发明通过整合多种语境信息并运用先进的深度学习技术,极大地提升了代码补全建议的准确性和适用性,它不仅考虑了代码的局部上下文,还综合了整个项目的全局语境,使得补全建议更能符合实际编程需求和代码规范,此外,通过多维度语义分析和灵活的权重调整,能够适应不同开发者和项目特点,提供更加个性化和高质量的代码补全服务,这一方法不仅可以降低程序员的工作负担,提高编程效率,还能促进代码质量的一致性和可维护性,最后,通过优化的数据处理和模型设计,有效解决了传统方法在处理离散数据时面临的复杂性和泛化能力不足的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为实施例1中基于人工智能的代码补全方法的流程图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
实施例1
参照图1,为本发明第一个实施例,该实施例提供了一种基于人工智能的代码补全方法,包括以下步骤:
S1、收集目标代码片段所在项目的语境信息,将语境信息转化为语境向量,利用神经网络架构的编码器对语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量。
语境信息包括编辑文件的内容、相关依赖库、项目结构、编程语言特性和项目内的关联代码。
将语境信息转化为语境向量包含如下步骤:
使用预训练的词嵌入模型将代码片段中的词汇转换为低维向量,表达式为:
其中,是词汇表中的第t个词,E是词嵌入模型,是对应的词向量;
应用树形神经网络Tree-LSTM对AST进行编码,得到表示代码结构信息的结构向量,表达式为:
其中,n是AST中的节点,n1,n2,……nk是其子节点,hn是节点n的结构向量,是子节点的隐藏状态,是节点n的特征向量,TreeLSTM是树形递归神经网络的计算单元;
使用静态代码分析工具对代码进行扫描,提取变量类型信息,选择预训练类型嵌入模型对变量类型进行编码;表达式为:
其中,是变量类型的特征向量,是变量的实际类型标识符;
构建控制流图并对其中的循环头、条件判断点赋予编号,统计各类控制结构的数量,将这些统计数值通过嵌入层映射至高维空间:
其中,是一个预定义的神经网络层,将离散的统计特征转化为连续的特征向量,count_loop表示源代码中循环结构的总数,包括但不限于for循环、while循环等所有类型的循环结构,循环次数反映了代码在执行过程中经历的迭代和重复执行的复杂度,count_branch表示是源代码中条件分支的数量,包括if...else结构、switch语句以及其他形式的条件跳转指令,条件分支数体现了程序逻辑的复杂性,即代码中有多少个基于不同条件而选择执行不同路径的部分;
对代码进行数据流分析以建立变量依赖图,然后应用图神经网络来编码依赖关系:
其中,是由节点、依赖关系构成的邻接矩阵,是对这个图结构进行卷积运算,输出整个依赖关系图的语法结构编码向量;
将提取到的各个高级特征编码整合成一个统一的高级特征向量:
其中,操作将不同类型特征向量拼接在一起形成完整的高级特征编码;
将词向量、语法结构编码向量和高级特征向量按一定方式拼接整合为一个统一的语境向量表示公式:
其中,Vc是整合后的语境向量。
利用神经网络架构的编码器对语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量,其步骤为:
使用专为代码语义理解预训练的神经网络编码器模型,首先载入模型所需的参数和配置设定;
对整合后的向量Vc进行必要的截断预处理以适应编码器模型的输入要求,添加位置编码PE以保留序列中元素的位置信息,表达式为:;
将预处理后的语境向量输入到编码器模型中,进行深度学习特征提取和语义编码,步骤为,
通过多头自注意力机制计算公式进行h次计算,得到h个输出,然后拼接并经过一个线性变换得到最终的自注意力输出:
将输入前馈神经网络机制计算公式得到重要的特征;
每个编码器块完成上述多头自注意力机制计算和前馈神经网络机制计算后,其输出会被传递给下一个编码器块作为输入形成了链式处理结构,逐层对输入序列进行语义编码,直到达到模型的最后一层;
编码器模型内部包含多层Transformer块,每个块由多头自注意力和前馈神经网络组成。
S2、利用嵌入数值向量和起始标记点位置信息,通过驱动代码补全预测模型生成补全候选集合。
通过驱动代码补全预测模型生成补全候选集合,具体步骤为:
将生成的嵌入数值向量C与起始标记点位置信息组合成模型,输入补全请求结构;起始标记点位置信息指的是指在待补全的代码片段中,用于标识代码补全任务开始位置的具体坐标或索引。
加载一个预训练的代码补全模型,将封装好的补全请求输入到预训练的代码补全模型中,进行前向传播计算并形成补全后的预测模型;
将补全后的预测模型输出为一系列概率分布;
根据模型输出的概率、代码语法规则、代码风格一致性等因素,对初步候选集进行筛选和排序;
将排序后的补全候选集合以下拉列表和气泡提示的形式在IDE中呈现给开发者。
S3、通过补全候选集合对每个候选补全结果进行多维度的语义分析,生成语义评分数组;
多维度的语义分析具体步骤为:
对评价补全结果进行多语义维度分析和设计相应的评分模型,分析内容包括语法正确性、词汇恰当性、句法连贯性,评分模型包括语法正确性模型、词汇恰当性模型和句法连贯性模型。
语法正确性模型:
利用词法分析器、句法解析器等工具检测候选补全中的语法错误,统计错误数量或类型,转化为分数,训练语法错误检测模型,输入候选补全,输出语法错误概率分布,转换为得分,表达式为:
其中,为候选补全片段的语法正确性得分,表示第t个词汇单位,L为词汇单位总数,是一个基于词法分析器的权重函数,衡量词汇单位对整体语法正确性的影响,是基于历史数据集训练的语法错误检测模型预测的词汇单位出现语法错误的概率,表示整个候选补全片段的累积错误可能性,对N个语法结构(如抽象语法树AST)的结构正确性评分之和,其中和分别代表对第i个抽象语法树和依存句法树的结构评分函数,是一组表示各类语法错误出现情况的向量,而是一个归一化的复杂信息过滤函数,将各种错误类型转化为统一尺度上的分数,是错误的严重程度向量,是一个指数函数,用来放大严重错误对总评分的影响。
的值域通常在[-1, 1] 区间内,接近1时,表示候选补全片段的语法正确性极高,几乎无明显语法错误;接近-1,则意味着候选补全片段存在较多或较严重的语法错误。
其中,w是被分析的词汇单元,(w)是词汇单元的权重,Vocabulary是所有可能词汇的集合。
其中,AST是抽象语法树,是树中的一个节点,是依据节点类型、位置等特性计算出的节点权重,是节点的深度。
其中,是依存句法树,是树中的一条边,是基于边所代表的依存关系类型及其在语义上的重要性计算出的权重,是边连接的两个节点间的距离。
其中,是一组特征向量或错误信息集合,是中的一个元素,是根据具体信息过滤策略计算出来的单个元素的得分或权重。
词汇恰当性模型:
计算候选补全中词汇与上下文词汇的词嵌入向量之间的余弦相似度,取平均值作为得分,根据词汇在特定语料库中的出现频率、分布情况评估其恰当性,表达式为:
其中:Svocab为整体词汇恰当性得分,表示候选补全片段中的第i个词汇的词嵌入向量,为与第i个词汇在上下文环境中的最近邻词汇的词嵌入向量,是计算两者之间的余弦相似度,反映词汇与上下文环境的相关性,n为候选补全片段中词汇的数量,m为统计特征的维度,和分别为调整各项贡献权重的系数,可根据实际应用场景设定,是一个复杂的信息过滤函数,它通过汇总候选补全片段中所有词汇的部分特征(例如,词频、上下位关系等)来表征整体结构的质量,是一个归一化指数函数,根据候选补全片段中词汇异常性或偏离常规编程习惯的程度对其适当性进行惩罚,其中表示候选补全词汇集合的总体异常性指标。
其中,是词汇在编程相关的大型语料库中出现的次数,是整个编程语料库的总词汇数,用于对频率进行标准化。
其中,是不同的编程上下文类别集合,是在给定上下文类别c下词汇出现的概率,这可以通过统计学习模型估计得出。
其中,是要考虑的词汇特征向量,是词汇的词频信息,可以表示为:
是词汇上下位关系的量化指标,可以根据知识图谱中的连接强度或者其他方式计算,和是权重参数,决定词频和上下位关系的重要性。
是候选补全词汇集合的总体异常性指标,可以是某个复杂度量或评分系统的输出,是控制函数曲线陡峭程度的斜率参数。
Svocab的值域通常在[−1,1]范围内,接近1时,表示候选补全词汇与上下文高度吻合,且在实际编程语境中常见且合理,接近−1,则意味着候选补全词汇与上下文不符,或者在编程语境中非常见或不合理。
句法连贯性模型:
对比候选补全与原文在依存句法树上的节点匹配程度,计算编辑距离,使用预训练语言模型计算候选补全与原文在特定位置的条件概率,作为句法连贯性得分,表达式为,
其中,为句法连贯性得分,和分别代表原文和候选补全的依存句法树,表示两棵树之间的结构差异度量,可以采用某种适应依存句法树特性的编辑距离或最小生成树距离,表示原文上下文,表示候选补全部分是预训练语言模型(如BERT或Transformer-based模型)对于候选补全在给定原文上下文条件下的概率估计,表示所有可能的依存句法树集合,表示原文上下文在任意依存句法树下的概率估计,α和β是调节结构差异度量和语言模型影响权重的正则化参数,可根据实际情况调整优化。
应用sigmoid函数进行归一化,表达式为:
是一个正的缩放参数,用于调整sigmoid曲线的斜率和范围,使得经过变换后的值域落在[-1, 1]内,接近1时,表示候选补全在句法结构和语义上的连贯性非常好;反之,则表示连贯性极差。
生成语义评分数组具体步骤为:
通过评分模型逐一进行每个候选补全结果的多维度的语义分析,得到该候选在各个维度上的评分,将这些评分组合成一个数组,即为该候选补全的语义评分数组。
S4、利用语义评分数组对补全候选集合进行排序,并选择最佳补全结果,输出最优代码补全建议给用户。
利用语义评分数组对补全候选集合进行排序的具体步骤为:
为每个语义评分数组赋予相应的权重向量,权重向量表达式为:
其中wd为第d个语义维度的权重,0<wd≤1且;
为每个候选补全计算加权综合得分,作为排序依据,综合得分计算表达式如下:
其中,Scorei为第i个候选补全的加权综合得分,Si,d为第i个候选补全在第d个语义维度上的得分。
根据加权综合得分对候选补全集合进行降序排序,排序后的候选补全集合记为,其中Ci′为排序后的第i个候选补全,且。
选择排序后的首位补全结果作为最佳补全结果。
本实施例还提供一种计算机设备,适用于基于人工智能的代码补全方法的情况,包括:存储器和处理器;存储器用于存储计算机可执行指令,处理器用于执行计算机可执行指令,实现如上述实施例提出的基于人工智能的代码补全方法。
该计算机设备可以是终端,该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本实施例还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例提出的实现基于人工智能的代码补全方法;存储介质可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static RandomAccess Memory, 简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory, 简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red-Only Memory, 简称PROM),只读存储器(Read-Only Memory, 简称ROM),磁存储器,快闪存储器,磁盘或光盘。
本发明通过整合多种语境信息并运用先进的深度学习技术,极大地提升了代码补全建议的准确性和适用性,它不仅考虑了代码的局部上下文,还综合了整个项目的全局语境,使得补全建议更能符合实际编程需求和代码规范,此外,通过多维度语义分析和灵活的权重调整,能够适应不同开发者和项目特点,提供更加个性化和高质量的代码补全服务,这一方法不仅可以降低程序员的工作负担,提高编程效率,还能促进代码质量的一致性和可维护性,最后,通过优化的数据处理和模型设计,有效解决了传统方法在处理离散数据时面临的复杂性和泛化能力不足的问题。
应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (4)
1.一种基于人工智能的代码补全方法,其特征在于:包括:
收集目标代码片段所在项目的语境信息,将所述语境信息转化为语境向量,利用神经网络架构的编码器对所述语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量;
利用所述嵌入数值向量和起始标记点位置信息,通过驱动代码补全预测模型生成补全候选集合;
通过对所述补全候选集合中的每个候选补全结果进行多维度的语义分析,生成语义评分数组;
利用所述语义评分数组对所述补全候选集合进行排序,并选择最佳补全结果,输出最优代码补全建议给用户;
所述语境信息包括编辑文件的内容、相关依赖库、项目结构、编程语言特性和项目内的关联代码;
将所述语境信息转化为语境向量包含如下步骤:
使用预训练的词嵌入模型将代码片段中的词汇转换为低维向量,表达式为:
其中,是词汇表中的第t个词,E是词嵌入模型,是对应的词向量;
应用树形神经网络Tree-LSTM对AST进行编码,得到表示代码结构信息的结构向量,表达式为:
其中,n是AST中的节点,n1,n2,……nk是其子节点,hn是节点n的结构向量,是子节点的隐藏状态,是节点n的特征向量,TreeLSTM是树形递归神经网络的计算单元;
使用静态代码分析工具对代码进行扫描,提取变量类型信息,选择预训练类型嵌入模型对变量类型进行编码,表达式为:
其中,是变量类型的特征向量,是变量的实际类型标识符;
构建控制流图并对其中的循环头、条件判断点赋予编号,统计各类控制结构的数量,将这些统计数值通过嵌入层映射至高维空间:
其中,是一个预定义的神经网络层,将离散的统计特征转化为连续的特征向量,count_loop表示源代码中循环结构的总数,count_branch表示是源代码中条件分支的数量;
对代码进行数据流分析以建立变量依赖图,然后应用图神经网络来编码依赖关系:
其中,是由节点、依赖关系构成的邻接矩阵,是对这个图结构进行卷积运算,输出整个依赖关系图的语法结构编码向量;
将提取到的各个高级特征编码整合成一个统一的高级特征向量:
其中,操作将不同类型特征向量拼接在一起形成完整的高级特征编码;
将词向量、语法结构编码向量和高级特征向量,拼接整合为一个统一的语境向量表示公式:
其中,Vc是整合后的语境向量;
所述多维度的语义分析具体步骤为:
对评价补全结果进行多语义维度分析和设计相应的评分模型,分析内容包括语法正确性、词汇恰当性、句法连贯性,评分模型包括语法正确性模型、词汇恰当性模型和句法连贯性模型;
所述生成语义评分数组具体步骤为:
通过评分模型逐一进行每个候选补全结果的所述多维度的语义分析,得到该候选补全结果在各个维度上的评分,将这些评分组合成一个数组,即为该候选补全结果的语义评分数组;
所述利用所述语义评分数组对所述补全候选集合进行排序的具体步骤为:
为每个语义评分数组赋予相应的权重向量,权重向量表达式为:
其中wd为第d个语义维度的权重,0<wd≤1且;
为每个候选补全结果计算加权综合得分,作为排序依据,综合得分计算表达式如下:
其中,为第i个候选补全的加权综合得分,为第i个候选补全在第d个语义维度上的得分;
根据加权综合得分对候选补全集合进行降序排序,排序后的候选补全集合记为,其中为排序后的第N个候选补全,且;
选择排序后的首位补全结果作为最佳补全结果。
2.如权利要求1所述的基于人工智能的代码补全方法,其特征在于:利用神经网络架构的编码器对所述语境向量进行处理,生成能够捕获上下文语义信息的嵌入数值向量,其步骤为:
使用专为代码语义理解预训练的神经网络编码器模型,首先载入模型所需的参数和配置设定;
对语境向量Vc进行截断预处理以适应编码器模型的输入要求,添加位置编码PE以保留序列中元素的位置信息,表达式为:
;
将预处理后的语境向量输入到编码器模型中,进行深度学习特征提取和语义编码;
对于目标代码片段,取其对应位置在编码器最后一层输出的隐藏状态向量作为上下文嵌入向量。
3.如权利要求2所述的基于人工智能的代码补全方法,其特征在于:将预处理后的向量输入到编码器模型中,进行深度学习特征提取和语义编码的步骤为,
通过多头自注意力机制计算公式进行h次计算,得到h个输出,然后拼接并经过一个线性变换得到最终的自注意力输出:
将输入前馈神经网络机制计算公式得到重要的特征;
每个编码器块完成多头自注意力机制计算和前馈神经网络机制计算后,其输出会被传递给下一个编码器块作为输入形成了链式处理结构,逐层对输入序列进行语义编码,直到达到模型的最后一层;
编码器模型内部包含多层Transformer块,每个块由多头自注意力和前馈神经网络组成。
4.如权利要求3所述的基于人工智能的代码补全方法,其特征在于:所述通过驱动代码补全预测模型生成补全候选集合,具体步骤为:
将生成的嵌入数值向量C与起始标记点位置信息组合成模型,输入补全请求结构;
加载一个预训练的代码补全模型,将封装好的补全请求输入到预训练的代码补全模型中,进行前向传播计算并形成补全后的预测模型;
将补全后的预测模型输出为一系列概率分布;
根据模型输出的概率、代码语法规则和代码风格一致性三个方面的因素,对初步候选集进行筛选和排序;
将排序后的补全候选集合以下拉列表和气泡提示的形式在IDE中呈现给开发者。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410699751.0A CN118276913B (zh) | 2024-05-31 | 2024-05-31 | 一种基于人工智能的代码补全方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410699751.0A CN118276913B (zh) | 2024-05-31 | 2024-05-31 | 一种基于人工智能的代码补全方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118276913A CN118276913A (zh) | 2024-07-02 |
CN118276913B true CN118276913B (zh) | 2024-07-26 |
Family
ID=91640400
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410699751.0A Active CN118276913B (zh) | 2024-05-31 | 2024-05-31 | 一种基于人工智能的代码补全方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118276913B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118626805B (zh) * | 2024-08-13 | 2024-10-18 | 竞跃数字科技(山东)有限公司 | 基于低代码平台的数据处理和分析系统及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108563433A (zh) * | 2018-03-20 | 2018-09-21 | 北京大学 | 一种基于lstm自动补全代码的装置 |
CN117573084A (zh) * | 2023-08-02 | 2024-02-20 | 广东工业大学 | 一种基于逐层融合抽象语法树的代码补全方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115291854A (zh) * | 2022-07-30 | 2022-11-04 | 华为技术有限公司 | 代码补全方法、装置及设备 |
CN117573096B (zh) * | 2024-01-17 | 2024-04-09 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种融合抽象语法树结构信息的智能代码补全方法 |
-
2024
- 2024-05-31 CN CN202410699751.0A patent/CN118276913B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108563433A (zh) * | 2018-03-20 | 2018-09-21 | 北京大学 | 一种基于lstm自动补全代码的装置 |
CN117573084A (zh) * | 2023-08-02 | 2024-02-20 | 广东工业大学 | 一种基于逐层融合抽象语法树的代码补全方法 |
Also Published As
Publication number | Publication date |
---|---|
CN118276913A (zh) | 2024-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506414B (zh) | 一种基于长短期记忆网络的代码推荐方法 | |
CN113064586B (zh) | 一种基于抽象语法树增广图模型的代码补全方法 | |
CN116594748B (zh) | 针对任务的模型定制处理方法、装置、设备和介质 | |
CN109376535A (zh) | 一种基于智能化符号执行的漏洞分析方法及系统 | |
CN118276913B (zh) | 一种基于人工智能的代码补全方法 | |
CN116719520B (zh) | 代码生成方法及装置 | |
US12061880B2 (en) | Systems and methods for generating code using language models trained on computer code | |
US20190228297A1 (en) | Artificial Intelligence Modelling Engine | |
CN116738959B (zh) | 一种基于人工智能的简历改写方法及系统 | |
CN118318222A (zh) | 使用序列到序列转换器的自动笔记本补全 | |
CN109902273A (zh) | 关键词生成模型的建模方法和装置 | |
FI20205460A1 (en) | Smart code editor for detecting and visualizing deviations | |
US20240281446A1 (en) | Enhanced searching using fine-tuned machine learning models | |
CN118295640A (zh) | 一种基于人工智能的软件开发管理方法 | |
CN117591913A (zh) | 基于改进的R-Transformer的语句级软件缺陷预测方法 | |
CN117873558A (zh) | 一种基于大小模型融合的自我承认技术债检测方法与装置 | |
CN111259673A (zh) | 一种基于反馈序列多任务学习的法律判决预测方法及系统 | |
CN116861913A (zh) | 基于gpt大模型的立场检测方法及相关设备 | |
CN115495085A (zh) | 一种基于深度学习细粒度代码模板的生成方法及装置 | |
US20220164659A1 (en) | Deep Learning Error Minimizing System for Real-Time Generation of Big Data Analysis Models for Mobile App Users and Controlling Method for the Same | |
CN111562943A (zh) | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 | |
CN118672594B (zh) | 一种软件缺陷预测方法及系统 | |
CN118195032B (zh) | 一种具备主动学习能力的大模型自动进化系统及方法 | |
CN118519681B (zh) | 一种基于深度强化学习的代码自动补全方法、系统及装置 | |
CN118246556B (zh) | 一种基于强化学习的类型推断方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |