基于自然语言理解与转化的业务逻辑无代码开发方法

文档序号:1963482 发布日期:2021-12-14 浏览:21次 >En<

阅读说明:本技术 基于自然语言理解与转化的业务逻辑无代码开发方法 (Business logic code-free development method based on natural language understanding and conversion ) 是由 刘彩云 胡昌平 侍守创 朱大鹏 孟祥慈 李红星 王纪潼 姜厚禄 闫四洋 胡翔宇 于 2021-09-01 设计创作,主要内容包括:本发明是一种基于自然语言理解与转化的业务逻辑无代码开发方法,属无代码开发技术领域:一方面进行自然语言理解驱动的开发语义抽取;将自然语言描述中的关键开发元素自动抽取作为一个序列标注问题处理;通过对海量自然语言描述的带标注无代码开发需求语料进行有监督训练,以获得开发语义抽取模型;另一方面进行自然语言生成代码任务;解析出用户意图后将元数据送入模型引擎,模型引擎调用相应的代码生成模型;将代码生成任务转换为机器翻译任务。该方法可以降低软件开发和维护成本、提高开发效率、减小需求变更对系统的影响以及延长系统的生命周期。(The invention relates to a service logic code-free development method based on natural language understanding and conversion, belonging to the technical field of code-free development: on one hand, the development semantics extraction of natural language understanding drive is carried out; automatically extracting key development elements in the natural language description to be used as a sequence labeling problem for processing; carrying out supervised training on a marked and codeless development requirement corpus described by a mass of natural languages to obtain a development semantic extraction model; on the other hand, a natural language code generating task is carried out; analyzing the intention of the user, sending the metadata into a model engine, and calling a corresponding code generation model by the model engine; and converting the code generation task into a machine translation task. The method can reduce the software development and maintenance cost, improve the development efficiency, reduce the influence of the requirement change on the system and prolong the life cycle of the system.)

基于自然语言理解与转化的业务逻辑无代码开发方法

技术领域

本发明涉及无代码开发技术领域,具体涉及一种基于自然语言理解与转化的业务逻辑无代码开发方法。

背景技术

传统的集成开发环境(Integrated Development Environment,以下简称“IDE”),采用的是各种描述类文本语言,虽然结构严谨,功能性也能够支撑大量不同的设计实现需求,但是伴随着软件开发行业的发展和进步,也开始出现一些需求缺陷。一方面,在开发到生产的过程中,参与的工作者需求量越来越大,吸引了包括大量不同领域非软件专业的人员。

些非专业用户需要有快速便捷的方法来尽快融入到开发过程中;另一方面,软件文本语言开发也一定程度上影响软件开发人员的开发效率,大量重复繁杂的工作消耗时间的同时,也加大了出错的概率。

在文本编程已经渐渐不能满足开发行业需求的时候,出现了无代码开发技术等概念。利用无代码开发技术抽象封装底层技术细节,简化开发过程,降低开发难度,节省了大量时间,而且有很大的功能扩展空间来满足不断增长的功能需求,同时不会出现大量的代码重复问题。

当前无代码开发技术的主要方法有:基于模板的自动代码生成、基于对象关系映射、基于文档注释和基于动态代理的自动代码生成技术。此外,还有尚处于起步阶段的深度学习自动代码生成技术。其中基于图像生成前端代码(如pix2code、sketch)方面有较多研究,但是如何基于自然语言这种交互方式快速自动构建系统功能模块研究较少。事实上,自然语言是人类最为通用的交流方式。通过自然语言描述快速构建系统功能模块,具有重要的实际意义。

发明内容

本发明所要解决的技术问题是针对现有技术的不足,提供一种基于自然语言理解与转化的业务逻辑无代码开发方法,该方法可以降低软件开发和维护成本、提高开发效率、减小需求变更对系统的影响以及延长系统的生命周期。

