0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编程神技来了!谷歌新研究根据已经编辑好的代码预测源代码的 AI

5dy6_dushekeji 来源:YXQ 2019-04-18 15:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

预测源代码,听着就是一件非常炫酷的事情。最近,谷歌大脑的研究人员就对此高难度任务发起了挑战,在构建源代码生成模型上实现了新突破!

编程神技来了!

根据已经编辑好的代码预测源代码的AI,对程序员来说是一个非常宝贵的工具。

最近,谷歌大脑团队就对这项难度颇高的任务发起了挑战。

论文地址:

https://arxiv.org/pdf/1904.02818.pdf

改代码是程序员经常要做的事,需求一变,甚至可能要重头再来。然而,编辑模式(edit pattern)是无法仅仅根据要插入/删除的内容或者写好内容后的代码状态来被理解。

它需要根据变化与其所处状态的关系来理解,准确地对代码序列进行建模需要学习旧代码的表示方法,这就允许模型可以概括一种模式且对未来要编写的代码内容进行预测。

举个例子:

有两个历史记录A和B,这两段代码序列在经过2次编辑后,得到了相同状态,即“状态2”。但是在这个过程当中,历史记录A是在向foo函数添加参数,而历史记录B是在从foo函数中删除参数。

这项工作,就是希望根据“状态0”和“编辑 1&2 ”,可以预测接下来“编辑3”的操作内容

为了达到这个目的,他们首先开发了两种表示方法来捕获意图信息,这些信息将随着代码序列的长度“优雅地”扩展:

显式表示方法:在序列中“实例化”代码内容;

隐式表示方法:用于实例化后续要编写的代码。

然后它们构建了一个机器学习模型,这个模型可以捕获原始代码和预测代码之间的上下文关系。

构建源代码生成模型新突破

近年来,构建源代码的生成模型成为十分受重视的核心任务。

然而,以前的生成模型总是根据生成代码的静态快照(static snapshot)来构建的。而在这项工作中,研究人员将源代码视为一个动态对象(dynamic object),并处理软件开发人员对源代码文件进行编辑的建模问题

对编辑序列建模的主要挑战是如何开发良好的表示,既能捕获有关意图的所需信息,又能优雅地对序列的长度进行扩展。

正如上述,这项工作主要考虑编辑的两种表示方法,一是显式表示方法,二是隐式表示方法

显式表示方法中,将分层循环指针网络模型视为强大但计算成本较高的基线。在隐式表示方法中,考虑一个vanilla序列到序列模型,以及一个基于注意力的双头模型。这些模型展示了由不同问题公式产生的权衡,并为未来的编辑序列模型提供设计决策。

在精心设计的合成数据和对Python源代码进行细粒度编辑的大型数据集上,研究人员评估了模型的可伸缩性和准确性,以及模型观察以往编辑序列并预测未来编辑内容的能力。

实验表明,双头注意力模型特别适合实现对真实数据的高精度、校准良好的置信度和良好的可扩展性。

总之,这项工作形式化了从编辑序列中学习和预测编辑序列的问题,提供了对模型空间的初步探索,并演示了从开发人员对源代码进行的编辑中学习的实际问题的适用性。

问题定义:如何表示编辑序列数据

隐式和显式数据表示

第一个问题是如何表示编辑序列数据。我们定义了两种具有不同权衡的数据格式。

显式格式 (图 2 (a)) 将编辑序列表示为 2D 网格中 tokens 序列的序列。内部序列对文件中的 tokens 建立索引,外部序列对时间建立索引。任务是消耗前 t 行并预测在时间 t 进行的编辑的位置和内容。

隐式格式 (图 2 (b)) 将初始状态表示为 tokens 序列,将编辑表示为 (position, content) 对的序列。

图 2:将 “BACA” 转换为 “BABBCACC” 的编辑序列的显式表示 (a) 和隐式表示 (b)。

问题描述

显式问题的目标是学习一个模型,该模型使给定的可能性最大化;隐式问题是学习一个模型,该模型使给定所有 t 的的 

基线模型

基线显式模型 (Baseline Explicit Model)

基线显式模型是一个两级长短时记忆 (LSTM) 神经网络,类似于 Serban 等人 (2016) 的分层 RNN 模型。

基线隐式模型 (Baseline Implicit Model)

