面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

阿里云机器学习平台PAI与华东师范大学高明教授团队合作在SIGIR2022上发表了结构感知的稀疏注意力Transformer模型SASA,这是面向长代码序列的Transformer模型优化方法,致力于提升长代码场景下的效果和性能。由于self-attention模块的复杂度随序列长度呈次方增长,多数编程预训练语言模型(Programming-based Pretrained Language Models, PPLM)采用序列截断的方式处理代码序列。SASA方法将self-attention的计算稀疏化,同时结合了代码的结构特性,从而提升了长序列任务的性能,也降低了内存和计算复杂度。

论文:Tingting Liu, Chengyu Wang, Cen Chen, Ming Gao, and Aoying Zhou. Understanding Long Programming Languages with Structure-Aware Sparse Attention. SIGIR 2022

模型框架

下图展示了SASA的整体框架:

其中,SASA主要包含两个阶段:预处理阶段和Sparse Transformer训练阶段。在预处理阶段得到两个token之间的交互矩阵,一个是top-k frequency矩阵,一个是AST pattern矩阵。Top-k frequency矩阵是利用代码预训练语言模型在CodeSearchNet语料上学习token之间的attention交互频率,AST pattern矩阵是解析代码的抽象语法树(Abstract Syntax Tree,AST ),根据语法树的连接关系得到token之间的交互信息。Sparse Transformer训练阶段以Transformer Encoder作为基础框架,将full self-attention替换为structure-aware sparse self-attention,在符合特定模式的token pair之间进行attention计算,从而降低计算复杂度。

SASA稀疏注意力一共包括如下四个模块:

  • Sliding window attention:仅在滑动窗口内的token之间计算self-attention,保留局部上下文的特征,计算复杂度为,为序列长度,是滑动窗口大小。
  • Global attention:设置一定的global token,这些token将与序列中所有token进行attention计算,从而获取序列的全局信息,计算复杂度为,为global token个数。
  • Top-k sparse attention:Transformer模型中的attention交互是稀疏且长尾的,对于每个token,仅与其attention交互最高的top-k个token计算attention,复杂度为。
  • AST-aware structure attention:代码不同于自然语言序列,有更强的结构特性,通过将代码解析成抽象语法树(AST),然后根据语法树中的连接关系确定attention计算的范围。

为了适应现代硬件的并行计算特性,我们将序列划分为若干block,而非以token为单位进行计算,每个query block与

个滑动窗口blocks和

个global blocks以及

个top-k和AST blocks计算attention,总体的计算复杂度为

,b为block size。

每个sparse attention pattern 对应一个attention矩阵,以sliding window attention为例,其attention矩阵的计算为:

ASA伪代码:

实验结果

我们采用CodeXGLUE[1]提供的四个任务数据集进行评测,分别为code clone detection,defect detection,code search,code summarization。我们提取其中的序列长度大于512的数据组成长序列数据集,实验结果如下:

从实验结果可以看出,SASA在三个数据集上的性能明显超过所有Baseline。其中Roberta-base[2],CodeBERT[3],GraphCodeBERT[4]是采用截断的方式处理长序列,这将损失一部分的上下文信息。Longformer[5]和BigBird[6]是在自然语言处理中用于处理长序列的方法,但未考虑代码的结构特性,直接迁移到代码任务上效果不佳。

为了验证top-k sparse attention和AST-aware sparse attention模块的效果,我们在BigCloneBench和Defect Detection数据集上做了消融实验,结果如下:

sparse attention模块不仅对于长代码的任务性能有提升,还可以大幅减少显存使用,在同样的设备下,SASA可以设置更大的batch size,而full self-attention的模型则面临out of memory的问题,具体显存使用情况如下图:

