G.O.S.S.I.P 阅读推荐 2023-08-28 “大”字的研究

在《福尔摩斯探案集》里面,柯南道尔用一篇非常经典的“study”——《血字的研究》(A study in Scarlet),宣告了传奇侦探的出场。今天推荐的论文 A Study on Robustness and Reliability of Large Language Model Code Generation 则是对最近几年来比气温还热的大语言模型(LLM)的研究,来自 UCSD 的研究人员系统性评估了大语言模型生成的代码的健壮性(robustness)和可靠性(reliability),结果如何呢?请看今天阅读推荐的细节。

先插播一则新闻:

Meta 发布了它的代码生成 AI 模型 Code Llama。类似 GitHub Copilot 和 Amazon CodeWhisperer,以及 StarCoder、StableCode 和 PolyCoder 等开源 AI 代码生成模型,Code Llama 支持为 Pytho、C++、Java、 PHP、Typescript (Javascript)、C# 和 Bash 等编程语言补完代码和调试。Code Llama 是 Llama 2 的编程专用版本,有 7B、13B 和 34B 参数三个版本,使用 500B tokens 的代码和代码相关数据进行训练。其中 7B 参数的版本可以单张 GPU 上运行,7B 和 13B 参数版本更适合实时代码补完之类的任务,而 34B 参数版本更适合作为编程助手使用。Code Llama 采用和 Llama 2 相同的许可证,可作为研究和商业使用。
https://about.fb.com/news/2023/08/code-llama-ai-for-coding/

不知道从什么时候开始,大语言模型在舆论上展现出来都是“史诗级”的表现——什么非凡的自然语言理解和代码生成能力,取代人类码农不在话下。甚至连知名的问答网站 StackOverflow 都要被 GPT 搞得倒闭掉了。但是这个繁荣的背后,可能又一次表现出了我们人类群体中的大部分个体在语文上的弱势(话说高考什么时候语文增加到600分?)。尽管如此,人类语言这种具有巨大包容性的表现形式,能够催生出“看上去很美,实际上很糟”的文本的概率,远大于计算机语言。而本文的研究进一步指出,大语言模型生成的计算机代码,用来欺骗人类可能还行,但是在实际的使用中出错的概率很大。

本文作者针对开发者使用程序语言的标准 API 的情况(嗯,我们初学 C 语言的时候也会去翻手册看看fopen是怎么调用的)进行了调查,特别针对那些通过询问大语言模型来生成代码的“新一代”开发者,看看到底这些 LLM generated code 里面的 API 调用有多正确。作者首先基于2018年 ICSE 论文 Are code examples on an online q&a forum reliable? a study of api misuse on stack overfl ow 中提出的一个测试集ExampleCheck进行了升级,建立了自己的RobustAPI数据集,里面包含了23个 JAVA API 以及和涉及这些 API 相关的1208个开发相关问题(从 StackOverflow 上收集)。特别注意这1208个问题的某些答案都包含了 API misuse 的情况(嗯,给 LLM 挖坑)。

接下来,作者为每个 API 及相关编程任务设计了一套标准化的 prompt 模板,生成特定的 prompt 并把它丢给不同的大语言模型,让它们回答。

由于RobustAPI数据集是自己精心设计的,所以作者可以方便地判定一个代码用例是否存在对特定 API 的误用(在论文的附录中有详细的40条规则,解释了如何判定误用)。而作者设计的 API checker 按照下图的流程来测试 AI 生成代码的可靠性和健壮性。

作者针对 GPT-3.5、GPT-4、Llama-2 和 Vicuna-1.5 这四个能够辅助代码开发的大语言模型进行了测试,在对它们提问时,还有三个不同的测试级别:

结果如何呢?下图展示了整体的测试结果:

  1. 在 zero-shot 测试(不给 LLM 特别的例子进行提示)中,Llama-2 表现特别糟糕,很多时候生成的代码都没法运行,Vicuna-1.5 稍微好点,而两代 GPT 虽然有较高的 API 误用,但是代码能执行的概率还是很高的;

  2. 在 one-shot 测试(给一个实际的代码范例作为提示)中,所有的四家 LLM 都能以较高的成功率生成出来可以运行的代码,但是 API 误用的比例并没有什么改善;

  3. 在 one-shot relevant 测试(给一个实际的代码范例作为提示,且这个范例和问题是相关的)中,除了 Llama-2 以外,其他三个 LLM 的 API 误用的比例下降了,但是 Vicuna-1.5 产生不能运行的代码的比例反而又升高了……

针对不同的 API,各家模型的表现也不尽相同:

总结一下,所有的大语言模型里面,GPT-4 在生成代码方面表现最好的(生成代码可运行的比例是最高的),但是大家都非常“擅长”生产出 API misuse,这一点可能和一个编程初学者类似?而且下面的例子展示出 LLM 的进化能力:

总之,研究人员试图去指出 LLM 的不足之处,但是编辑部觉得,这篇论文展示出了一个当前 LLM 的水平线,如果你现在的编程开发水平还达不到这个水准,考虑到 LLM 那种007的工作效率,那可能转行去(开滴滴、送外卖好像也要被取代了)搞安全研究是不是更好一些?


论文:https://arxiv.org/pdf/2308.10335.pdf


免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