新知榜官方账号
2023-10-19 02:16:20
近年来,NLP领域的生成式任务有明显的提升,那通过AI我们可以让代码自动完成后续补全吗?本文主要介绍了如何使用GPT2框架实现代码自动补全的功能。
如果AI真的可以自己写代码了,程序员将何去何从?我去年做过一个代码补全的小功能,打包为androidStudio插件,使用效果如下:
代码补全模型预测出的结果有时的确会惊吓到我,这也能学到~?那如果给它见识了全世界的优秀代码,再给足够量级参数和优秀的模型框架,真的可以实现需求作为输入,直接输出代码吗?"我的需求讲完了,你的代码呢?"希望可以看到这一天。代码补齐功能有其他优秀插件也已实现,比如tabnine,Kite和国产的aixcoder。
主要包括数据,算法和工程。数据众所周知,算法工程师大部分时间都在处理数据。深度学习是使用大数据训练模型的一个过程,数据是很重要的一个模块。所以我们先尽可能多的准备好训练数据。
数据采集:本文的目的是代码补全,训练数据就是代码段。考虑到每种语言风格和语法都不一致,所以单个模型只针对一种代码语言。我使用的训练数据主要来源于GitHub,编写了一个简单的爬虫代码,指定语言后根据stars的排序下载工程。
数据清理:直接下载的数据肯定是不能直接用的,我们还需要对数据进行清理。首先,我们的训练数据只需要工程中的代码文件,以java工程为例,我们只保留.java结尾的文件,其他文件可剔除。其次,我的代码补全目标是代码段,不针对注释功能。而且对于代码补全训练时,我们是会给定一定范围的上文,如果存在注释段会占用有效代码信息。另外注释除英文外其他字符不在我的训练vocab范围内,所以需要对代码中注释和日志进行清理。
数据编码:得到了训练数据后还需要把代码文本进行编码。本文使用的是bpe(bytepairencoder)字节对编码,主要为了数据压缩。数据编码后,代码的每个token被编码为1~N个id。模型预测到的id反编码为token即可。回车符认为是预测的终止符。
模型算法:代码补全功能就是基于GPT2框架,OPenAI官方提供了多套GPT2预训练模型。对于GPT算法,我们使用超参:12个层,768个隐藏节点,12个heads。infer阶段采用beam-search会导致整个预测过程特别耗时,所以参考了论文,采用top-ksampling,每次预测top3的结果再通过概率阈值过滤后作为最终候选输出。
工程:代码补全功能,最合适的应用场景就是上IDE。nlp模型不太适合在本机部署,最终选择了在GPU机器上部署模型,然后终端通过http请求获取预测文本显示的方案。最后一步就是如何在IDE上使用功能了。我们要开发AS的插件,需要使用IntelliJ,首先需要在本机安装配置IntelliJIDEA。好用的插件可以节省程序员很多时间,在插件实现时,我还添加了一个小的git-blame功能,实时查看指定行的git提交人。
AI能否自己写代码,达到疑犯追踪里TM那种水平,我不敢说一定不可能,但以我目前的认知是实现不了,毕竟写代码的是程序员,给算法喂数据的是程序员,算法设计还是程序员,AI连帮人类解bug的功能都还不出现!
相关工具
相关文章
相关快讯
推荐
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53
开启影视创作新纪元,效率提升 10 倍的神器来了!
2025-02-13 15:11
深度解析DeepSeek:当AI技术照进创作产业的未来
2025-02-12 17:16