sequence-to-sequence 框架的自然应用是使用编码器的初始状态 s (0),并在解码器中生成 (p (t) i, c (t)) 对的序列。编码器是一个标准的 LSTM。解码器不太标准,因为每个动作都是成对的。为了将对作为输入处理,我们将 p (t) i 的嵌入与 c (t) 的嵌入连接起来。为了产生成对的输出,我们先预测位置,然后给出给定位置的内容。

隐式注意力模型

我们开发了一个模型,它对隐式表示进行操作,但是能够更好地捕获编辑内容与编辑上下文之间关系的序列。

该模型深受 Vaswani 等人 (2017) 的启发。在训练时,编辑的完整序列在单个前向传递中被预测。

有一个编码器计算初始状态和所有编辑的隐藏表示,然后有两个 decoder heads:第一个解码每个编辑的位置,第二个解码给定位置的每个编辑的内容。

图 3 (b, c) 对模型的整体结构进行了概述。

图 3:(a) 基线显式模型;(b, c) 隐式注意力模型

实验和结果:模型可以解决几乎所有任务

实验的目的是了解上述模型的能力和局限性,并在实际数据上进行评估。

实验有两个主要因素,一是模型如何准确地学习识别编辑序列中的模式,二是模型如何扩展到大数据。

在第一组实验中,我们在一个简单的环境中研究了这些问题;在第二组实验中,我们根据真实数据进行了评估。

本节中,我们评估了三种方法:显式模型缩写为 E,隐式 RNN 模型缩写为 IR,隐式注意力模型缩写为 IA。

表 1:在合成数据集上的准确性

表 1 报告了产生最佳开发性能的超参数设置和步骤的测试性能。结果表明,显式模型和改进的隐式模型可以解决几乎所有的任务,甚至包括那些涉及元字符和相对较长的替换序列的任务。

图 4:(a)-(c) 在训练期间处理序列所需的时间,跨越不同插入数 (10,50,100) 的 n-gram 问题。(d) 当将预测限制在模型最有信心的上下文中时,实际数据集的 token 级精度。

如图 4 (d) 所示,显式模型始终比隐式模型成本更高,并且随着数据大小的增加,这种差距也会增大。长度为 100 的插入序列比实际数据集中的序列小十倍,但在运行时已经存在一个数量级的差异。注意力模型通常占隐式 RNN 模型的 50% ~ 75% 的时间。

结论和未来研究

在这项工作中,我们提出了从过去的编辑中学习,以预测未来编辑的问题,开发了具有很强泛化能力的编辑序列模型,并证明了该方案对大规模源代码编辑数据的适用性。

我们做了一个不切实际的假设,即快照之间的编辑是按从左到右的顺序执行的。另一种值得探索的方案是,将其视为从弱监督中学习。可以想象这样一个公式,其中快照之间的编辑顺序是一个潜在变量,必须在学习过程中推断出来。

该研究有多种可能的应用。在开发人员工具的背景中,我们特别感兴趣的是调整过去的编辑以做出其他类型的预测。例如,我们还可以设置光标位置的条件,并研究如何使用编辑历史来改进忽略编辑历史的传统自动完成系统。另一个例子是,根据开发人员最近的编辑,预测他们接下来会发出哪些代码搜索查询。一般来说,我们希望预测开发人员接下来要做的事情。我们认为,编辑历史包含了重要的有用信息,在这项工作中提出的公式和模型是学习使用这些信息的良好起点。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 谷歌
    +关注

    关注

    27

    文章

    6245

    浏览量

    110271
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96770

原文标题:程序员再也不怕需求改来改去!谷歌大脑新突破:AI预测源代码

