当前位置:网站首页>【AI4Code】《Pythia: AI-assisted Code Completion System》(KDD 2019)
【AI4Code】《Pythia: AI-assisted Code Completion System》(KDD 2019)
2022-07-25 11:11:00 【chad_lee】
代码补全
补全属性/方法,在一个给定集合内推荐item,最简单的方法就是按字母排序,缺点是用户下拉菜单的时间可能要长于直接打代码的时间。用户可以多打几个前缀帮助补全。

基于模型的代码补全
- 基于抽象语法树(AST)——Pythia等
- 基于代码文本——Deep TabNine 、Galois等
数据:AST和代码文本
AST是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于 if-condition-then 这样的条件跳转语句,可以使用带有三个分支的节点来表示。

一种是将代码解析为抽象语法树(AST),每个节点包括两个属性:type和value,所以每个节点需要两个embedding。然后使用深度优先遍历把AST的每个节点flatten成序列。
一种是直接将代码处理成文本,包含空格、换行符、缩进符等。
Pythia(KDD’19)
Pythia收集了Github上 Stars 前2700个Python项目的代码,一共包含了1600万个方法调用作为训练数据。

任务是给定一个长为 T T T的代码片段 C C C ,其中每个token为 c t c_t ct,以及一个特殊token “.”,预测token m ∗ m^{*} m∗。所以这个任务就是给定一个序列,根据这个序列的表征预测一个token,很适合用LSTM:
x t = L c t h t = f ( x t , h t − 1 ) P ( m ∣ C ) = y t = softmax ( W h t + b ) m ∗ = argmax ( P ( m ∣ C ) ) \begin{aligned} x_{t} &=L c_{t} \\ h_{t} &=f\left(x_{t}, h_{t-1}\right) \\ P(m \mid C) &=y_{t}=\operatorname{softmax}\left(W h_{t}+b\right) \\ m^{*} &=\operatorname{argmax}(P(m \mid C)) \end{aligned} xthtP(m∣C)m∗=Lct=f(xt,ht−1)=yt=softmax(Wht+b)=argmax(P(m∣C))
即在LSTM的输出后面接一个分类器。这里还用了tying embedding,LSTM的输出经过一个线性层后,直接和候选集里的token的embedding做内积,然后对内积结果做softmax。
Pythia已经作为VSCode的一个插件:

所以代码补全任务和session-based推荐任务和方法是相同的,不过代码补全任务的候选集更小。
DeepTabNine和Galois
这类方法和Pythia类似,只不过数据格式和模型与Pythia不同,在输入数据上用的是代码文本,模型用的是GPT(只有Transformer的Decoder,少一层Attention)而不是LSTM:

但是这两个方法是收费使用的插件,没有开源技术细节和论文。
边栏推荐
- W5500 multi node connection
- Teach you how to configure S2E as the working mode of TCP client through MCU
- 银行理财子公司蓄力布局A股;现金管理类理财产品整改加速
- 剑指 Offer 22. 链表中倒数第k个节点
- Plot ==pyqt5
- php curl post Length Required 错误设置header头
- Introduction to redis
- [leetcode brush questions]
- JS interview question: handwriting throttle function
- 异构图神经网络用于推荐系统问题(ACKRec,HFGN)
猜你喜欢

Management of software defects

软件测试阶段的风险

JS data types and mutual conversion

How to solve the problem that "w5500 chip cannot connect to the server immediately after power failure and restart in tcp_client mode"

What is the global event bus?
![[leetcode brush questions]](/img/86/5f33a48f2164452bc1e14581b92d69.png)
[leetcode brush questions]

JVM performance tuning methods

brpc源码解析(一)—— rpc服务添加以及服务器启动主要过程

Go 垃圾回收器指南

剑指 Offer 22. 链表中倒数第k个节点
随机推荐
[leetcode brush questions]
【多模态】《HiT: Hierarchical Transformer with Momentum Contrast for Video-Text Retrieval》ICCV 2021
软件测试阶段的风险
Review in the middle of 2022 | understand the latest progress of pre training model
Video Caption(跨模态视频摘要/字幕生成)
dirReader. Readentries compatibility issues. Exception error domexception
阿里云技术专家秦隆:可靠性保障必备——云上如何进行混沌工程
Wiznet embedded Ethernet technology training open class (free!!!)
JS作用域以及预解析
W5500多节点连接
Signal and slot mechanism ==pyqt5
30套中国风PPT/创意PPT模板
W5500通过上位机控制实现调节LED灯带的亮度
brpc源码解析(五)—— 基础类resource pool详解
Miidock Brief
Application and innovation of low code technology in logistics management
微信公众号开发 入手
JVM performance tuning methods
什么是全局事件总线?
JaveScript循环