本发明所要解决的技术问题是通过以下的技术方案来实现的。本发明是一种基于自然语言理解与转化的业务逻辑无代码开发方法,其特点是:

(1)进行自然语言理解驱动的开发语义抽取;将自然语言描述中的关键开发元素自动抽取作为一个序列标注问题处理;通过对海量自然语言描述的带标注无代码开发需求语料进行有监督训练,以获得开发语义抽取模型;模型采用BERT方式将高维空间中表示词的高维一位编码向量映射到低维稠密的连续向量空间;采用结合注意力机制的双向长短时记忆网络的意图识别模型自动提取知识语句上下文特征;

(2)进行自然语言生成代码任务;解析出用户意图后将元数据送入模型引擎,模型引擎调用相应的代码生成模型;将代码生成任务转换为机器翻译任务:首先通过采用基于Transformer的机器翻译模型将自然语言转换成抽象的中间形式语言表示,然后将中间代码与组件库相结合编译成目标源代码。

本发明所述的基于自然语言理解与转化的业务逻辑无代码开发方法,其进一步优选的技术方案是:采用以下方法进行代码编辑:将程序自动生成的目标源代码展示给用户,并提供代码修改界面,以便用户对生成的源代码进行删改;当用户对生成的代码进行了修改时,则将该条数据添加进训练集,用于模型训练。

所述的基于自然语言理解与转化的业务逻辑无代码开发方法,其特征在于:操作步骤如下:

S1、输入自然语言文本;

S2、对文本进行语义解析;

S3、语义解析得到了得到用户意图;

S4、解析出用户意图后将元数据送入模型引擎,模型引擎调用相应的代码生成模型;

S5、利用生成代码模型生成中间代码表示;

S6、将中间代码表示与组件库相结合,编译成目标源代码;

S7、用户选择对生成的源代码进行编辑及确认;

S8、根据用户意图对修改后的源代码进行部署或其他操作。

本发明所述的基于自然语言理解与转化的业务逻辑无代码开发方法,其进一步优选的技术方案是:自然语言理解驱动的开发语义抽取方法为:

采用结合注意力机制的双向长短时记忆网络的意图识别模型进行语义识别:

假设输入序列为X=[x1,x2,...,xn],将X输入到BiLSTM层中,得到第t个单词的前后隐藏状态计算如下:

其中,

为经过LSTM后的正向输出,

为逆向输出,

ht为经过BiLSTM的输出,

表示的是对应元素相加;

如果LSTM的隐藏单元数为k,将前后项隐藏状态连接得到ht,且ht∈R2k,则输入的意图文本可以用H∈RN×2k,表示所有隐藏状态h的集合,即H=(h1,h2,...,hn);自注意力计算方法如下:

M=tanh(WS1HT)

a=softmax(WS2M)

其中,

HT为H的转置矩阵,

a为自注意力权重矩阵;

WS1∈Rm×2k和WS2∈R1×m为自注意力权重矩阵,

m为自注意力的隐藏单元数,是一个超参数,可以任意设置,

HT∈R2k×n为H的转置矩阵;

通过计算可以得到a∈R1×n

所以意图文本向量表示为:d=a·H,其中d∈R1×2k

从意图文本中提取r个语义特征,则需要r个自注意力头部进行语义特征提取,则WS2∈Rr×m,得到A∈Rr×n,最终得到文本意图的向量表示D=A·H。

本发明所述的基于自然语言理解与转化的业务逻辑无代码开发方法,其进一步优选的技术方案是:自然语言生成中间代码的方法为:

将代码生成任务转换为机器翻译任务:

首先将自然语言转换成抽象的中间形式语言表示,然后将中间形式语言编译成目标;

Transformer模型由编码器和解码器构成;

编码器由6个同构的网络层堆叠而成,每一个网络层包含有多头注意力子层和基于位置的前馈神经网络;