SASA作为一个sparse attention的模块,可以迁移到基于Transformer的其他预训练模型上,用于处理长序列的自然语言处理任务,后续将集成到开源框架EasyNLP(https://github.com/alibaba/EasyNLP)中,贡献给开源社区。

论文链接:https://arxiv.org/abs/2205.13730

参考文献

[1] Shuai Lu, Daya Guo, Shuo Ren, Junjie Huang, Alexey Svyatkovskiy, Ambrosio Blanco, Colin B. Clement, Dawn Drain, Daxin Jiang, Duyu Tang, Ge Li, Lidong Zhou, Linjun Shou, Long Zhou, Michele Tufano, Ming Gong, Ming Zhou, Nan Duan, Neel Sundaresan, Shao Kun Deng, Shengyu Fu, Shujie Liu. CodeXGLUE: A Machine Learning Benchmark Dataset for Code Understanding and Generation. NeurIPS Datasets and Benchmarks 2021

[2] Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov. RoBERTa: A Robustly Optimized BERT Pretraining Approach. CoRR abs/1907.11692 (2019)

[3] Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, Ming Zhou. CodeBERT: A Pre-Trained Model for Programming and Natural Languages. EMNLP 2020

[4] Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, Michele Tufano, Shao Kun Deng, Colin B. Clement, Dawn Drain, Neel Sundaresan, Jian Yin, Daxin Jiang, Ming Zhou. GraphCodeBERT: Pre-training Code Representations with Data Flow. ICLR 2021

[5] Iz Beltagy, Matthew E. Peters, Arman Cohan. Longformer: The Long-Document Transformer. CoRR abs/2004.05150 (2020)

[6] Manzil Zaheer, Guru Guruganesh, Kumar Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontañón, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed. Big Bird: Transformers for Longer Sequences. NeurIPS 2020

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持异构GPU集群的超大规模模型的高效的分布式训练框架Whale

近日,阿里云机器学习PAI关于深度学习模型高效的分布式训练框架的论文《 Whale: Efficient Giant Model Training over Heterogeneous GPUs 》被计算机系统领域国际顶级学术会议USENIX ATC22接收。 Whale是阿里云机器学习PAI平台自研的分布式训练框架,开…

深度揭秘阿里云函数计算异步任务能力

在上篇文章《解密函数计算异步任务能力之「任务的状态及生命周期管理」》中,我们介绍了任务系统的状态管理,并介绍了用户应如何根据需求,对任务状态信息进行实时的查询等操作。在本篇中我们将会进一步走进函数计算异步任务,介绍异…

月费 19 美元的 GitHub Copilot 企业版上线,你乐意买单吗?

近日,微软旗下的 GitHub 发布了 Copilot 企业版,推出了一个名为“Copilot for Business”的新计划。每个用户每月仅需 19 美元就能享受企业级服务。简单来说,支付月费的用户将享有简单的许可管理,管理员可以为其团队启用 GitHub C…

设计稳定的微服务系统时不得不考虑的场景

我们的生产环境经常会出现一些不稳定的情况,如: 大促时瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致用户无法下单“黑马”热点商品击穿缓存,DB 被打垮,挤占正常流量调用端被不稳定服务拖垮&a…

千万级可观测数据采集器 - iLogtail代码完整开源

2022年6月29日,阿里云iLogtail开源后迎来首次重大更新,正式发布完整功能的iLogtail社区版。本次更新开源全部C核心代码,该版本在内核能力上首次对齐企业版,开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。…

科普达人丨漫画图解什么是 eRDMA?

在一个领先的阿里云数据中心里,数百台服务器(也就是大型的计算机)在疯狂工作和通信,他们正在合力完成一个大型的大数据处理任务,每台服务器领到自己的小任务,算完之后,得把结果相互同步&#xf…

聚焦科技创新产业升级 中国联通和腾讯签署新战略合作协议

12月20日,中国联通和腾讯在“2022中国联通合作伙伴大会”上签署新一轮战略合作协议。双方将充分发挥资源和技术优势,聚焦科技创新、产业升级、网络安全等进行全方位合作,为数实融合高质量发展开辟新路径、提供新引擎,助力千行百业…

科普达人丨漫画图解 SGX 加密计算黑科技

01 从一场朋友圈的“赛富”说起 最近,小明买基金赚了不少钱,开始膨胀了,开始在朋友圈里晒豪车、晒爱马仕。小红表示不服,“最近买基金还能赚钱?肯定是P图凡尔赛。还是我买币赚得多。”炒鞋达人小孟就更不服&#xff0…

SysOM 案例解析:消失的内存都去哪了 !

在《AK47 所向披靡,内存泄漏一网打尽》一文中,我们分享了slab 内存泄漏的排查方式和工具,这次我们分享一种更加隐秘且更难排查的"内存泄漏"案例。 一、 问题现象 客户收到系统告警,K8S 集群某些节点 used 内存持续升高…

Windows 上玩转最新的 Android 13,微软悄悄在 GitHub 上官宣了!

整理 | 屠敏出品 | CSDN(ID:CSDNnews)操作系统领域有两大霸主,一个是移动端的 Android,一个自然是桌面端的 Windows。当有一天,两者在同一套系统上碰撞,将会擦除怎样的火花?想必不少…

Serverless 时代下微服务应用全托管解决方案

Serverless 时代下微服务发展与挑战 早期业务规模比较简单,大多团队开发采用单体应用,已经能够很好地满足团队的业务需求,并且能够快速迭代。但随着业务规模的不断增长,系统变得越来越复杂,单体应用逐渐无法满足线上生…

关于接口测试自动化的总结与思考

序 近期看到阿里云性能测试 PTS 接口测试开启免费公测,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于: 服务端接口测试介…

最新Forrester Wave云计算报告:阿里云位居中国领导者、全球强劲者象限

近日,国际权威机构Forrester连续发布2022年全球和中国云计算市场Forrester Wave报告,在中国市场上,阿里云位居领导者象限,在市场表现、战略两大维度的评测中获评全项最高分;在全球报告中,阿里云位居强劲者象…

大促场景下,如何做好网关高可用防护

618 大促正在如火如荼进行中。《618大促来袭,浅谈如何做好大促备战》一文介绍了全方位保障大促高可用的方法论和技术手段,本文继续围绕网关,深入探讨大促场景下,如何做好网关高可用防护,将从以下几点逐一展开介绍&…

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

从 Java Agent 报错开始,到 JVM 原理,到 glibc 线程安全,再到 pthread tls,逐步探究 Java Agent 诡异报错。 背景 由于阿里云多个产品都提供了 Java Agent 给用户使用,在多个 Java Agent 一起使用的场景下&#xff0…

消息队列 RabbitMQ 遇上可观测 - 业务链路可视化

本篇文章主要介绍阿里云消息队列 RabbitMQ 版的可观测功能。RabbitMQ 的可观测能力相对开源有了全面的加强,为业务链路保驾护航。消息队列 RabbitMQ 简介 阿里云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1 协议的消息产品,兼…

你的 Sleep 服务会梦到服务网格外的 bookinfo 吗

作为业内首个全托管 Istio 兼容的阿里云服务网格产品 ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM 产品是基于社区 Istio 定制实现的,在托管的控制面侧提供…

巨人之舞 | Forrester Wave四季度榜单新鲜出炉,云厂商鏖战犹酣

日前,国际权威咨询机构 Forrester 发布《The Forrester Wave:2022 Q4中国公有云开发及基础设施平台(以下简称“PCDIP”)》报告。其中透露出哪些最新行业信息?有何指导意义?企业用户如何借助这份报告&#x…

EventBridge 在 SaaS 企业集成领域的探索与实践

当下降本增效是各行各业的主题,而 SaaS 应用作为更快触达和服务业务场景的方式则被更多企业熟知和采用。随着国内 SaaS 商业环境的逐渐成熟,传统企业中各个部门的工程师和管理者,能迅速决定采购提升效率的 SaaS 产品,然后快速投入…

解密函数计算异步任务能力之「任务的状态及生命周期管理」

前言 任务系统中有一类很重要的概念,即任务的状态和生命管理周期。其本质是对任务的生命周期管理。细分的状态有助于在使用时能够更清楚的了解系统发生了什么内容,便于针对性的根据业务情况进行操作。函数计算 Serverless Task 提供了多种可查询的状态&…