| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 《GraphCodeBERT: Pre-Training Code Representation With Data Flow》论文笔记 -> 正文阅读 |
|
[人工智能]《GraphCodeBERT: Pre-Training Code Representation With Data Flow》论文笔记 |
论文来源:ICLR-2021 ? ?主要贡献:?可以说是在CodeBERT的基础上引入了结构信息和两个新的预训练任务。 ?2.除了MLM预训练任务,还引入了2个新的能够从source code和data flow中学习代码表示的跟代码结构相关的预训练任务。 ?3.GraphCodeBERT在4个下游任务上达到了SOTA的性能,同时证明了代码结构信息的引入和2个新的预训练任务的引入能够改善模型的性能。 ?注:
?且实验表明在code search任务中,相比于token-level attention,模型更偏向于structural-level attention。 ? ?背景&相关工作:?现有的一些代码预训练模型,只是将代码看做由token组成的序列,而忽略了代码的内在结构信息,而这些重要的代码语义结构信息能够加强代码理解的过程。 ?相关工作部分具体看论文,主要介绍了2个部分的相关工作: ?2.引入了代码结构信息的神经网络模型 ?然后这些引入了结构信息的模型都是对于特定的任务从头去开始训练的,并没有使用预训练模型,而论文的模型则是利用了代码的结构语义信息去预训练学习代码的表示。 ?Data Flow:?data flow是一个图,图上的节点代表变量,边表示这些变量的值来自哪里。不像AST,data flow在相同的源代码的不同的抽象语法下是一样的。AST是提取了代码的syntactic-level结构信息,而data flow提取代码的semantic-level信息。 ?GraphCodeBERT结构:
?为了适应更多的下游任务。输入包含了代码的注释文档、代码、代码的结构信息。 ?模型用公式表示如下: 那么具体的,注意力的计算就是如下公式: ?Graph-Guided Masked Attention:?🚀下面根据我对transformer和论文的理解,来讲讲这个M矩阵: ?其实红色圈住的是一个注意力得分矩阵,他的0、1维度也是token的数量。这样这个矩阵的元素就是各token之间的注意力了。因为每个token都有一个query和key向量,那么用当前token的query向量去和别的token的key向量做内积,再用根号dk缩放经过softemax就是当前token对别的token的注意力得分,上面只是用矩阵的形式表示了。 ?M矩阵,它是和上面公式里圈住的注意力得分矩阵相同维度的。所以这里加个M矩阵,那么没有关系的部分是负无穷,加上绿色圈住的部分那肯定还是负无穷,所以咯,经过softmax就变为0了,相当于这部分没关系的信息被屏蔽了(也就是通过加上负无穷,让当前token的query向量注意不到别的无关token的key向量)。而有关系的0值加上去,绿色圈住的公式部分就不变。 ?M矩阵公式如下: ? ?预训练任务:1.MLM(Masked Language Modeling) 2.Edge Prediction ?损失函数如下,好像就是交叉熵loss的样子: 3.Node Alignment ? ?实验部分:?也就是在4个下游任务上进行fine-tuning咯,和其他一些模型对比,达到了SOTA的性能:
?然后还进行了 ?2.Node-vs. Token-level Attention ?3.Comparison between AST and Data Flow ?4.Case study:输入代码文档和代码,对比GraphCodeBERT有无使用data flow时对于给定的文档是否能够很好的描述代码的含义,验证data flow能够加强代码的理解过程。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 20:36:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |