2022年即将到来,在这短暂又漫长的2021年里,AI技术的进展不断迎来新的突破,让程序员们屡屡怀疑,自己的饭碗究竟会不会被AI抢走呢?本期巡山报告这就给大家带来目前AI在解读代码和AI问答自主搜索答案的进展。
一、AI自动解读代码
程序员们在面对工作交接时,最头疼的一点大概就是读代码了。如果关键的注释齐全,那自然是再好不过了,那它要是不全呢?看着别人写的厚厚的代码,一层一层的嵌套,真的是一个头两个大。熬夜加班只为了看懂一句话到底是个啥逻辑,恨不得把写代码的人揪出来让他好好解释一番。
没关系,让AI来帮你读代码吧!现在有一个名为Denigma的工具可以安装在VS code中,能够将一段代码翻译为解释代码作用的英语,并且支持绝大部分的编程语言。
AI真的能做到这种程度吗?我不信邪,尝试写了一点代码后丢给它,没想到它一句一句读下来,最后告诉我,这是个链队的实现。我当场大惊,居然这么轻易就看出来了?不仅如此,它还把我类内的函数都解释了一遍。
如此神奇,这是怎么实现的呢?代码摘要(Code Summarization)作为自然语言处理中一项艰难的任务,旨在为编程语言自动生成便于理解的人类语言。
代码摘要的工作简单的来说可以分成两个部分,一是让AI去理解代码,二是让AI在一的基础上生成一段人类语言的摘要。而所谓的让AI去理解代码,通常采用的办法是将其转化为一种不依赖于文法的结构,比如说将源代码转化成抽象语法树(AST)。而生成摘要可以看成是一个decoding的过程,最早期的方法会基于一些模板,根据代码的结构填充模板,而现在通常都会使用Transformer来同时进行encoding和decoding的学习。
然而现实永远没有那么美好,在生成代码摘要时,AI需要借助代码中的一些函数名称和注释。当缺少提示时,它可以读懂并解释每一行代码的作用,但是不能理解它们组合在一起的功能。以著名的平方根倒数速算算法为例,当我把函数名改为UFO后,Denigma会解释每一行代码(一些关于整数和浮点数的简单运算),最后一本正经地告诉我:“这段代码是在计算一架UFO的高度”。
就好比高中时做英语阅读理解,虽然能够把这段文章里每一句话都翻译出来,但是这段话的中心思想到底是什么啊!
尽管目前看来这个工具仍有很大缺陷,但是我们依旧可以展望代码摘要这一方向上的曙光,相信用不了多久,更加智能的AI就可以站出来为程序员们卸下肩上重担了。
二. AI问答自主搜索答案
当别人问了一个很蠢的问题的时候,我们可以告诉他“你为什么不百度一下?”,当别人问及我们的知识盲区的时候,我们也可以告诉他“你为什么不百度一下?”,或者自己偷偷百度一下再回答。如果AI也学会了“百度一下”,那它不就成为全知全能了吗?就在最近,OpenAI就完成了这件事:他教会了自己那个大模型GPT-3使用基于文本的web浏览器。
时至今日,AI语言模型已经有了很大的进步,例如GPT-3就具有很强的问答、翻译、写文章等能力。但是这些模型往往有一个缺点一直无法解决——缺乏常识。如果你问它“我的脚有几个眼睛”,它不能识别出这句话中的常识错误,而是会回答“两个”。
但是,在GPT-3学会上网搜索后,这些缺点已经不复存在。现在如果问它一个错误的问题,比如:「莎士比亚什么时候写的《哈利 · 波特》小说?」,模型会回答:「莎士比亚没有写《哈利 · 波特》小说,这部小说是由J.K.罗琳写的」。
回答结果完全正确并且非常充实,还给出了相关引用的链接。当被问及一些专业性很强的问题时,如果是以前的模型,假如没有足够的训练知识,就会开始胡言乱语,但是在学会上网后,它的回答能够引经据典,有理有据,显得比领域内的大牛还要专业。
那么GPT-3是怎么搜索答案的呢?开发者使用了现代搜索引擎(Bing),而后训练语言模型模仿人类使用搜索引擎寻找问题答案的模式,包括搜索问题,点击链接,滚动屏幕等等。看着AI搜索问题寻找答案的过程,是不是和我们人类“百度一下”一模一样?
虽然结合搜索引擎后的新模型生成的答案具有更高的准确性,但也同样带来了新的问题。一方面,AI生成的答案的可靠性,与其应用的搜索引擎的性能有着紧密的联系,一旦引用的来源不可信(比如百度搜索会出现很多广告置顶),那生成的答案的正确性也将大打折扣。
另一方面,和我们人类一样,当“百度一下”也搜不到答案的时候,AI最终还是只能胡言乱语。比如当被问及「pi的pi次方为多少」时,因为搜索不到答案,回答会是这样的:「首先我们需要知道pi是什么,其次如果我们想知道pi的pi次方是多少,我们得先计算pi的三次方是多少,pi的三次方就是乘以它自己三次」,而因为达到了长度上限,所以后面没有了。怎么样,是不是颇有一种“废话生成器”的味道了?
当然,无可否认的是,在问答系统中将语言模型结合搜索引擎是一个充满前途的方向,尽管我们距离“全知全能”的AI还很遥远,但似乎也并没有那么遥不可及。
参考链接:
AI自动解读代码
[1]https://denigma.app
[2]https://blog.csdn.net/ting0922/article/details/112799750
[3]https://zhuanlan.zhihu.com/p/386313941
[4]https://aclanthology.org/2021.findings-acl.251.pdf
AI问答自主搜索答案
[5]https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650833574&idx=1&sn=cd0646fbf430242ed8eef861d066ccc5&chksm=84e546d8b392cfce2134462bcc8d7756795428c3835229d99b5457fe42e074b0066368a62635
[6]https://openai.com/blog/improving-factual-accuracy