文章出处:【微信号:dushekeji,微信公众号:毒舌科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    哪些 AI 编程工具能够根据项目需求进行定制?企业级研发场景的能力评估与实践趋势

    随着软件工程快速向自动化、智能化演进,AI 编程工具已经从“辅助写代码”,走向“理解工程”“参与项目”“按需求定制流程”的新阶段。对于许多处于数字化和全球化进程中的企业而言,选择一款能
    的头像 发表于 12-08 16:10 333次阅读

    HarmonyOSAI编程编辑代码续写

    利用AI大模型分析并理解开发者在代码编辑区的上下文信息或自然语言描述信息,智能生成符合上下文的ArkTS或C++代码片段。 使用约束 建议在编辑
    发表于 08-21 15:43

    HarmonyOSAI编程编辑代码生成

    CodeGenie提供Inline Edit能力,支持在编辑窗口中通过自然语言进行问答,基于上下文智能生成代码片段,提升代码可读性。 当前有以下两种方式唤醒Inline Edit对话框: 在
    发表于 08-20 15:24

    HarmonyOS AI辅助编程工具(CodeGenie)代码智能解读

    本功能从DevEco CodeGenie 5.1.0 Beta版本开始支持。 CodeGenie提供智能AI能力对框选的代码片段进行逐条解释,总结代码段含义,帮助开发者提升阅读代码的速
    发表于 07-17 17:02

    HarmonyOS AI辅助编程工具(CodeGenie)代码续写

    利用AI大模型分析并理解开发者在代码编辑区的上下文信息或自然语言描述信息,智能生成符合上下文的ArkTS或C++代码片段。 一、使用约束 建议在编辑
    发表于 07-15 16:15

    任正非说 AI已经确定是第四次工业革命 那么如何从容地加入进来呢?

    在神经网络的计算中广泛应用,理解矩阵乘法、特征值和特征向量等概念有助于深入掌握深度学习模型的工作原理。 掌握编程语言,如Python和R。Python有丰富的AI库,如NumPy、Pandas用于数据处理
    发表于 07-08 17:44

    微软开源GitHub Copilot Chat,AI编程迎来新突破

    GitHub Copilot + vscode的组合我已经用了很久,我的代码开发效率完全提升了一个level。帮我代码提示,代码不全,注释理解生成
    的头像 发表于 07-02 09:34 833次阅读
    微软开源GitHub Copilot Chat,<b class='flag-5'>AI</b><b class='flag-5'>编程</b>迎来新突破

    从初学到进阶:树莓派上最适合你的代码编辑器推荐!

    之前,你需要安装一些必备工具,代码编辑器便是其中之一。树莓派系统自带了一些代码编辑器,它们功能良好,足以满足基本需求。不过,如果你需要更高级的功能,就必须探索其他
    的头像 发表于 05-15 16:20 797次阅读
    从初学到进阶:树莓派上最适合你的<b class='flag-5'>代码</b><b class='flag-5'>编辑</b>器推荐!

    使用FX3 SDK发布源代码是否违反许可?

    使用 FX3 SDK 发布源代码是否违反许可? CYPRESS™EZ-USB™ FX3 SDK1.3licenselicense.txt ”4. 专有权利; 到“您同意对源代码保密。” 那里写着一句话,所以我想问一下以确定。
    发表于 05-08 06:54

    如何获取用于开发fx2的sdk和示例源代码

    大家 我正在使用 FX2 设备,以前也使用过 FX3 设备。 使用 FX3 设备 SDK,当我下载它时,我在安装文件夹中获得了许多示例源代码,但是它没有 FX2 的示例源代码,我如何获取用于开发 fx2 的 sdk 和示例
    发表于 05-07 07:25

    27个FPGA实例源代码

    本资料收集汇总了27个FPGA实例源代码,有需要的可以下载学习! 获取完整文档资料可下载附件哦!!!!如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 03-14 17:31

    MaaS 应用系列 MaaS X Cursor:基于 DeepSeek API 快速构建代码编辑

    Cursor 是一款基于人工智能技术的现代化代码编辑器,专为开发者设计。它结合了传统编辑器(如 VS Code)的强大功能与 AI 驱动的智能编程
    的头像 发表于 03-08 16:43 3532次阅读
    MaaS 应用系列 MaaS X Cursor:基于 DeepSeek API 快速构建<b class='flag-5'>代码</b><b class='flag-5'>编辑</b>器

    源代码加密、源代码防泄漏c/c++与git服务器开发环境

    源代码加密对于很多研发性单位来说是至关重要的,当然每家企业的业务需求不同所用的开发环境及开发语言也不尽相同,今天主要来讲一下c++及git开发环境的源代码防泄密保护方案。企业源代码泄密场景一、在很多
    的头像 发表于 02-12 15:26 882次阅读
    <b class='flag-5'>源代码</b>加密、<b class='flag-5'>源代码</b>防泄漏c/c++与git服务器开发环境

    单片机学习—C51源代码和Proteus仿真文件

    单片机学习—C51源代码和Proteus仿真文件.zip, 有各种例子
    发表于 02-10 13:46 2次下载

    腾讯申请注册“腾讯云AI代码助手”商标

    致力于提升编程效率的智能工具。其主要功能包括代码的智能补全和自动生成,旨在帮助开发者更加高效地进行编程工作。这款工具的出现,标志着腾讯在人工智能和云计算领域的技术实力得到了进一步的提升。 值得注意的是,腾讯云
    的头像 发表于 12-13 10:28 971次阅读