解码器和编码器大体一致,不过在输入序列提取特征时采用的是Masked多头注意力层,整个模型使用残差连接与对各层输出使用规范化来更好的优化网络;

将词进行向量化表示,文本的向量化表示为:X=[x1,x2,…,xn]T∈Rn×d

其中,

n表示自然语言文本中的分词个数,

d表示词向量维度,

xi表示文本中第i个词的词向量i=(1,2,...,n);

每个分词的位置向量的计算如下所示:

其中,

pos表示输入序列中每个词的具体位置,

i表示维度;

最后每个分词的向量化表示如下所示:

rei=wei+pei

其中,

wei表示句子中第i个词语的词向量,

pei表示句子中第i个词语的位置向量;

自注意力机制用于计算词语之间的相关程度,通常可以用查询向量Q、键向量K和值向量V这三个向量进行描述,其中,Q、K和V是通过每条文本的向量矩阵X乘以3个不同的权值;矩阵WQ,WK,WV得到,如下所示:

Q=X·WQ#

K=X·WK

V=X·WV

在获取自注意力信息时:

首先利用Q向量去查询所有的候选位置,每个候选位置会有一对K和V向量,查询的过程就是Q向量和所有候选位置的K向量做点积运算的过程,点积结果经过Softmax函数后加权到各自的V向量上,求和就得到了最终的自注意力结果,计算如下所示:

多头自注意力机制则相当于h个并行的自注意力层的集成,其计算方式如下所示:

MultiHead(Q,K,V)=Concat(head1,head2,...,headh)Wo

然后经过基于位置的前馈神经网络处理,前馈神经网络由两个线性变换组成,两者之间有一个ReLU的激活函数;编码器输出序列特征向量Z=(za1,za2,...,zan);

FFN(x)=max(0,xW1+b1)W2+b2#

解码器首先使用Masked多头注意力计算后得到连续表征向量Z=(zb1,zb2,...,zbn);经过多头注意力与残差规范化处理后得到zb与编码器生成的特征向量za进行多头注意力计算;在这一步中利用编码器输出向量za得到的Queries、Keys和解码器得到的zb向量的Values进行多头注意力计算与翻译对齐,也就是将源序列与目标序列的高层特征进行了关联,在编码器和解码器中都使用多头自注意力来学习序列的表示,然后通过同样的残差&规范化处理和基于位置的前馈网络处理以及线性优化和Softmax一系列处理最终实现Y=(y1,y2,...,yn)的概率化输出。

本发明所述的基于自然语言理解与转化的业务逻辑无代码开发方法,其进一步优选的技术方案是:将中间代码表示编译为目标源代码的方法为:使用自定义编译器,把简化的形式表示转换为应用程序源代码;所有可能的SDR组件都有相应的预定义模板源代码储存在组件库中;编译器按最小组件解析SDR并获取相应的模板,并最终添加到目标源代码中;文字字典由在预处理过程中于自然语言分离及在编译过程中重新引入的文本值组成。

与现有技术相比,本发明具有以下有益的技术效果:

本发明方法将代码生成任务转换为机器翻译任务,针对自然语言驱动的无代码开发中直接生成源代码准确度极低的问题,创新地将代码生成任务拆解为自然语言描述->抽象表示->目标源代码的形式。在集成开发平台上对自然语言描述的开发意图进行理解与转化,抽取与业务逻辑代码开发相关的要素,进而匹配合适的模板组件快速形成前后端框架,相比传统纯代码开发模式,无需了解代码开发过程中的语法、逻辑,从而降低开发门槛,大幅提升开发效率,有效降低软件开发和维护成本、减小需求变更对系统的影响以及延长系统的生命周期。

附图说明

图1是代码生成流程图;

图2是基于BiLSTM自注意力机制的意图识别模型;

图3是Transformer模型图;

图4是中间代码表示编译为目标源代码算法;

图5是代码编辑用户界面实例。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1,基于自然语言理解与转化的业务逻辑无代码开发方法:

