找回密码
 立即注册
查看: 615|回复: 5

目前的人工智能离可以本身给本身写代码编程还有多远?

[复制链接]

1

主题

0

回帖

9

积分

新手上路

积分
9
发表于 2023-5-8 10:04:25 | 显示全部楼层 |阅读模式
问题描述有更新,望仔细阅读,感激

--------------------------------------比如说ALPHAGO可以自主学习编程语言,给本身升级。

----------------------------------
感觉大师纠结在写代码这个事情上了,或许将来的人工智能不用代码这种说法了,我也不知道将来叫啥,所以就这么叫吧。
其实这里主要指的是人工智能对本身升级,先可以不谈有意识的自主升级,我们可以讨论下接收人类命令进行定向的升级。
比如,你家里已经有个商用的人工智能管家了,也能对话,控制一些电器,为你放置事务。有一天,你闲的蛋疼,你要跟它下象棋,它说它没有下象棋的功能,你让它本身去学会。那么这个人工智能可以基于互联网的资源,本身学习象棋的法则,而且完成给本身升级。

所以问题是,这种人工智能离我们还有多久?
回复

使用道具 举报

0

主题

1

回帖

2

积分

新手上路

积分
2
发表于 2023-5-8 10:04:52 | 显示全部楼层
在提到人工智能自己给自己写代码之前,首先要提到一个概念,那就是代码智能(code intelligence)。代码智能的目的是让计算机具备理解和生成代码的能力,并利用编程语言知识和上下文进行推理,支持代码检索、补全、翻译、纠错、问答等场景。以深度学习为代表的人工智能算法,近年来在理解自然语言上取得了飞跃式的突破,代码智能也因此获得了越来越多的关注。该领域一旦有突破,将大幅度推动 AI 在软件开发场景的落地。
一直以来,微软秉承为开发者赋能的使命。在2020年 Build 大会上,微软首席执行官 Satya Nadella 表示,“GitHub 拥有超过5000万用户,Visual Studio Code 是最受开发者欢迎的代码编辑器。微软将为开发者打造最完整的开发工具链,结合 GitHub、Visual Studio 和 Azure,帮助开发者实现从想法到代码、从代码到云的转化。”同时,微软在自然语言理解和深度学习领域有着深厚的积累,不只有大数据、大模型、强算力支撑着模型的训练,还有丰富的模型部署及优化经验,帮助人工智能算法真正落地到产品中。
基准数据(Benchmark Dataset)对一个领域的发展至关重要。例如,ImageNet(斯坦福大学)极大地推动了计算机视觉领域的发展,类似包含多种任务的 GLUE(纽约大学)和 XGLUE(https://microsoft.github.io/XGLUE/,微软亚洲研究院自然语言计算组)数据集在自然语言处理领域也产生了非常深远的影响。近年来,统计机器学习算法,尤其是深度学习算法在很多代码智能任务(如代码检索、代码补全、代码纠错)上都取得了不错的进展,但是,代码智能领域仍缺少一个能覆盖多种任务的基准数据,以便从不同角度衡量模型的优劣。
近期,微软亚洲研究院(自然语言计算组)联合 Visual Studio 和必应搜索发布了代码智能领域首个大规模多任务的新基准——CodeXGLUEhttps://github.com/microsoft/CodeXGLUE)。该基准可覆盖 code-code、code-text、text-code、text-text 四个类别,包含10个任务及14个数据集,具体有:代码克隆检测、代码缺陷检测、代码完形填空、代码补全、代码纠错、代码翻译、代码检索、代码生成、代码注释生成、代码文档翻译十项任务。其中,有自建数据集,也有在业界已有影响力的数据集。
十项全能评测集上线



具体来说,CodeXGLUE 中包含如下十项任务:
1. 代码克隆检测(Clone Detection)。该任务是为了检测代码与代码之间的语义相似度,包含两个外部公开数据集,但任务定义稍有不同。在第一个数据集中,给定两个代码作为输入,要求做0/1二元分类,1表示两段代码语义相同,0表示两段代码语义不同。在第二个数据集中,则给定一段代码作为输入,任务是从给定的代码库中检索与输入代码语义相同的代码。
2. 代码缺陷检测(Defect Detection)。该任务是检测一段代码是否包含可以导致软件系统受到攻击的不可靠代码,例如资源泄露、UAF 漏洞和 DoS 攻击等。该任务中使用了外部公开数据集。
3. 代码完形填空(Cloze Test)。先给定一段代码,但代码中的部分内容被掩盖住,该任务要求预测出被掩盖的代码。研究员们将该任务定义为多项选择题的形式,并构建了两个数据集。在第一个数据集中,被掩盖住的代码可以来自于代码中的任意字符;在第二个数据集中,则试图更有针对性地测试系统对代码 max、min 函数的理解能力。
4. 代码补全(Code Completion),也就是给定已经写好的部分代码。该任务能够自动预测出后续的代码,具体包含两个设置,分别是词汇级别(Token-level)和行级别(Line-level)的补全。顾名思义,前者的任务是补全下一个词汇,而后者的任务是补全一整行代码。词汇级任务使用了两个被外部广泛使用的数据。行级别的任务则是在词汇级别任务的数据上自动构建的数据。
5. 代码翻译(Code Translation)。该任务是把代码从一种编程语言翻译到另一种编程语言。研究员们构建了一个 Java 到 C# 的代码翻译数据集。
6. 代码检索(Code Search)。该任务是为了检测自然语言与代码之间的语义相似度,包含两个数据集,具体定义稍有不同:在第一个数据集中,给定一个自然语言作为输入,任务是从给定代码库中检索与输入自然语言语义最相近的代码,研究人员为该数据新构建了一个测试集,用来更好地测试系统的深层语义理解能力。在第二个数据集中,给定自然语言-代码对作为输入,要求系统做0/1二元分类,1表示语义相似,0表示语义不相似,研究员们同样为该任务构造了新的测试数据集,测试数据的自然语言来自必应搜索引擎,可以更好地反应真实用户的查询习惯。
7. 代码纠错(Code Refinement)。 给定一段有 bug 或者复杂的代码作为输入,该任务要求生成被优化后的代码。该任务中使用了一个外部公开的数据集。
8. 代码生成(Text-to-code Generation)。给定自然语言注释作为输入,该任务要求自动生成函数的源代码。该任务中使用了外部的公开数据集。
9. 代码注释生成(Code Summarization)。给定一段函数代码作为输入,该任务要求自动生成对应的自然语言注释。该任务中使用了外部公开数据集。
10. 文档翻译(Documentation Translation)。该任务的目的是自动将代码文档从一种自然语言翻译到另一种自然语言,如从英文翻译到中文。该任务中构建了新的数据集。
CodeXGLUE 发布在 GitHub 上,参赛者可首先通过 Git Clone 命令下载全部资源。最外层目录对应了四个任务分类,即 Code-code、 Code-text、Text-code 和 Text-text。研究员们为每个任务和数据集都创建了子文件夹,其中包括数据、代码、评测脚本以及说明文档。对于来自外部的公开数据集,则提供了数据下载的脚本;同时,对于需要做预处理的部分数据,也提供了预处理的脚本。


三大基线系统模型:CodeBERT、Encoder-Decoder和CodeGPT

为了让参赛者更容易参与到 CodeXGLUE 中,研究人员为每个任务搭建了目前较为流行的、基于神经网络的基线系统(Baseline)。这些基线系统可以被归为三类:第一类是基于 CodeBERT 预训练模型的系统,能够支持如分类、检索等代码理解任务;第二类是基于 CodeGPT 预训练模型的系统,能够支持代码补全和代码生成任务;第三类是编码器-解码器模型(Encoder-Decoder),能够更好地支撑如代码翻译、代码纠错等生成任务。下图给出了三类基线系统的总况,接下来将分别对每个基线系统进行介绍。


基于 CodeBERT 预训练模型的系统:在自然语言处理领域,BERT 在诸多自然语言理解任务中都展现了非常出色的性能。BERT 的基本思想是把模型的学习过程分为预训练(Pre-training)和微调(Fine-tuning)两个步骤。在预训练阶段,BERT 会从海量无标注的文本中通过自监督优化目标,如语言模型和掩码语言模型,学习通用的词汇上下文语义表示;在微调阶段,已经训练好的模型参数会在下游任务的标注数据上进行微调。受 BERT 的启发,研究员们为参赛者提供了 CodeBERT 模型,即面向编程语言的预训练模型。
CodeXGLUE 中的很多任务同时涉及到文本和代码,因此该系统提供了在 code-text pair 上预训练的 CodeBERT 模型。该模型在训练过程中同时会把代码和文本作为输入,这样的设置可促进模型学习文本和代码之间的语义交互(相关论文:CodeBERT: A Pre-Trained Model for Programming and Natural Languages,https://arxiv.org/abs/2002.08155)。由于代码严格遵循编程语言的语法规范,所以代码的内容具有很强的结构性,基于这点考虑,研究人员进一步提出了一种融合代码结构的预训练模型,如下图所示。具体来说就是利用代码的数据流信息,并围绕数据流提出了两种新的预训练任务。模型的具体细节可参见论文:GraphCodeBERT: Pre-training Code Representations with Data Flow (https://arxiv.org/abs/2009.08366 )。


基于 CodeGPT 预训练模型的系统:GPT 模型在自然语言生成任务上取得了非常出色的效果,也有学者发现在编程语言上预训练 GPT 模型在代码生成任务上表现得很不错。为了帮助参赛者更快地搭建模型,研究员们分别在 Python 和 Java 两种编程语言上预训练了 GPT 模型,称之为 CodeGPT(如下图所示)。模型的训练数据来自CodeSearchNet,训练目标是传统的语言模型。参赛者只需在下游任务中对 CodeGPT 进行微调,即可在代码生成和补全任务上取得当前最好的性能。


编码器-解码器模型系统:为了支持如代码翻译、代码纠错等 Sequence-to-sequence 生成问题,该系统提供了基于 Transformer 的 Encoder-Decoder 框架。下图展示了一个 C++ 到 Python 的代码翻译样例,Encoder 端接收了 C++ 的代码作为输入,Decoder 端序列化地输出了 Python 代码。模型的框架也支持在 Encoder 端使用 CodeBERT 初始化模型参数,以更好地表示代码的语义。


研究人员在两个 P100 GPU 上计算了每个数据集上进行模型训练和推理的时间,如下表所示。可以看出,模型训练时长在一小时到三十小时内,推理的过程则更快,最快的数据仅需要几分钟,最耗时的需要两个小时。这样的资源消耗通常是可以被大部分参赛者所接受的。


全新评测指标CodeBLEU,定义模型优劣标准

评测指标的选取至关重要,它定义了区分模型优劣的标准。目前,业界大多使用 BLEU 评价生成代码的质量,其基本思想是计算生成代码和标准答案代码 ngram 的匹配程度。然而,代码蕴含着丰富的语法和语义结构,BLEU 无法捕捉代码的结构特性。因此,微软亚洲研究院的研究员们提出了 CodeBLEU 来更好地评价自动生成代码的质量。CodeBLEU 的基本思想是不仅使用字符的 ngram 匹配程度,还要同时考虑代码的关键字信息、AST 结构化子树信息以及代码变量之间的数据流信息。CodeBLEU 的最终结果由各个子部分加权求和获得。


为了验证 CodeBLEU 指标的有效性,研究人员分别在代码生成、代码翻译和代码纠错上进行了实验。不仅为每个任务提供了多个系统的模型输出,并分别使用 BLEU、CodeBLEU 评测各个系统,此外还请了熟悉编程语言的人工标注人员为每个模型的输出打分。通过下图可以看出,CodeBLEU 与标注人员打分的皮尔逊相关系数更高,从而验证了该指标的有效性。更多细节,请参见论文:CodeBLEU: a Method for Automatic Evaluation of Code Synthesis (https://arxiv.org/abs/2009.10297 )。


为了方便研究人员使用,微软亚洲研究院的研究员们还为每个任务和数据集提供了基线系统。欢迎学术界和工业界的同行来了解和使用 CodeXGLUE,也欢迎大家提供宝贵的意见和建议。
CodeXGLUE:
microsoft/CodeXGLUE
<hr/>本账号为微软亚洲研究院的官方知乎账号。本账号立足于计算机领域,特别是人工智能相关的前沿研究,旨在为人工智能的相关研究提供范例,从专业的角度促进公众对人工智能的理解,并为研究人员提供讨论和参与的开放平台,从而共建计算机领域的未来。
微软亚洲研究院的每一位专家都是我们的智囊团,你在这个账号可以阅读到来自计算机科学领域各个不同方向的专家们的见解。请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。
也欢迎大家关注我们的微博和微信 (ID:MSRAsia) 账号,了解更多我们的研究。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

1

主题

4

回帖

25

积分

新手上路

积分
25
发表于 2023-5-8 10:05:12 | 显示全部楼层
我看了一下其他答案,高赞的基本提到的都是理论性的东西,包括论文之类的,都不接地气。
我来介绍一下当前人工智能在写代码上实实在在对人的帮助吧。是帮助,不是人工智能自己写,现在实际上的最高水平就到这里了。这就是题主关心的:目前的人工智能离可以自己给自己写代码编程还有多远。
这就是微软的IntelliSense,目前支持C#,Python,Java。
Visual Studio IntelliCode | Visual StudioVisual Studio IntelliCode - Preview - Visual Studio MarketplaceIntelliSense是利用Github上面两千多个开源项目对训练机器学习,这些项目都是100以上个star。
当你用VS或VS Code编码的时候,语法自动会根据你当前代码的上下文更加智能的补全代码!

VS Code 基于机器学习的代码补全
https://www.zhihu.com/video/1050388531612114944
接下来,IntelliSense要做的是通过对更多Github上面开源代码的学习,利用机器学习,帮助你快速解决Issue,帮你更好的做代码审查(Code Reviews).

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

1

回帖

10

积分

新手上路

积分
10
发表于 2023-5-8 10:05:30 | 显示全部楼层
我觉得可能还是需要先突破自然语言语义理解,这样以后产品经理就可以直接跟AI口述需求,让AI直接根据自然语言理解然后完成功能。然后我们程序员只需要给AI加上打人的功能即可获得完全胜利。
回复

使用道具 举报

0

主题

4

回帖

2

积分

新手上路

积分
2
发表于 2023-5-8 10:05:51 | 显示全部楼层
来谈谈我的看法:)
首先说人工智能编程这件事情,很多答案都不约而同的提到了两个项目:
虽然DeepCoder的技术水准和技术意义明显高于AI Programmer,但从本质上来说现阶段的人工智能自动编程还是一个“在有限时间内搜索最优解”的优化问题,只是不同的项目采取了不同搜索方法,距离程序员失业还有很远的距离。
现阶段的算法依赖使用者给出程序的期待输入和输出,甚至还需要给出评估方法,然后使用机器找到程序实现这个目标。举例,我们需要一个加法计算器,那么我们给出一系列输入和期待的输出:

  • 输入(2, 2),输出2+2=4
  • 输入(1.5, 3),输出1.5+3=4.5
  • 输入(1.25, 5),输出 1.25+5=6.25
但我们很难完美定义所有的输入输出,这会造成学习中的歧义。举例,上面的这3个输出输出也可以用乘法计算得到,大家可以试试。所以现阶段的人工智能自动编程算法面临的最大的困难就是需要大量的人工时间来完成简单的任务,且随着任务难度上升,需要的运算时间会以指数甚至更高的速度增长。以AI Programmer为例,正确输出“hello world”所需要的时间是"hello"的5倍,而字符串长度仅上升1倍。
打个不恰当的比方,现阶段的自动编程更像“猴子打字”,学术叫法是“无限猴子定理”:
让一只猴子在打字机上随机地按键,当按键时间达到无穷时,几乎必然能够打出任何给定的文字,比如莎士比亚的全套著作。                                                                         --中文维基百科
所以现在的智能编程有一点像“随机撞大运”,期待在有限时间中“撞到”正确的代码符合我们期望的“输入和输出”,而智能的部分主要是降低搜索时间。换句话说,现在的算法主要还是观测和学习“输入和输出之间的关系”。上面提到的两项工作只是用了不同的搜索方法,比如DeepCoder限制了搜索域并用神经网络来辅助搜索过程,而AI Programmer使用了遗传算法(Genetic Program)来搜索最优解。客观的说,在这个阶段,没有人知道这个思路对不对。或许我们从一开始就不该期待用搜索来解决自动编程问题,甚至“自动编程”也可能是一个伪需求。
前两天从技术角度分析了一下AI Programmer,感兴趣的朋友可以看:如何评价arXiv上的最新论文:“可自动编程”的人工智能程序员(AI Programmer)?
<hr/>至于人工智能是否可以获得自我学习能力,自我进化。这其实是脑洞题:)
我赞同大部分答主的观点,如果人工智能需要自我学习的话,百分之九十九不是通过自我编程。程序语言是我们把人类语言转为机器语言,给没有推断能力(Inference)的机器使用的。当机器有了自我学习能力的时候,那么是不需要编程语言这个“代理人”的
但从互联网搜索资数据来自我更新,这似乎谈不上是天方夜谭。如果允许我开个脑洞的话,我觉得初级的机器学习能力的关键是有数据整合能力(Data Integration)和初级的推理能力(Inference),这个或许不需要高级的人工智能就可以实现。
脑洞是这样的:有一天你告诉你的人工智能助理,我想和你下象棋,它说:“好的,我现在就去学习。”于是它很快的连接到网络(信息库)上,搜索象棋需要对应的输入和输出,比如棋局的复盘信息。在足够的信息量下,它很快就可以成为一个厉害的棋手。
又比如有一天你女神说:“王二,生日的时候送给我这个口红!” 说着还发来一张图片。作为宅男的你连“斩男色”都没听说过,于是赶快问你的人工智能助理这是什么品牌多少钱,它说:“好的,我现在就去搜索。” 于是它从茫茫互联网图片中找到了那一只口红的色号原来是 YSL 218,顺道还学会了口红色号和颜色之间的推断关系以及口红之间的相似度。结果你发现这口红价值你一个月的工资,当时就急了,问人工智能助理:“有没有颜色相近,但便宜点的?” 这时你的AI邪魅一笑,向你推荐了 DBT 945。
讲这个段子的原因是,一步走到强人工智能并不现实,但基于数据整合和推断的弱人工智能并非遥不可及,甚至正在发生。而我们生在这个时代最大的乐趣就是,每天都有新的科技发明出现。这些发明不仅冲击着我们的世界观,也刷新了我们对人类创新能力上限的认知。而让人类与众不同的就是好奇心,那对不可知世界的好奇心
用一句我很喜欢的话结束这篇文章:
“第一只猴子开始仰望星空时,人类诞生”。
ʕ•ᴥ•ʔ
回复

使用道具 举报

0

主题

4

回帖

6

积分

新手上路

积分
6
发表于 2023-5-8 10:06:06 | 显示全部楼层
echo "echo hello world" >> sh


看,这是会自己编程的人工智能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|T9AI - 深度人工智能平台 ( 沪ICP备2023010006号 )

GMT+8, 2024-9-19 09:28 , Processed in 0.067627 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表