[SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification

[SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification
期刊名综合评分中国科学院分区学科领域SCI收录是否OA录用比例审稿周期近期
文章
0924-669X

APPL INTELL
7.8
h-index:52

CiteScore:6.60
 
2区大类:计算机科学

小类:计算机:人工智能
SCI

SCIE
No较易偏慢,4-8周780498

全文总结

这篇论文提出了一种基于Transformer的代码分类器(TBCC),用于处理树状结构的编程语言数据。

研究背景

  1. 背景介绍: 这篇文章的研究背景是软件工程中的代码分类和相关任务,如代码克隆检测,仍然是一个具有挑战性的问题。由于软件程序中难以捉摸的语法和复杂的语义,现有的传统软件工程方法在语义层面上区分代码片段的功能时仍然存在困难。
  2. 研究内容: 该问题的研究内容包括探索不同的机器/深度学习技术用于代码分类算法,并提出了一种基于Transformer的神经网络TBCC,以避免传统方法中的梯度消失问题和无法捕捉长距离依赖的问题。
  3. 文献综述: 该问题的相关工作有:Mou等人提出了TBCNN,一种在树结构上应用卷积计算的深度学习模型,用于C程序的代码分类;Wan等人提出使用强化学习网络从多模态表示中提取源代码的结构特征,以改进代码检索;Wei等人提出了CDLH,一种通过将AST对编码为向量对来测量相似性,从而识别功能代码克隆的模型。

研究方法

这篇论文提出了一种基于Transformer的代码分类器(TBCC)。具体来说:

  • Transformer架构: Transformer网络由N个相同的层堆叠而成,每层由两个主要模块组成:多头自注意力块和位置感知的前馈神经网络。每个模块的输出都发送到一个残差网络,然后连接到一个归一化层。
  • 自注意力机制: 自注意力机制是一种新颖的方法,通过分配更多的权重来突出序列中的重要元素。通过定义一个通用函数f(⋅)f(⋅)来计算元素之间的相似性得分。
  • 多头注意力: 多头注意力是自注意力机制的一种扩展,通过在不同位置上同时捕捉序列输入中的几个重要元素,从而减少序列输入的维度,节省计算资源。
  • 位置嵌入和前馈神经网络: 为了弥补Transformer网络忽略输入序列的顺序信息的弱点,应用了位置编码层来产生顺序信息,并使用位置感知的前馈网络进一步处理多头注意力层的输出。

实验设计

  • 数据收集: 实验在两个重要的编程语言C和Java上进行,分别使用了OJ系统和BigCloneBench数据集。对于C程序,使用了pycparser解析代码片段生成ASTs;对于Java程序,使用了Antlr解析代码文本生成ASTs。
  • 模型训练: 使用Transformer网络对分割后的AST子树序列进行编码,并通过池化层将输出采样为单个向量,最后使用分类器进行下游软件工程任务。
  • 评估指标: 使用准确率、精确率、召回率和F1得分来评估模型的性能,并提供了Cohen's kappa值以进一步评估性能。

结果与分析

  • 代码分类: 实验结果表明,基于Transformer的模型在代码分类任务中表现优异,TBCC在准确率、精确率、召回率和F1得分上均优于现有的基线方法。
  • 代码克隆检测: 在代码克隆检测任务中,TBCC在召回率、F1得分和Cohen's kappa值上也表现出色,特别是在复杂的克隆类型III和IV上达到了最先进的结果。
  • 不同代码表示的比较: 通过对比不同代码表示(纯文本、完整AST和分割AST)的效果,发现分割AST能够更好地反映代码片段的语义,从而提高了模型的性能。

结论

这篇论文提出了一种基于Transformer的代码分类器TBCC,并在C程序的代码分类和Java程序的代码克隆检测任务中验证了其有效性。实验结果表明,TBCC在准确率、召回率和F1得分上均优于现有的最先进方法。未来的研究可以进一步优化Transformer网络以减少计算资源消耗。

这篇论文通过引入Transformer网络和分割AST的方法,显著提高了代码分类和克隆检测任务的性能,为软件工程中的代码分析任务提供了新的解决方案。

核心速览

研究背景

  1. 研究问题:这篇文章要解决的问题是如何在软件工程(SE)中,利用基于Transformer的网络对代码进行分类和克隆检测。传统的SE方法在语义层面上区分代码片段的功能时存在困难,现有的机器学习和深度学习方法在处理代码文本时存在梯度消失问题和难以捕捉长距离依赖的问题。
  2. 研究难点:该问题的研究难点包括:
  • 传统的基于RNN和CNN的方法存在梯度消失问题,无法捕捉长距离依赖。
  • 直接遍历抽象语法树(AST)可能会破坏代码片段的结构,导致信息丢失。
  • 图结构表示需要通过中间表示(IR)或字节码提取,这可能导致编译失败,限制了在实际应用中使用图表示。
  1. 相关工作:该问题的研究相关工作有:
  • Mou等人提出的TBCNN模型,使用卷积计算处理树结构的AST进行C语言代码分类。
  • Wan等人提出的基于强化学习的网络,从混合表示中提取源代码的结构特征以改进代码检索。
  • Wei等人提出的CDLH模型,使用树-LSTM编码AST对并测量相似性以识别功能代码克隆。

研究方法

这篇论文提出了TBCC(Transformer-Based Code Classifier),用于解决代码分类和克隆检测问题。具体来说,

AST分割:首先,将深度AST分割成较小的子树,以捕捉代码片段中的重要句法特征。每个子树被解析为一个独立的子树结构。

www.zeeklog.com  - [SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification

序列编码:然后,将所有子树序列转换为向量表示。输入代码片段被解析为标准AST,每个标准AST被分割成一组小子树。所有子树序列通过嵌入层转换为向量,记为 Esub-TRi,i∈[1,t]Esub-TRi​​,i∈[1,t]。

Transformer编码:接下来,使用Transformer层对子树序列进行编码,并计算注意力分数。Transformer层的输出通过池化层采样为一个单一向量,代表完整的代码片段。

www.zeeklog.com  - [SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification

分类器:最后,使用分类器进行下游SE任务。对于源代码分类任务,使用Transformer网络将代码片段向量投影到潜在空间,并计算logits值。损失函数为:

L(θ)=−∑i=1N(log⁡exp⁡(xy^)∑c=1Cexp⁡(xc^))L(θ)=−i=1∑N​(log∑c=1C​exp(xc​^​)exp(xy​^​)​)

其中,θθ 是模型的可学习参数,yy 是真实标签。

对于代码克隆检测任务,使用相似度计算两个代码片段的L1距离,并使用softmax回归作为多分类器。损失函数为:

L(θ)=−∑i=1N∑k=041{yi=Tk}log⁡p(y=Tk∣x;θ)L(θ)=−i=1∑N​k=0∑4​1{yi​=Tk​}logp(y=Tk​∣x;θ)

其中,1{⋅}1{⋅} 表示条件,如果标签 yiyi​ 等于任何克隆类型 TiTi​,则返回1,否则返回0。

实验设计

  1. 数据收集:实验在两个重要的编程语言C和Java上进行。对于C程序,使用开源判题系统(OJ)系统,包含104个不同的编程问题。对于Java代码克隆检测,使用IJaDataset2.0数据集,包含2.5亿行代码片段,手动标记为克隆对和方法级别。
  2. 数据预处理:从OJ系统中解析出C程序的AST,忽略无法解析或长度小于5行的代码片段。从IJaDataset2.0中提取Java代码片段的克隆对,忽略长度小于5行的代码片段。
  3. 实验设置:在C语言代码分类任务中,使用OJ系统数据集,包含52,000个方法和104个类别。在Java代码克隆检测任务中,使用IJaDataset2.0数据集,包含8,829个Java文件和635,128个克隆对。
  4. 参数配置:在Transformer块中,词嵌入大小为300,层数N为2,多头注意力头数为3,前馈网络维度为128,批量大小为64。所有可学习权重和参数使用随机正态分布初始化。

结果与分析

代码分类任务:在OJ系统数据集上,TBCC模型的准确率为97.6%,优于其他基线模型(如LSTM+TEXT为91.2%,TBCNN为94.0%,ASTNN为97.3%)。

www.zeeklog.com  - [SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification

代码克隆检测任务:在IJaDataset2.0数据集上,TBCC模型在精度、召回率、F1值和Cohen's kappa值方面均优于其他基线模型。例如,TBCC模型在类型IV克隆上的F1值为0.96,显著高于其他模型。

分割AST的效果:通过消融实验评估了不同代码表示(纯文本、完整AST和分割AST)的效果。结果显示,分割AST可以更好地反映代码片段的语义,TBCC模型在使用分割AST时,代码分类和代码克隆检测任务的性能分别提高了3-6%和1-3%。

总体结论

这篇论文提出了TBCC,一种基于Transformer的新型神经网络模型,用于处理分割后的AST。通过在C语言代码分类和Java代码克隆检测任务上的实验,验证了TBCC模型的有效性和优越性。实验结果表明,TBCC模型在准确率、召回率和F1值方面均优于现有的基线方法,特别是在处理长距离依赖和复杂功能克隆时表现出色。该研究展示了Transformer网络在代码分析任务中的潜力,并为未来的研究提供了新的方向。

论文评价

优点与创新

  1. 引入Transformer网络:论文首次将Transformer网络应用于代码分类任务,展示了如何通过强大的Transformer网络提高代码分类模型的准确性。
  2. 统一的管道:提出了一个通用的管道,可以从扁平化的抽象语法树(AST)中提取句法和长距离依赖信息。
  3. 实验验证:在两个主流编程语言(C和Java)的数据集上进行了广泛的实验,验证了TBCC在不同编程语言上的适用性和有效性。
  4. 分割AST:通过将深度AST分割成较小的子树,减少了嵌套结构的深度,有助于更细粒度地反映代码的句法知识。
  5. 长距离依赖信息的捕捉:Transformer网络能够捕捉AST中的大多数长距离依赖信息,这是RNN和CNN面临的主要挑战。
  6. 公开数据和代码:提供了TBCC的代码和数据集,方便后续研究人员进行复现和扩展。

不足与反思

  1. 参数调优:由于关注于发现Transformer网络和新的代码表示方法的能力,论文没有专注于调优参数,这可能会影响模型的精度。
  2. 内存消耗和训练时间:自注意力机制计算的权重矩阵大小为N×NN×N,其中N为输入的长度,这限制了长代码的实验。未来的研究可能会专注于优化Transformer网络以减少计算资源消耗。
  3. 基线模型复现:由于一些基线模型(如DLC和CDLH)的实验设置未在论文中详细介绍,论文使用其在论文中报告的数字进行比较。尽管收集了这些模型的成功参数,但仍有一些必要的参数缺失,影响了结果的完全复现。

关键问题及回答

问题1:TBCC模型在处理代码分类任务时,如何利用Transformer网络捕捉长距离依赖关系?

TBCC模型通过将深度抽象语法树(AST)分割成较小的子树,从而减少AST的嵌套深度,使其能够在细粒度上反映更多的句法知识。每个子树被解析为一个独立的子树结构,并通过嵌入层转换为向量表示。然后,使用Transformer层对这些子树序列进行编码,并计算注意力分数。Transformer层的输出通过池化层采样为一个单一向量,代表完整的代码片段。由于Transformer网络的自注意力机制,它能够捕捉序列中的长距离依赖关系,避免了传统RNN和CNN中的梯度消失问题。

问题2:在代码克隆检测任务中,TBCC模型如何处理不同类型的克隆,特别是功能克隆?

TBCC模型将代码克隆检测视为一个多分类问题,使用相似度计算两个代码片段的L1距离,并使用softmax回归作为多分类器。具体来说,TBCC模型首先将代码片段转换为向量表示,然后计算两个向量之间的相似度。对于不同类型的克隆(如类型I、II、III和IV),TBCC模型使用softmax回归模型进行分类。特别是对于功能克隆(类型IV),由于其语义相似但词汇和句法不同,TBCC模型通过Transformer网络捕捉长距离依赖关系,从而提高检测精度。实验结果表明,TBCC模型在处理功能克隆时表现出色,F1值达到了0.96,显著高于其他基线模型。

问题3:TBCC模型在实验中如何验证其有效性和优越性?

TBCC模型在两个重要的编程语言C和Java上进行了实验验证。对于C语言代码分类任务,使用开源判题系统(OJ)系统数据集,包含52,000个方法和104个类别。实验结果显示,TBCC模型的准确率为97.6%,优于其他基线模型(如LSTM+TEXT为91.2%,TBCNN为94.0%,ASTNN为97.3%)。对于Java代码克隆检测任务,使用IJaDataset2.0数据集,包含8,829个Java文件和635,128个克隆对。TBCC模型在精度、召回率、F1值和Cohen's kappa值方面均优于其他基线模型。例如,TBCC模型在类型IV克隆上的F1值为0.96,显著高于其他模型。此外,通过消融实验评估了不同代码表示(纯文本、完整AST和分割AST)的效果,结果显示,分割AST可以更好地反映代码片段的语义,TBCC模型在使用分割AST时,代码分类和代码克隆检测任务的性能分别提高了3-6%和1-3%。

www.zeeklog.com  - [SCI2-AIntelli代码分类]Transformer-based networks over tree structures for code classification

Read more

60个“特征工程”计算函数(Python代码)

60个“特征工程”计算函数(Python代码)

转自:coggle数据科学 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。 特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的技巧,此处我们将平时用得最多的聚合操作罗列在下方。 最近刚好看到一篇文章汇总了非常多的聚合函数,就摘录在下方,供许多初入竞赛的朋友参考。 聚合特征汇总 pandas自带的聚合函数 * 其它重要聚合函数 其它重要聚合函数&分类分别如下。 def median(x):     return np.median(x) def variation_coefficient(x):     mean = np.mean(x)     if mean != 0:         return np.std(x) / mean     else:         return np.nan def variance(x):     return

By Ne0inhk
90w,确实可以封神了!

90w,确实可以封神了!

要说24年一定最热的技术,还得是AIGC! 前段时间阿里旗下的开源项目,登上GitHub热榜! AI大热,如今ChatGPT的优异表现,必然会出现各种细分场景应用的工具软件,和大量岗位项目! 山雨欲来风满楼,强人工智能的出现,所有科技公司已经开始巨量扩招此领域的人才。算法的岗位,近三个月已经增长68%!这件事在HR届也是相当震撼的。 目前各行各业都不景气的市场,人工智能岗位却一直保持常青!甚至同属AI边缘岗都比其他岗薪资高40%! 与此同时,AI算法岗上岸也不简单,竞争激烈,好公司核心岗位不用说,谁都想去。 所以事实就是,想要上岸,门槛也逐渐变高,项目经历、实习经历都很重要,越早明白这个道理就越能提前建立起自己的优势。 但我在b站逛知识区的时候,经常看到有些同学,因为一些客观原因导致无法参加实习,这种情况下,如果你想提升背景,增加项目经历的话,可以试试这个《CV/NLP 算法工程师培养计划》。 目前已经有上千位同学通过该计划拿到offer了,最新一期学员就业薪资最高能拿到78K!年薪94w! 优势就是有BAT大厂讲师带领,手把手带做AI真实企业项目(包含CV、NLP等

By Ne0inhk
再见nohup!试试这个神器,Python Supervisor!

再见nohup!试试这个神器,Python Supervisor!

👇我的小册 45章教程:() ,原价299,限时特价2杯咖啡,满100人涨10元。 作者丨Ais137 https://juejin.cn/post/7354406980784373798 1. 概述 Supervisor 是一个 C/S 架构的进程监控与管理工具,本文主要介绍其基本用法和部分高级特性,用于解决部署持久化进程的稳定性问题。 2. 问题场景 在实际的工作中,往往会有部署持久化进程的需求,比如接口服务进程,又或者是消费者进程等。这类进程通常是作为后台进程持久化运行的。 一般的部署方法是通过 nohup cmd & 命令来部署。但是这种方式有个弊端是在某些情况下无法保证目标进程的稳定性运行,有的时候 nohup 运行的后台任务会因为未知原因中断,从而导致服务或者消费中断,进而影响项目的正常运行。 为了解决上述问题,通过引入 Supervisor 来部署持久化进程,提高系统运行的稳定性。 3. Supervisor 简介 Supervisor is a client/

By Ne0inhk
第一本给程序员看的AI Agent图书上市了!

第一本给程序员看的AI Agent图书上市了!

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔·盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI Ascent 2024演讲中高赞:AI Agent是一个令人兴奋的趋势,所有从事AI开发的人都应该关注。而国内的各科技巨头也纷纷布局AI Agent平台,如:钉钉的AI PaaS、百度智能云千帆大模型平台等等。 Agent 是未来最重要的智能化工具。对于程序员来说,是时候将目光转向大模型的应用开发了,率先抢占AI的下一个风口AI Agent。 小异带来一本新书《大模型应用开发 动手做 AI Agent》,这本书由《GPT图解》的作者黄佳老师创作,从0到1手把手教你做AI Agent。现在下单享受5折特惠! ▼点击下方,即可5折起购书 有这样一本秘籍在手,程序员们这下放心了吧,让我们先来揭开 Agent 的神秘面纱。 AI Agent 面面观

By Ne0inhk