雷锋网 AI 科技评论按:伴随着 AI 技术的发展和应用,人们对「人工智能」的认知也不断被刷新和拓展,在大众眼中,AI 正变得越来越强大,不仅可以下棋博弈战胜人类的顶尖选手,还可以进行语音识别、自动翻译、人脸识别,甚至可以自动驾驶汽车。最近,北京大学与硅心科技团队联合推出了一项新的 AI 成果——aiXcoder,它利用 AI 技术辅助开发者自动进行程序编写,引燃了人们关于「AI+软件」的巨大发展潜力以及「软件开发自动化」发展前景的讨论与思考。
让计算机自动编写代码,不仅是软件开发领域关心的问题,也是人工智能领域长期关心的问题。早在 1964 年,机器学习领域的先驱者 Solomonoff 就曾提出,「对人类而言,编写计算机程序是一项既困难又耗时的活动,通过自动代码生成或程序归纳来实现这个过程的自动化是人工智能领域的一个长期研究主题。」近年来,DeepMind 和 Facebook 在其论文中也提出了类似的论述。
那么,在没有人类程序员干预的情况下,完全依赖 AI 技术进行程序代码生成,当前的研究进展情况如何呢?下面是近年来的几项典型研究工作:
● 2016 年,Google Deep Mind 发表了论文「Neural Programmer-Interpreters」,提出了一种利用程序的输入输出结果生成简单程序的深度神经网络模型,但它生成程序的规模具有较大限制,通常是由简单指令组合而成的短小程序;
● 2017 年,Facebook 在论文「Unsupervised Program Induction with Hierarchical Generative Convolutional Neural Networks」中也提出了一种在包含 8 种基本指令的数据集上选择指令,组合出程序的方法;
● 同年,微软针对类似的问题发表论文「DeepCoder: Learning to Write Programs」提升了程序生成的速度,但在程序规模与生成效果上仍未能取得质的提升。
这些成果对程序自动生成的研究起到了重要的推动作用,但同时也可以看出,在完全不依赖程序员的场景下,进行工业级程序的编写,仍需要进一步研究。
与上述研究思路不同,来自北京大学的研究团队,正致力于「辅助人类程序员自动编写程序代码」。「虽然在完全不依赖人类程序员的场景中自动生成程序仍需进一步研究,但我们可以利用人工智能技术来辅助人类编写程序。」北京大学高可信软件技术教育部重点实验室副教授李戈对雷锋网表示,「我们已经在『利用 AI 辅助程序员编程,以提高程序编写的效率和质量』方面取得了重要的研究进展。」
李戈所在的研究团队是国际上最早从事基于深度神经网络的计算机程序分析与生成研究的团队之一,在代码功能语义分析、代码自动生成与补全等方面的研究成果受到国内外同行的高度关注。近年来,该团队取得了一系列重要研究成果,形成了一批重要的行业专利及学术论文。基于所取得的科研成果,李戈所在实验室正转向产业化应用,致力于将「智能化软件开发技术」转化为能够支持工业界生产的商业产品——aiXcoder。
aiXcoder 智能编程机器人
aiXcoder 是一款全新的智能编程机器人产品,它采用与程序员一起「结对编程」的方式为程序员提供服务,从而提高程序员的编程效率。在 aiXcoder 的辅助下,程序将彻底摆脱传统的编程模式,不再需要「逐字逐句」编写程序。
aiXcoder 能够自动预测程序员的编程意图,连续向程序员推荐「即将书写的下一段代码」,程序员可以通过「一键补全」的方式,直接确认接下来输入的代码,从而大大提升代码的编写效率。同时,aiXcoder 还能够在程序编程的过程中,不断智能地搜索并推荐与当前程序功能相似的规范程序代码,为程序员提供有力的编程参考。目前,aiXcoder 编程机器人已经推出了 Android、JFinal、Tensorflow 等多个版本,为不同领域的编程者提供辅助。
据 aiXcoder 研发团队的核心技术人员郝逸洋对雷锋网介绍:aiXcoder 采用了先进的专门应用于程序分析与生成的特定深度神经网络模型,并利用严格筛选的海量领域源代码数据进行训练,从而使 aiXcoder 能够充分学习和掌握隐含于海量代码中的编码模式与规律,并将该信息用于后续代码的生成与补全。
不仅如此,经过训练的 aiXcoder 还能快速了解一个程序员的个人编程习惯,自动记录程序员常用的程序模式、常用的 API 调用序列等等,从而在程序员编程过程中进行有效地自动辅助,在最大程度上协助程序员自动完成非创造性的编程工作。
当前,aiXcoder 采用「云服务」的运行模式,其深度学习模型如同部署在云端的「编程大脑」,其客户端以插件的形式集成在 IDE 中,实现了与 IntelliJ、Eclipse、VS-Code 等主流集成开发平台的无缝对接,程序员可以通过 aiXcoder 插件实现与「云端 AI 服务」的对接,随时随地使用自己的「编程大脑」。
同时,aiXcoder 还可以为软件企业提供专业领域的定制化专属服务,以企业内部云的方式为软件企业提供专属服务。使用过该服务的某软件外包公司反馈:aiXcoder 不仅能够有效节省程序员的开发时间,还能够有效降低程序员对 API 文档或相关信息的依赖,「原本需要上网搜索相似代码和搜索 API 使用模式的时间,被节省了下来,可以更加集中精力编写特定系统所需要的代码。」站在程序员的角度,在 aiXcoder 的帮助下,开发者可以把更多时间用于「全新」代码的编写,提高个人价值。
aiXcoder 的研究历程
谈到研究这一智能编程机器人的初衷,李戈副教授说起当前的软件开发流程存在「开发阶段的缺陷被滞后解决」的问题,即程序员在编程的过程中未能解决的程序缺陷、错误等问题,常常需要依赖后续的代码扫描、代码审查、程序测试等环节才能被发现,然后再重新送回到程序员的开发现场去解决,然而,当上述问题重新返回到开发现场时,程序员往往早已变更了开发场景,他们只能重建起以前的开发现场才能对返回的代码进行修改。这一不合理流程大大延迟了编程问题的解决时间,造成了开发效率的降低。、
以百度为例,百度高级副总裁王海峰在今年出席软博会时曾提到,百度每天新增需求卡片达到 6700 张,系统每天构建次数超过 70000 次,每天系统上线发布次数超过 700 次。在这样的研发需求压力下,要求软件开发必须实现快速迭代,研发周期必须被缩短,大量的研发需求必须在编程阶段完成,而不是「把编程阶段应解决的问题向后续环节延迟」。因此,如何利用智能化手段提高软件编码的效率和质量,成为当前软件开发的重要问题。
如何将 AI 技术应用于软件开发中,协助开发者在开发阶段解决更多的问题,提高软件开发的效率和质量?这正是李戈副教授的研究团队一直深入思考的问题。要使 AI 能够协助程序员编写程序,必须首先要让 AI 模型能够理解程序员已经写下的程序,并能够领会程序员的编程意图。带着这一思考,他们开始了利用深度学习技术的程序代码分析与生成的研究。
2013 年底,李戈在斯坦福大学人工智能实验室担任访问学者,当时与他同一实验室的研究者正从事基于深度学习的自然语言处理的相关研究。这些相关领域的研究方法给了他启发,他认为可以利用特定的深度学习模型来进行程序代码语义的分析。然而,程序语言与自然语言存在诸多不同:
● 首先,程序语言通常基于顺序、分支、循环三种类型的语法结构来进行语义描述,具有更强的结构性,而且程序的结构信息具有多种表达方式,例如数据流图、控制流图、调用图、程序切面图等等;
● 其次,程序的整体语义对单个词义的依赖较弱,其字面语义与程序语义可能存在较大区别,具有更强的抽象性;
● 再次,程序分析的粒度比自然语言更大,通常以模块为分析单位,一个程序模块通常会包含很多条密切关联的语句;
除此之外,程序语义还依赖于大量的背景知识,如 API 知识、领域需求知识等等。
这些问题的存在使李戈意识到,想要获知程序所表达的语义,必须设计适用于程序语言的全新模型。
基于多年的研究基础和对程序特性的深入思考,李戈研究团队设计并构造了一系列专门用于程序分析与生成的深度神经网络模型。同时,他们利用从 Github、Stackoverflow 等获取的开放源代码资源,经过一系列清洗、分析、标注,积累了大量规范化程序代码数据用于支持深度神经网络的训练,并最终获得了优异的训练结果,形成了多项业界领先的科研成果,这些成果构成了 aiXcoder 的基础。
以 aiXcoder 的 Tensorflow 版本为例,他们使用了超过 30 万份经过处理的 Tensorflow 源代码作为训练数据,使神经网络模型学会了编写 Tensorflow 代码所需的各种规范模式、潜在规则、常用 API 序列、惯用编码模式等知识和经验。在程序员编写代码的过程中,aiXcoder 能够自动推测程序员的编程语义,并按照这些知识和经验及时向程序员推荐可能要使用的编程语句,以达到辅助程序员自动完成程序的目的,大大提升程序开发的速度。
当前的 aiXcoder 正以「结对编程」的形式辅助程序员工作,它就像一个时刻陪伴程序员工作的「伙伴」,与程序员一起编写代码,帮助程序员差缺补漏。
「传统的结对编程是人与人结对,我们希望能够实现人与机器的结对工作」,李戈介绍说,「我们希望 aiXcoder 能够承担更多的『劳动』,能够让程序员有更多的时间和精力投入到有创造性的工作中,让程序员的创造性价值得到更加充分的体现。」
「Leave Artificial Intelligence to aiXcoder, Leave Real Intelligence to Human.」(把人工智能留给 aiXcoder,把真正的智能留给人类。),这正是 aiXcoder 研发团队的信条和口号。
【TechWeb】12月2日消息,金山软件发布公告称,于2019年12月2日,金山云集团与某个金山云股东、高级管理人员及中国互联网投资基金(有限合伙)订立购股协议,金山云(作为发行人)同意向中国互联网投资基金投资者发行约5509万股每股票面价值 0.001美元的D+系列优先可转换股份,代价为5000万美元。假设(i)金山云的所有优先股按1:1之转换比例悉数转换为金山云普通股;及(ii)购股权计划项下的所有股份及僱员持股计划(包括信託契据)项下保留以供发行的所有股份获发行,于完成购股协议项下拟进行交易后,金山云将由中国互联网投资基金投资者拥有约1.8868%,而本公司于金山云的股权将由49.1251%减少至48.1982%。金山云将仍为本公司附属公司。董事会进一步宣佈,于购股协议完成时或之前,金山云当时的所有股东将订立经重列股东协议,据此,D+系列优先股持有人有权于以下情况下要求金山云购买彼等持有的D+系列优先股:(i)D系列合资格公开发售未于特定期限内完成;(ii)金山云的任何B系列优先股持有人已根据经重列股东协议要求金山云购买其持有的B系列优先股;(iii)金山云的任何C系列优先股持有人已根据经重列股东协议要求金山云购买其持有的C系列优先股;或(iv)金山云的任何D系列优先股持有人已根据经重列股东协议要求金山云购买其持有的D系列优先股。金山云集团主要从事云技术的研发并提供相关服务。中国互联网投资基金投资者为于中国注册成立的有限合伙,主要从事互联网领域的股权投资。就董事作出一切合理查询后所深知、尽悉及确信,中国互联网投资基金投资者及其最终实益拥有人均为独立于本公司及其关连人士的第三方。
最近一段时间,大家发现很多网站关键词库和流量都在直线下滑,站长圈可以说是哀嚎遍野。即便是一些大站权重站,有些也难逃厄运。如上图所示,图中案例就是一个之前操作过快排而被惩罚的站点。其下场不可谓不悲壮。在这里我们先了解一下快排。现在的快排,主要分为两类:模拟点击;发包技术。其中模拟点击是租用大量的服务器和ip,在服务器上搭建一个模拟浏览器并使用脚本在浏览器上模拟用户的搜索行为,来提高页面在百度的评分。发包技术是直接伪造用户搜索浏览行为参数,直接将数据包post给百度,可以快速的将页面在百度的评分提高。发包技术中不乏上千指数大词3天上首页的案例。这种快排方式严重干扰了百度搜索的市场环境,因此百度在进行了打击快排灰度测试后,开始扩大算法应用范围,其结果就是如今的大量网站的关键词库像瀑布一样直线下降。既然算法已经来了,我们也只有选择原谅,哦不,是选择面对。百度打击快排,最主要的首段就是靠抓取快排的特征。其中发包快排的特征比模拟点击特征明显很多,因此如果您还要继续做快排,对于发包快排的供应商一定要慎重又慎重的选择。那么模拟点击就不会被打击吗?也一样会被打击。做模拟点击的作弊网站,有个很大的特征就是:有大量的词的点击率超过了50%甚至接近100%。这种极其不正常的现象,让百度也有了反击的方向。因此如果还要做模拟点击,就必须降低点击率。否则依然一抓一个死。当然,我在这里并不是提倡大家做快排,既然是快排,就有被惩罚的风险,靠白帽技术安心优化,为更多的用户提供搜索价值,百度自然会将您的网站排名提升上去,自然会将搜索流量像你倾斜。快排就像一杯毒药,你喝或者不喝,都是你的选择。既然百度开始打击了,我们就必须沉着的去面对。如果可以的话,现阶段不要去碰快排这个雷区,安心做优化,做内容,做外链,为真正的搜索用户做好服务,才是最好的选择。上图那样稳定的幸福,又有谁不想要呢?
TOP