|
一种基于预训练模型的数据库操作代码生成模块的设计与实现
梁清源
北京大学
摘要:随着现代软件复杂性地迅速提升,软件开发过程也变得越来越耗时且容易出错。如何提高开发效率,减轻开发者负担一直是软件工程领域关注的问题。代码生成是目前人工智能和软件工程领域内的重要研究问题,它有望解决程序开发过程中耗时且具有挑战性的问题。数据库操作代码是开发过程中常见的代码类型,目前存在很多研究使用深度学习技术生成相关代码。然而这些研究主要集中在声明式SQL语句的生成,面向终端用户而不是开发人员,难以在开发场景中提升效率。针对上述问题,本文面向实际开发中的数据库操作代码,以SQL生成研究为切人点,从数据类型、生成方式两方面入手,设计了一种基于预训练模型的数据库操作代码生成模块。数据类型采用具有语法嵌入风格的程序作为目标代码,它同时包含了数据库操作过程中声明式的SQL语句和开发过程中的SQL外部程序。这种类型数据不同于现有SQL生成研究只面向终端用户的情况,它面向开发场景中数据库的操作,用于辅助程序员提升开发效率。生成方式采用直接生成和间接派生两种方式进行代码生成。其中直接生成是根据输入的自然语言直接生成代码,间接派生根据输入自然语言的更新,自动修改旧的代码生成新的代码。直接生成方式中,本文采用SQL语句嵌入到Python代码的程序作为目标程序,构造了具有语法嵌入风格的代码生成数据集Lyra。针对Lyra数据集的直接生成任务,本文选择基于Transformer模型的Encoder-Decoder框架进行实验,并使用BERT风格和GPT风格的预训练模型提升实验指标。在间接派生方式中,本文采用My Batis框架下与SQL相关的XML配置内容作为生成的目标程序,构造了代码派生数据集Twin XSQL。针对Twin XSQL数据集的代码间接派生任务,本文选择GPT2和Code GPT作为基础模型,并根据代码数据特点预训练了Code GPT-XESQL模型提升代码生成正确率。本文最终构造了两种具有语法嵌入风格的数据集并进行了预训练模型相关的实验评估。实验结果表明Lyra和Twin XSQL数据集符合开发场景的需求,并且所设计的代码生成模块也能够生成数据库操作所需的代码。使用直接生成和间接派生的方式,也能够适配不同应用场景下的代码生成。其中代码直接生成的AST完全匹配率达到25.5%,代码派生任务的Top 1准确率达到6.84%,Top 5准确率达到11.47%。 还原
关键词: 代码生成; 语法嵌入; 代码派生; 深度学习;
专辑: 信息科技
专题: 计算机软件及计算机应用
DOI: 10.26929/d.cnki.gbeju.2022.000014
分类号: TP311.52;TP311.13
导师: 郁莲;
学科专业: 软件工程
硕士电子期刊出版信息: 年期:2022年第11期网络出版时间:2022-10-16——2022-11-15 |
|