第一方面进行自然语言理解驱动的开发语义抽取。自然语言理解驱动的开发语义抽取的核心在于提取关键开发元素,以供下一步组件匹配使用。本发明将自然语言描述中的关键开发元素自动抽取作为一个序列标注问题处理。通过对海量自然语言描述的带标注无代码开发需求语料进行有监督训练,以获得高效、高准确率、高泛化能力的开发语义抽取模型。模型采用BERT(Bidirectional Encoder Representation from Transformers,BERT)方式将高维空间中表示词的高维一位编码(One-Hot Encoding)向量映射到低维稠密的连续向量空间。采用结合注意力机制的双向长短时记忆网络的意图识别模型自动提取知识语句上下文特征。

第二方面进行自然语言生成代码任务。解析出用户意图后将元数据送入模型引擎,模型引擎调用相应的代码生成模型。本发明将代码生成任务转换为机器翻译任务,首先通过采用基于Transformer的机器翻译模型将自然语言转换成抽象的中间形式语言表示,然后将中间代码与组件库相结合编译成目标源代码。为了确保生成的源代码能正确运行,将程序自动生成的目标源代码展示给用户,并提供代码修改界面,以便用户对生成的源代码进行删改。如用户对生成的代码进行了修改,则将该条数据添加进训练集,用于模型训练。

具体实现步骤如下:

1、输入自然语言文本;

2、对文本进行语义解析;

3、语义解析得到了得到用户意图;

4、解析出用户意图后将元数据送入模型引擎,模型引擎调用相应的代码生成模型;

5、利用生成代码模型生成中间代码表示;

6、将中间代码表示与组件库相结合,编译成目标源代码;

7、用户可以选择对生成的源代码进行编辑及确认;

8、根据用户意图对修改后的源代码进行部署或其他操作。

实施例2,基于自然语言理解与转化的业务逻辑无代码开发方法实验:

代码生成流程如图1所示。下面对本发明方法的实施过程分为四个部分作详细讲解。

(1)自然语言理解驱动的开发语义抽取

在本发明中,用户输入文本存在文本特征稀疏、字数少但包含信息量大、语义复杂、语境复杂等问题。为解决此问题,本发明采用结合注意力机制的双向长短时记忆网络的意图识别模型进行语义识别。

如图2所示,假设输入序列为X=[x1,x2,...,xn],将X输入到BiLSTM层中,得到第t个单词的前后隐藏状态计算如下:

其中,为经过LSTM后的正向输出,为逆向输出,ht为经过BiLSTM的输出,表示的是对应元素相加。

如果LSTM的隐藏单元数为k,将前后项隐藏状态连接得到ht,且ht∈R2k,则输入的意图文本可以用H∈RN×2k,表示所有隐藏状态h的集合,即H=(h1,h2,...,hn)。自注意力计算方法如下:

M=tanh(WS1HT)

a=softmax(WS2M)

其中,HT为H的转置矩阵,a为自注意力权重矩阵。Ws1∈Rm×2k和WS2∈R1×m为自注意力权重矩阵,m为自注意力的隐藏单元数,是一个超参数,可以任意设置,HT∈R2k×n为H的转置矩阵。通过计算可以得到a∈R1×n。所以意图文本向量可以表示为:d=a·H,其中d∈R1×2k。如果从意图文本中提取r个语义特征,则需要r个自注意力头部进行语义特征提取,则WS2∈Rr ×m,得到A∈Rr×n,最终得到文本意图的向量表示D=A·H。

(2)自然语言生成中间代码

使用自然语言生成代码任务可以转换为机器翻译任务,但机器翻译方法并非完美,因编程语言本身与自然语言结构不同,且查询并不需要自然语言中全部信息,这导致自然语言中的无用字词成为干扰,使机器翻译方法得到的结果并不令人满意。针对现有问题,本发明将代码生成任务转换为机器翻译任务,首先将自然语言转换成抽象的中间形式语言表示,然后将中间形式语言编译成目标。

