CN117093196B - 一种基于知识图谱的编程语言生成方法及系统 - Google Patents

一种基于知识图谱的编程语言生成方法及系统 Download PDF

Info

Publication number
CN117093196B
CN117093196B CN202311127406.1A CN202311127406A CN117093196B CN 117093196 B CN117093196 B CN 117093196B CN 202311127406 A CN202311127406 A CN 202311127406A CN 117093196 B CN117093196 B CN 117093196B
Authority
CN
China
Prior art keywords
nodes
programming language
knowledge graph
node
point
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
Application number
CN202311127406.1A
Other languages
English (en)
Other versions
CN117093196A (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.)
Guangdong University of Technology
Original Assignee
Guangdong University of Technology
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 Guangdong University of Technology filed Critical Guangdong University of Technology
Priority to CN202311127406.1A priority Critical patent/CN117093196B/zh
Publication of CN117093196A publication Critical patent/CN117093196A/zh
Application granted granted Critical
Publication of CN117093196B publication Critical patent/CN117093196B/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/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/36Creation of semantic tools, e.g. ontology or thesauri
    • G06F16/367Ontology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • 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/427Parsing
    • 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
    • G06N3/0455Auto-encoder networks; Encoder-decoder networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/0895Weakly supervised learning, e.g. semi-supervised or self-supervised learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • 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)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Databases & Information Systems (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Animal Behavior & Ethology (AREA)
  • Machine Translation (AREA)

Abstract

本申请公开了一种基于知识图谱的编程语言生成方法及系统,所述生成方法包括:使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;基于所述训练集训练Transformer‑based模型,将自然语言输入训练好的Transformer‑based模型得到对应的编程语言。本申请通过构建一个软件知识图谱,将离散的代码知识联系起来,增强了数据集内样本间的关联,相对于传统方法,能更完整地学习到代码间的关联特征。

Description

一种基于知识图谱的编程语言生成方法及系统
技术领域
本申请属于知识图谱技术领域,具体涉及基于一种基于知识图谱的编程语言生成方法及系统。
背景技术
代码生成任务的内容是将输入的自然语言描述转化成代码,由于代码有着严格的语法,尽管都是以文字的形式展现的,它与自然语言有着很大的差别。最先开始,研究者将其当作一项翻译的序列到序列的任务。在当时,循环神经网络RNN被广泛地应用于解决序列问题,因此Mou等人使用它来完成这项任务。由于只是把代码当成一个普通的文字序列,这一类做法忽略了代码中的语法结构。Yin和Neubig等人因此开始寻求让模型生成一种动作序列,这种序列可以构建树结构的形式意义表示MR,这种表示可以转化为代码,这相对于将代码生成视为纯粹的翻译任务的方法,关注了更多的语法格式。他们紧接着发布了TRANX,一种通过提取抽象语法树AST的特征,利用神经网络生成抽象语法描述语言ASDL的动作序列,进一步转化为MR和代码的方法。后来有研究者基于他们的工作或思想,做出了更多的改进。Sun等人在神经网络的结构上进行了改进,先后将卷积神经网络CNN结合注意力机制部署到神经网络中,以获得更好的自然语言以及AST的特征,生成更正确的规则序列。Jiang等人则从获取AST结构信息的方法上进行了改进,他们改变了遍历AST节点的顺序,同时考虑当前节点的其它相邻节点,这也更丰富了AST的特征。上述这些方法尽管关注到了代码的语法结构,但是他们的神经网络捕获特征的能力仍然欠佳,此外,由于过于关注代码的结构信息,他们总是就代码的结构表示(例如AST)入手,仅仅考虑了这种结构信息,忽视了代码序列本身的信息。
随着及其强大的神经网络Transformer的出现,研究者争先恐后地将它部署到各种自然语言处理的文本序列任务中,并且这些方法展现出了良好的效果。后来,有人将其用于预训练-微调的框架,所谓预训练就是指让庞大的模型在十分庞大的数据中按特定的任务训练,使得模型在整体上先拥有一定的理解能力;所谓微调就是让已经拥有一定理解能力的模型在自己的任务(下游任务)上继续进行训练,调整模型参数以适应下游任务。基于以上思想,研究者们发布了一系列著名的通用的预训练大模型,例如GPT,BERT,T5和BART。研究者利用这些通用的预训练大模型,将其适配到代码生成任务中。Clement等人就将T5应用于代码生成,他们仍将代码生成视为文本到文本的序列生成任务,但由于T5模型本身的强大能力,其表现仍然不俗。Wang等人提出了CodeT5,这同样地使用了T5,他们通过引入标识符标记和预测两项预训练任务,进一步提高了T5的理解能力。上述这些方法的模型结构更大,更复杂,因此其捕获特征以及生成序列的能力也更强大,因此产生了更好的效果,然而,这些方法没有利用代码的结构信息,没有更多地利用代码的中间表示(例如AST,控制流图CFG等),仅是依赖极其巨大的模型结构来达成目的,这给接下来的改进留出了空间。
为了利用代码的更多信息,一种新的思想是通过检索获得其它的代码,并且通过这些代码的信息来辅助代码生成。这种思想可以追溯到Hayati等人的方法中,它们检索了相关代码的AST子树的动作序列来辅助自己语法动作序列的生成。在Poesia等人的方法中,他们为当前代码检索了相关一部分的代码,并学习它们的语法约束,并基于这种约束生成代码。Parvez等人则检索了代码,甚至是自然语言-代码对(NL-PL pairs),将它们拼接到一起来辅助代码生成。这些方法打开了人们的思路,注意到了样本之间相互的潜在的信息,但这些方法没有很好地利用多种相关代码的中间表示,并将设想它们的特征有效融合起来。
发明内容
针对上述问题,本申请提出了一种基于知识图谱的编程语言生成方法,方法包括:
S1、使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
S2、从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
S3、基于所述训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言。
可选的,所述S1中,所述使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于所述原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系。
可选的,所述使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,所述工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
可选的,所述使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系的具体过程包括:
步骤1.初始化:选择一个未被访问的数据点作为当前点,找到该点的邻域内的所有数据点;用TF-IDF来将NL节点中的nl属性文本编程TF-IDF向量,通过计算它们的相似度来判断距离;
步骤2.核心点判断:如果当前点的邻域内包含至少min_samples个数据点,则将当前点标记为核心点,并进一步扩展簇;
步骤3.簇扩展:从核心点出发,通过邻域内的密度可达关系,递归地将所有可达的数据点添加到当前簇中;所述可达关系是指两个数据点之间存在一条密度可达的路径,路径上的每个数据点的邻域内至少包含min_samples个数据点;
步骤4.噪声点判断:如果当前点不是核心点,但其邻域内存在核心点,说明当前点位于一个簇的边界上,将当前点标记为边界点;
重复步骤2至步骤4,直到所有数据点都被访问;
根据DBCSAN算法计算NL节点之间的距离,并进行簇的归类;
根据归类结果在知识图谱中建立不同NL节点间的文本相似关系。
可选的,所述S2中,所述约束关系具体包括:
从知识图谱库中找到拥有所述文本相似关系的所有NL-PL节点,将所述NL-PL节点划分为训练集、验证集和测试集;
所述训练集中每个NL节点的文本相似关系的NL节点只能在训练集中,不能出现在验证集与测试集中;
验证集与测试集的NL节点的文本相似的NL节点只能在训练集中,否则需要舍弃该相似关系。
可选的,所述S3中,基于所述训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言的具体过程包括:
采用6-layers Transformer Encoder作为编码器提取输入的NL和related code的特征,以及采用GAT来提取related AST的特征,其中related code和AST是指与输入的NL有相似关系的另一个NL节点对应的PL节点的code和AST;
对提取的特征进行交叉熵损失函数,得到特征相互趋近的模态特征;
利用Transformer编码器的结构进行特征融合,将related code和related AST的特征进行拼接,然后送入MLP中得到初步融合特征;
将所述初步融合特征送入Transformer解码器的交叉注意力层,将NL的特征送入Transformer解码器的自注意力层;
将自然语言输入解码器,解码器根据自然语言生成目标词,根据生成的所述目标词与特征表示计算相关性,推理出下一个词。
可选的,所述对提取的特征进行交叉熵损失函数,得到特征相互趋近的模态特征的具体包括:
对NL、related code、AST三者的特征之间两两计算交叉熵损失函数,其表达式如下:
其中,yi,c是样本i对应真实标签c的值,pi,c为是否为真实标签的概率;
将一种模态的特征作为样本,另一种模态的特征作为真实标签,计算两者模态之间的损失,将所述损失加入总损失中,在反向传播的时候根据所述损失更新相关模态参数,使得不同模态的特征相互趋近。
还包括一种基于知识图谱的编程语言生成系统,系统包括:预处理模块、节点处理模块和模型转换模块;
所述预处理模块用于使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
所述节点处理模块用于从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
所述模型转换模块用于基于所述训练集训练Transformer-based模型,用于将自然语言输入训练好的Transformer-based模型得到对应的编程语言。
可选的,所述使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于所述原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系。
可选的,所述使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,所述工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
与现有技术相比,本申请的有益效果为:
本申请通过利用Code-NL的双模态数据集,构建一个软件知识图谱,利用知识图谱获取每个样本的相关的代码及其中间表示,构成预处理后的数据集,并利用样本中的自然语言NL和其相关样本的token和AST,对基于Transformer的深度学习网络进行训练。针对传统的代码生成方法,本申请做了以下改进:
现有的用于代码生成任务的方法是直接基于已有的双模数据(NL-PL pairs)对模型进行训练,这些双峰数据样本之间含有丰富的联系,现有很多方法没有能够充分利用这一点。在本申请中,通过构建一个软件知识图谱,将离散的代码知识联系起来,增强了数据集内样本间的关联,相对于传统方法,能更完整地学习到代码间的关联特征;
现有的方法常单独利用代码的序列信息或结构信息来学习其特征,并且没有对这些特征进行足够的融合,由此学习到的特征不够全面。在本申请中,提取了与给定NL相关的NL对应的代码的token,AST的中间表示,且对k个知识图谱中与该NL相关的代码表示都做此操作,根据给定NL与每个相关NL之间的嵌入的余弦相似度,选出最高的NL对应的代码中间表示,获取对应代码的token和AST,并通过对比学习进行多模态融合,将不同的代码表示与NL融合成统一的特征,输入解码器进行预测,这样可以更好地学习代码本身以及关联代码的顺序以及结构特征。
附图说明
为了更清楚地说明本申请的技术方案,下面对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的方法步骤图;
图2为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的知识图谱PL节点及其属性图;
图3为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的知识图谱NL节点及其属性图;
图4为本申请实施例的一种基于知识图谱的编程语言生成方法及系统及系统经过DBSCAN密度聚类得到的知识图谱中的文本相似关系;
图5为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的Transformer-based pipeline中的Transformer的模型架构图;
图6为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的GAT的思想示意图;
图7为本申请实施例的一种基于知识图谱的编程语言生成方法及系统的Transformer-based pipeline架构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
实施例一:
在本实施例中,如图1所示,一种基于知识图谱的编程语言生成方法及系统,所述方法包括:
S1、使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
S1中,使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对PL节点中的编程语言进行解析,得到中间表示,使用Python字典对中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系。
使用Python工具包对PL节点中的编程语言进行解析,得到中间表示,使用Python字典对中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
更具体的,首先获取原始的数据集,采用Concode的java数据集,该数据集,里面包含了代码及其对应自然语言描述等多元的信息,能够帮助模型建立代码和自然语言之间的联系。其次,读取数据集的文件,获取到每个样本的NL以及PL的内容,在知识图谱数据库Neo4j中分别建立名为的NL和PL节点,以及它们之间对应的关系—related,表示该NL对应的是该PL,将NL和PL的内容分别添加到节点的属性中。然后,使用现有的python的javalang,ast,joern等工具包对代码进行解析,这些工具包会遍历代码的内容,根据代码的格式产生代码对应的中间表示(AST,CFG和ADG),以python字典的形式记录这些中间表示的节点以及边的内容,由于数据集有少量代码格式或内容不完整,可能会有无法解析的代码,因此仅将解析成功的代码的中间表示添加到对应PL节点的属性中,效果分别如图2和图3所示,在图2中,PL节点的code属性是数据集样本中代码,code_adg,code_ast和code_cfg属性则是以python字典的形式存储的代码的中间表示ADG,AST,CFG;在图3中,nl属性就是数据集样本中的自然语言NL。
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系的具体过程包括:
①初始化:选择一个未被访问的数据点作为当前点,找到该点的邻域内的所有数据点;用TF-IDF来将NL节点中的nl属性文本编程向量,通过计算它们的相似度来判断距离;
②核心点判断:如果当前点的邻域内包含至少min_samples个数据点,则将当前点标记为核心点,并进一步扩展该簇;
③簇扩展:从核心点出发,通过邻域内的密度可达关系,递归地将所有可达的数据点添加到当前簇中;所述可达关系是指两个数据点之间存在一条密度可达的路径,路径上的每个数据点的邻域内至少包含min_samples个数据点;
④噪声点判断:如果当前点不是核心点,但其邻域内存在核心点,说明当前点位于一个簇的边界上,将该点标记为边界点;
重复步骤②至步骤④,直到所有数据点都被访问;
通过以上算法,大规模的NL节点将根据它们各自之间由TF-IDF向量计算出的彼此的距离,将自身归类到各自的簇中,相似度足够高的NL节点将被归在一个簇中,在知识图谱中为它们之间建立文本相似的关系,如图4所示。
S2、从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
S2中,根据约束关系具体包括:
从知识图谱库中找到拥有文本相似关系的所有NL-PL节点,将NL-PL节点划分为训练集、验证集和测试集;
训练集中每个NL节点的文本相似关系的NL节点只能在训练集中,不能出现在验证集与测试集中;
验证集与测试集的NL节点的文本相似的NL节点只能在训练集中,否则需要舍弃该相似关系。
具体的,先找出知识图谱中拥有文本相似关系的所有NL-PL的节点,将它们进行划分为训练集,验证集和测试集,其中训练集中每个NL节点其文本相似关系的NL节点必须都是训练集的,不能在验证集和测试集中,而验证集和测试集的NL节点的文本相似的NL节点也必须在训练集中,否则要舍弃该相似关系。具体而言,为每个NL-PL节点对随机选出k个与NL节点有text_similar关系的NL-PL节点对,这些节点对只能来自于训练集,通过计算当前NL节点和这k个NL节点中nl属性的内容(即输入的自然语言)的嵌入的余弦相似度,选出相似度最高的那一个NL-PL对,提取这对的PL节点中的code_ast和code属性的内容,与当前的NL节点的nl属性的内容一起作为模型的输入。
S3、基于所述训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言,如图7所示。
将上述预处理好的数据用于训练Transformer-based的模型,所述Transformer-based的模型主要是是由以下部分构成的:6-layers nl编码器,6-layers related code编码器,AST编码器,基于对比学习的特征对齐,融合模块以及6-layers解码器。
在S3中,基于训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言的具体过程包括:
采用6-layers Transformer Encoder作为编码器提取输入的NL和related code的特征,以及采用GAT来提取related AST的特征,其中related code和AST是指与输入的NL有相似关系的另一个NL节点对应的PL节点的code和AST;
对提取的特征进行交叉熵损失函数,得到特征相互趋近的模态特征;
利用Transformer编码器的结构进行特征融合,将related code和related AST的特征进行拼接,然后送入MLP中得到初步融合特征;
将所述初步融合特征送入Transformer解码器的交叉注意力层,将NL的特征送入Transformer解码器的自注意力层;
将自然语言输入解码器,解码器根据自然语言生成目标词,根据生成的所述目标词与特征表示计算下一个词的概率分布,推理出下一个词。6-layers nl编码器,6-layersrelated code编码器,AST编码器是标准的Transformer的6层编码器,其结构如图5中左边的部分所示,主要组成部分包括自注意力机制和前馈神经网络。自注意力机制是Transformer编码器的核心。它允许模型在计算每个位置的编码时,同时考虑到序列中的所有其他位置。这使得模型能够捕捉不同位置之间的依赖关系,从而更好地理解上下文信息。自注意力机制分为查询(Query)、键(Key)和值(Value)三个部分,通过计算查询与键的相似度来权衡值的重要性,然后对值进行加权求和。自注意力机制可以同时进行多头计算,从而增强模型的表达能力;在每个位置上,Transformer编码器都包含一个前馈神经网络,它通过对特征进行非线性变换来丰富编码表示;"Add&Norm"是残差链接和层归一化,主要作用是确保模型在每一层的信息流动和变换过程中能够保持稳定性,避免训练过程中的不稳定性问题。这有助于提高模型的收敛速度和性能。而AST encoder采用的是GAT图注意力网络,该网络认为图中不同邻居节点对中心节点的影响是不一样的,且它想通过注意力自动地去学习这个权重参数,从而提升表征能力,GAT使用邻居和中心节点各自的特征属性来确定权重。图6中αij是指中心节点i和其邻居节点j的权重,h是节点的特征向量,它使用一个模型自己学习的共享的W向量来对原始特征向量做维度转换,然后将转换后的一对中心节点和邻居节点特征拼接起来送入softmax层进行归一化,即可获得αij,然后利用这些注意力权重,对当前中心节点的邻居节点的特征向量进行加权平均,以获得更新后的中心节点的特征向量。以上的编码器的作用是提取NL,related code和AST这三种输入的特征。
对输入的特征进行交叉熵损失函数,得到特征相互趋近的模态特征的具体包括:
对NL、related code、AST三者的特征之间两两计算交叉熵损失函数,其表达式如下:
其中,yi,c是样本i对应真实标签c的值,pi,c为是否为真实标签的概率;
将一种模态的特征作为样本,另一种模态的特征作为真实标签,计算两者模态之间的损失,将损失加入总损失中,在反向传播的时候根据损失更新相关模态参数,使得下次计算这两种模态的特征的时候它们的损失(差异)能缩小,这种思想可以归类为对比学习的思想,通过这种思想,可以让不同模态的特征相互趋近,从而达到对齐的目的,这样更有利于后面的特征融合。
将前面三个编码器的输出进行融合,其结构类似于Transformer的解码器,在图5中进行了展示,它由Add&Norm,Multi-head cross-attention,Multi-head attention和Feed Forward组成,其中Add&Norm和Feed Forward与Transformer编码器中的结构和功能类似,Multi-head attention的输入是NL的特征而不是原始的NL的嵌入,Multi-headcross-attention中的键(Key)和值(Value)两个部分均来自于related code和relatedast的特征的拼接,拼接后的特征被送入MLP中,MLP中包含了批归一化层,relu非线性变换层和线性层;MLP通过进行一系列非线性的变换,帮助模型从原始特征中提取出更高层次、更有用的特征表示。通过多个线性层的组合,MLP能够学习到更加复杂的特征变换,从而提高模型对特征的表示能力。查询(Query)则是来自Multi-head attention的输出,在该层没有对其采用掩码,目的是让模型根据NL的特征去计算其与全部related code和relatedast的特征的相关性,由此得出它们的总特征,基本实现特征融合;由此,可以让融合模块根据NL的特征,对经过MLP提炼后的related code和related ast组合特征进行进一步理解,生成融合特征。
6-layers decoder则是标准的Transformer的6层解码器,其结构展示在图5的右边,由Add&Norm,Multi-head cross-attention(上面的Multi-head attention),Multi-head attention和Feed Forward组成。其中Add&Norm和Feed Forward结构和功能与Transformer编码器类似,最下面的Multi-head attention的输入是target code,解码器层的自注意力会关注前面的目标词,确保生成当前位置的词时能够捕捉到前文的上下文信息。解码器的自注意力机制允许模型在生成每个词时考虑整个输入序列和已生成的目标序列,Multi-head cross-attention的键(Key)和值(Value)两个部分来自融合模块的输出,查询(Query)则是来自Multi-head attention的输出,目的是使模型根据当前已生成的target code去计算与融合后的特征的相关性,推理出下一个词。
训练后的Transformer-based模型即可用于将自然语言转换成代码。
实施例二
一种基于知识图谱的编程语言生成系统,系统包括:预处理模块、节点处理模块和模型转换模块;
预处理模块用于使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
节点处理模块用于从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
模型转换模块用于基于所述训练集训练Transformer-based模型,用于将自然语言输入训练好的Transformer-based模型得到对应的编程语言。
可选的,所述使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于所述原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系。
可选的,所述使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,所述工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
具体的,先找出知识图谱中拥有文本相似关系的所有NL-PL的节点,将它们进行划分为训练集,验证集和测试集,其中训练集中每个NL节点其文本相似关系的NL节点必须都是训练集的,不能在验证集和测试集中,而验证集和测试集的NL节点的文本相似的NL节点也必须在训练集中,否则要舍弃该相似关系。具体而言,为每个NL-PL节点对随机选出k个与NL节点有text_similar关系的NL-PL节点对,这些节点对只能来自于训练集,通过计算当前NL节点和这k个NL节点中nl属性的内容(即输入的自然语言)的嵌入的余弦相似度,选出相似度最高的那一个NL-PL对,提取这对的PL节点中的code_ast和code属性的内容,与当前的NL节点的nl属性的内容一起作为模型的输入。
实施例三
对Transformer模型输入描绘程序功能的自然语言(set the name of thislayout branch),训练完毕后的模型就根据的自然语言生成对应的代码,可以看到,预测的代码(pred下的一行代码)和标准答案(target下的一行代码)一致,从代码的内容上看,它也确实调用了_layoutBranch对象的setName方法,完成了自然语言的要求。
以上所述的实施例仅是对本申请优选方式进行的描述,并非对本申请的范围进行限定,在不脱离本申请设计精神的前提下,本领域普通技术人员对本申请的技术方案做出的各种变形和改进,均应落入本申请权利要求书确定的保护范围内。

Claims (6)

1.一种基于知识图谱的编程语言生成方法,其特征在于,所述生成方法包括:
S1、使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
S2、从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
S3、基于所述训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言;
所述S1中,所述使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于所述原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系;
所述使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系的具体过程包括:
步骤1.初始化:选择一个未被访问的数据点作为当前点,找到该数据点的邻域内的所有数据点;将NL节点中的nl属性文本变成TF-IDF向量,通过计算它们的相似度来判断距离;
步骤2.核心点判断:如果当前点的邻域内包含至少min_samples个数据点,则将当前点标记为核心点,并进一步扩展簇;
步骤3.簇扩展:从核心点出发,通过邻域内的密度可达关系,递归地将所有可达的数据点添加到当前簇中;所述可达关系是指两个数据点之间存在一条密度可达的路径,路径上的每个数据点的邻域内至少包含min_samples个数据点;
步骤4.噪声点判断:如果当前点不是核心点,但其邻域内存在核心点,说明当前点位于一个簇的边界上,将当前点标记为边界点;
重复步骤2至步骤4,直到所有数据点都被访问;
根据DBCSAN算法计算NL节点之间的距离,并进行簇的归类;
根据归类结果在知识图谱中建立不同NL节点间的文本相似关系;
所述S2中,所述约束关系具体包括:
从知识图谱库中找到拥有所述文本相似关系的所有NL-PL节点,将所述NL-PL节点划分为训练集、验证集和测试集;
所述训练集中每个NL节点的文本相似关系的NL节点只能在训练集中,不能出现在验证集与测试集中;
验证集与测试集的NL节点的文本相似的NL节点只能在训练集中,否则需要舍弃该相似关系。
2.根据权利要求1所述的基于知识图谱的编程语言生成方法,其特征在于:所述使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,所述工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
3.根据权利要求1所述的基于知识图谱的编程语言生成方法,其特征在于,所述S3中,基于所述训练集训练Transformer-based模型,将自然语言输入训练好的Transformer-based模型得到对应的编程语言的具体过程包括:
采用6-layers Transformer Encoder作为编码器提取输入的NL和related code的特征,以及采用GAT来提取related AST的特征,其中related code和related AST是指与输入的NL有相似关系的另一个NL节点对应的PL节点的code和AST;
对提取的特征进行交叉熵损失函数,得到特征相互趋近的模态特征;
利用Transformer解码器的结构进行特征融合,将related code和related AST的特征进行拼接,然后送入MLP中得到初步融合特征;
将所述初步融合特征送入Transformer解码器的交叉注意力层,将NL的特征送入Transformer解码器的自注意力层;
将自然语言输入解码器,解码器根据自然语言生成目标词,根据生成的所述目标词与特征表示计算下一个词的概率分布,推理出下一个词。
4.根据权利要求3所述的基于知识图谱的编程语言生成方法,其特征在于,所述对提取的特征进行交叉熵损失函数,得到特征相互趋近的模态特征的具体包括:
对NL、related code、related AST三者的特征之间两两计算交叉熵损失函数,其表达式如下:
其中,yi,c是样本i对应真实标签c的值,pi,c为是否为真实标签的概率;
将一种模态的特征作为样本,另一种模态的特征作为真实标签,计算两者模态之间的损失,将所述损失加入总损失中,在反向传播的时候根据所述损失更新相关模态参数,使得不同模态的特征相互趋近。
5.一种基于知识图谱的编程语言生成系统,其特征在于,系统包括:预处理模块、节点处理模块和模型转换模块;
所述预处理模块用于使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理;
所述节点处理模块用于从数据预处理后的数据集找出知识图谱中拥有文本相似关系的节点,根据约束关系从所述节点中选出训练集;
所述模型转换模块用于基于所述训练集训练Transformer-based模型,用于将自然语言输入训练好的Transformer-based模型得到对应的编程语言;
所述使用知识图谱对包含有自然语言与编程语言描述的原始数据集进行数据预处理的过程包括:
基于所述原始数据集建立编程语言与自然语言之间的联系,得到知识图谱库;
在知识图谱库中建立NL节点和PL节点,将节点内容添加到节点属性中;
使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录;
使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系;
所述使用DBCSAN算法在知识图谱中建立不同NL节点间的文本相似关系的具体过程包括:
初始化:选择一个未被访问的数据点作为当前点,找到该数据点的邻域内的所有数据点;将NL节点中的nl属性文本变成TF-IDF向量,通过计算它们的相似度来判断距离;
核心点判断:如果当前点的邻域内包含至少min_samples个数据点,则将当前点标记为核心点,并进一步扩展簇;
簇扩展:从核心点出发,通过邻域内的密度可达关系,递归地将所有可达的数据点添加到当前簇中;所述可达关系是指两个数据点之间存在一条密度可达的路径,路径上的每个数据点的邻域内至少包含min_samples个数据点;
噪声点判断:如果当前点不是核心点,但其邻域内存在核心点,说明当前点位于一个簇的边界上,将当前点标记为边界点;
按顺序重复执行核心点判断、簇扩展、噪声点判断的内容,直到所有数据点都被访问;
根据DBCSAN算法计算NL节点之间的距离,并进行簇的归类;
根据归类结果在知识图谱中建立不同NL节点间的文本相似关系;
所述约束关系具体包括:
从知识图谱库中找到拥有所述文本相似关系的所有NL-PL节点,将所述NL-PL节点划分为训练集、验证集和测试集;
所述训练集中每个NL节点的文本相似关系的NL节点只能在训练集中,不能出现在验证集与测试集中;
验证集与测试集的NL节点的文本相似的NL节点只能在训练集中,否则需要舍弃该相似关系。
6.根据权利要求5所述的基于知识图谱的编程语言生成系统,其特征在于,所述使用Python工具包对所述PL节点中的编程语言进行解析,得到中间表示,使用Python字典对所述中间表示的节点属性与边的内容保存和记录的具体过程包括:
使用Python的工具包对编程语言进行解析,所述工具包遍历编程语言的内容;
根据编程语言的格式产生编程语言对应的中间表示;
用python字典的形式记录中间表示的节点属性以及边的内容;
若在解析过程中,遇到格式、内容不完整,导致无法解析的代码,则仅将解析成功的代码的中间表示添加到对应PL节点的属性中。
CN202311127406.1A 2023-09-04 2023-09-04 一种基于知识图谱的编程语言生成方法及系统 Active CN117093196B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311127406.1A CN117093196B (zh) 2023-09-04 2023-09-04 一种基于知识图谱的编程语言生成方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311127406.1A CN117093196B (zh) 2023-09-04 2023-09-04 一种基于知识图谱的编程语言生成方法及系统

Publications (2)

Publication Number Publication Date
CN117093196A CN117093196A (zh) 2023-11-21
CN117093196B true CN117093196B (zh) 2024-03-01

Family

ID=88782781

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311127406.1A Active CN117093196B (zh) 2023-09-04 2023-09-04 一种基于知识图谱的编程语言生成方法及系统

Country Status (1)

Country Link
CN (1) CN117093196B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115202640A (zh) * 2022-07-26 2022-10-18 上海交通大学 基于自然语义理解的代码生成方法及系统
WO2023060034A1 (en) * 2021-10-05 2023-04-13 Salesforce.Com, Inc. Systems and methods for natural language code search
CN116400901A (zh) * 2023-04-12 2023-07-07 上海计算机软件技术开发中心 一种Python代码自动生成方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023060034A1 (en) * 2021-10-05 2023-04-13 Salesforce.Com, Inc. Systems and methods for natural language code search
CN115202640A (zh) * 2022-07-26 2022-10-18 上海交通大学 基于自然语义理解的代码生成方法及系统
CN116400901A (zh) * 2023-04-12 2023-07-07 上海计算机软件技术开发中心 一种Python代码自动生成方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
林泽琦 ; 邹艳珍 ; 赵俊峰 ; 曹英魁 ; 谢冰 ; .基于代码结构知识的软件文档语义搜索方法.软件学报.2019,(12),全文. *

Also Published As

Publication number Publication date
CN117093196A (zh) 2023-11-21

Similar Documents

Publication Publication Date Title
CN109492113B (zh) 一种面向软件缺陷知识的实体、关系联合抽取方法
JP5128629B2 (ja) 品詞タグ付けシステム、品詞タグ付けモデルのトレーニング装置および方法
CN111914085B (zh) 文本细粒度情感分类方法、系统、装置及存储介质
CN111930906A (zh) 基于语义块的知识图谱问答方法及装置
WO2024067276A1 (zh) 用于确定视频的标签的方法、装置、设备及介质
CN115964273A (zh) 基于深度学习的航天器测试脚本自动生成方法
CN114217766A (zh) 基于预训练语言微调与依存特征的半自动需求抽取方法
CN110245349A (zh) 一种句法依存分析方法、装置及一种电子设备
CN113987201A (zh) 一种基于本体适配器的零样本知识图谱补全方法
CN116595406A (zh) 基于角色一致性的事件论元角色分类方法及系统
CN117540035B (zh) 一种基于实体类型信息融合的rpa知识图谱构建方法
CN113010635B (zh) 一种文本纠错方法及装置
CN117093196B (zh) 一种基于知识图谱的编程语言生成方法及系统
CN116627487A (zh) 基于词级别检索的源代码注释自动化生成方法和系统
CN113553844B (zh) 一种基于前缀树特征与卷积神经网络的领域识别方法
Wang et al. An advanced bert-based decomposition method for joint extraction of entities and relations
CN114372138A (zh) 一种基于最短依存路径和bert的电力领域关系抽取的方法
Xu et al. Stdnet: Spatio-temporal decomposed network for video grounding
CN112395832B (zh) 一种基于序列到序列的文本量化分析与生成方法及系统
Lv et al. A Code Completion Approach Based on Abstract Syntax Tree Splitting and Tree-LSTM
CN112651246B (zh) 融合深度学习和工作流模式的服务需求冲突检测方法
CN117933249A (zh) 一种装备故障知识的智能交互方法及系统
Li et al. ACAGNN: Source Code Representation Based on Fine-Grained Multi-view Program Features
Wang et al. A Smart Contract Classification Method Based on Label Embedding and Collaborative Attention Mechanism
Liu et al. Intelligent Interaction of Fluorine containing materials Based on NL2SQL

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