如图3所示,Transformer模型由编码器和解码器构成。编码器由6个同构的网络层堆叠而成,每一个网络层包含有多头注意力子层(Multi-Head Attention)和基于位置的前馈神经网络(Feed Forward);解码器和编码器大体一致,不过在输入序列提取特征时采用的是Masked多头注意力层,整个模型使用残差连接与对各层输出使用规范化来更好的优化网络。

首先需要将词进行向量化表示,文本的向量化表示为:X=[x1,x2,...,xn]T∈Rn×d。其中,n表示自然语言文本中的分词个数,d表示词向量维度,xi表示文本中第i个词的词向量i=(1,2,...,n)。每个分词的位置向量的计算如下所示:

其中,pos表示输入序列中每个词的具体位置,i表示维度。

最后每个分词的向量化表示如下所示:

rei=wei+pei

其中,wei表示句子中第i个词语的词向量,pei表示句子中第i个词语的位置向量。

自注意力机制用于计算词语之间的相关程度,通常可以用查询向量(Q)、键向量(K)和值向量(V)这三个向量进行描述,其中,Q、K和V是通过每条文本的向量矩阵X乘以3个不同的权值。矩阵WQ,WK,WV得到,如下所示:

Q=X·WQ#

K=X·WK

V=X·WV

在获取自注意力信息时,首先利用Q向量去查询所有的候选位置,每个候选位置会有一对K和V向量,查询的过程就是Q向量和所有候选位置的K向量做点积运算的过程,点积结果经过Softmax函数后加权到各自的V向量上,求和就得到了最终的自注意力结果,计算如下所示。

多头自注意力机制则相当于h个并行的自注意力层的集成,其计算方式如下所示:

MultiHead(Q,K,V)=Concat(head1,head2,...,headh)Wo

多头自注意力层是整个模型的核心,其丰富了词语之间的关联关系,甚至能够理解句子的语义和句法结构信息。

然后经过基于位置的前馈神经网络(Feed-Forward Network)处理,前馈神经网络由两个线性变换组成,两者之间有一个ReLU的激活函数。编码器输出序列特征向量Z=(za1,za2,...,zan)。

FFN(x)=max(0,xW1+b1)W2+b2#

解码器(Decoder)首先使用Masked多头注意力(masked multi-head attention)计算后得到连续表征向量Z=(zb1,zb2,...,zbn)。经过多头注意力与残差规范化处理后得到zb与编码器生成的特征向量za进行多头注意力计算;在这一步中利用编码器输出向量za得到的Queries、Keys和解码器得到的zb向量的Values进行多头注意力计算与翻译对齐,也就是将源序列与目标序列的高层特征进行了关联,在编码器和解码器中都使用多头自注意力来学习序列的表示,然后通过同样的残差&规范化处理和基于位置的前馈网络处理以及线性优化和Softmax一系列处理最终实现Y=(y1,y2,...,yn)的概率化输出。

(3)将中间代码表示编译为目标源代码

在本模块将使用自定义编译器,把简化的形式表示转换为应用程序源代码。如图4所示,大致显示了SDR到源代码的转换过程。所有可能的SDR组件都有相应的预定义模板源代码储存在组件库中。编译器按最小组件解析SDR并获取相应的模板,并最终添加到目标源代码中。文字字典由在预处理过程中于自然语言分离及在编译过程中重新引入的文本值组成。

(4)代码编辑

为了确保生成的源代码能正确运行,将程序自动生成的目标源代码展示给用户,并提供代码修改界面,以便用户对生成的源代码进行删改。如用户对生成的代码进行了修改,则将该条数据添加进训练集,用于模型训练。原型系统界面展示如图5所示。

16页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:应用调用信息的获取方法、设备以及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!