Turbulence: Systematically and Automatically Testing Instruction-Tuned Large Language Models for Code[URL]Authors: Shahin Honarvar ; Mark van der Wilk ; Alastair Donaldson
Summary: We present a method for systematically evaluating the correctness and robustness of instruction-tuned large language models (LLMs) for code generation via a new benchmark, Turbulence. Turbulence consists of a large set of natural language $\textit{question templates}$, each of which is a programming problem, parameterised so that it can be asked in many different forms. Each question template has an associated $\textit{test oracle}$ that judges whether a code solution returned by an LLM is correct. Thus, from a single question template, it is possible to ask an LLM a $\textit{neighbourhood}$ of very similar programming questions, and assess the correctness of the result returned for each question. This allows gaps in an LLM’s code generation abilities to be identified, including $\textit{anomalies}$ where the LLM correctly solves $\textit{almost all}$ questions in a neighbourhood but fails for particular parameter instantiations. We present experiments against five LLMs from OpenAI, Cohere and Meta, each at two temperature configurations. Our findings show that, across the board, Turbulence is able to reveal gaps in LLM reasoning ability. This goes beyond merely highlighting that LLMs sometimes produce wrong code (which is no surprise): by systematically identifying cases where LLMs are able to solve some problems in a neighbourhood but do not manage to generalise to solve the whole neighbourhood, our method is effective at highlighting $\textit{robustness}$ issues. We present data and examples that shed light on the kinds of mistakes that LLMs make when they return incorrect code results.
Summary: We present a method for systematically evaluating the correctness and robustness of instruction-tuned large language models (LLMs) for code generation via a new benchmark, Turbulence. Turbulence consists of a large set of natural language $\textit{question templates}$, each of which is a programming problem, parameterised so that it can be asked in many different forms. Each question template has an associated $\textit{test oracle}$ that judges whether a code solution returned by an LLM is correct. Thus, from a single question template, it is possible to ask an LLM a $\textit{neighbourhood}$ of very similar programming questions, and assess the correctness of the result returned for each question. This allows gaps in an LLM’s code generation abilities to be identified, including $\textit{anomalies}$ where the LLM correctly solves $\textit{almost all}$ questions in a neighbourhood but fails for particular parameter instantiations. We present experiments against five LLMs from OpenAI, Cohere and Meta, each at two temperature configurations. Our findings show that, across the board, Turbulence is able to reveal gaps in LLM reasoning ability. This goes beyond merely highlighting that LLMs sometimes produce wrong code (which is no surprise): by systematically identifying cases where LLMs are able to solve some problems in a neighbourhood but do not manage to generalise to solve the whole neighbourhood, our method is effective at highlighting $\textit{robustness}$ issues. We present data and examples that shed light on the kinds of mistakes that LLMs make when they return incorrect code results.
Q: 这篇论文试图解决什么问题?
A: 这篇论文提出了一种新的方法,用于系统评估指令调整的大型语言模型(LLMs)在代码生成方面的正确性和鲁棒性。作者们创建了一个名为“Turbulence”的新基准测试,它由大量自然语言问题模板组成,每个模板都是一个编程问题,参数化以便可以以许多不同的形式提出。每个问题模板都有一个相关的测试预言机,可以判断LLM返回的代码解决方案是否正确。通过这种方法,可以从单个问题模板向LLM提出非常相似的编程问题的邻域,并评估每个问题的结果的正确性。这使得可以识别LLM代码生成能力的差距,包括LLM能够正确解决邻域中的几乎所有问题,但未能概括解决整个邻域的异常情况。作者们使用来自OpenAI、Cohere和Meta的五个LLM进行了实验,每个LLM在两种温度配置下进行评估。他们的发现表明,Turbulence能够揭示LLM推理能力的缺陷。这超越了仅仅强调LLM有时会生成错误的代码(这不是惊喜):通过系统地识别LLM能够在邻域中的一些问题上解决,但不能概括解决整个邻域的情况,他们的方法有效地突出了鲁棒性问题。作者们还提供了数据和例子,揭示了LLM返回不正确代码结果时犯的错误类型。
Q: 有哪些相关研究?
A: 有几项相关工作涉及到评估大型语言模型(LLMs)在代码生成方面的正确性和鲁棒性。一些研究已经创建了基准测试和编程数据集,如HumanEval、Automated Programming Progress Standard(APPS)、CodeContests、Mostly Basic Programming Problems(MBPP)、MathQA-Python、EvalPlus和CodeXGLUE,以评估LLMs在代码方面的正确性。其他研究则专注于评估LLMs的鲁棒性,例如D¨oderlein等人评估了GitHub Copilot和Codex对提示变化的敏感性,Wang等人介绍了ReCode框架以评估Python函数完成的CodeGen模型的鲁棒性。此外,还有研究调查了LLMs在代码翻译、故障定位和程序修复、提高Python代码补全质量、LLMs的可解释性、由LLMs生成的代码的自动修复以及评估指令调整的LLMs在SE任务上的性能影响。
Q: 论文如何解决这个问题?
A: 为了解决评估大型语言模型(LLMs)在代码生成方面的正确性和鲁棒性的问题,论文提出了一种新的方法,涉及使用相关编程问题的邻域。论文介绍了“Turbulence”,这是一个新基准测试,它由大量自然语言问题模板组成,每个模板都是一个参数化的编程问题。每个问题模板都有一个相关的测试预言机,可以判断LLM返回的代码解决方案是否正确。通过从单个问题模板向LLM提出非常相似的编程问题的邻域,可以评估每个问题的正确性结果。这使得可以识别LLM代码生成能力的差距,包括LLM能够正确解决邻域中的几乎所有问题,但未能概括解决整个邻域的异常情况。论文使用来自OpenAI、Cohere和Meta的五个LLM进行了实验,每个LLM在两种温度配置下进行评估。他们的发现表明,Turbulence能够揭示LLM推理能力的缺陷。这超越了仅仅强调LLM有时会生成错误的代码(这不是惊喜):通过系统地识别LLM能够在邻域中的一些问题上解决,但不能概括解决整个邻域的情况,论文的方法有效地突出了鲁棒性问题。论文还提供了数据和例子,揭示了LLM返回不正确代码结果时犯的错误类型。
Q: 论文做了哪些实验?
A: 论文使用来自OpenAI、Cohere和Meta的五个大型语言模型(LLMs)进行了实验,每个模型在两种温度配置下进行评估。具体来说,实验涉及以下步骤: 1. 使用Turbulence基准测试对LLMs进行评估,该基准测试由大量自然语言问题模板组成,每个模板都是一个参数化的编程问题。每个问题模板都有一个相关的测试预言机,可以判断LLM返回的代码解决方案是否正确。 2. 从单个问题模板向LLM提出非常相似的编程问题的邻域,并评估每个问题的正确性结果。这使得可以识别LLM代码生成能力的差距,包括LLM能够正确解决邻域中的几乎所有问题,但未能概括解决整个邻域的异常情况。 3. 分析LLMs在正确性和鲁棒性方面的性能,并将其与温度设置的变化进行比较。 4. 提供数据和例子,揭示LLM返回不正确代码结果时犯的错误类型。 论文发现,GPT-4在所有模型中表现一致优于其他模型。然而,当面临问题邻域时,所有LLMs都表现出明显的缺乏鲁棒性。降低温度到0总体上提高了所有问题的正确性分数(不包括Command模型)。然而,它也在不正确的答案中引入了更高多样性的错误。未来的研究方向包括评估量化(使用不同变体,如INT6和INT8)对LLMs代码性能的影响。此外,论文的作者们设想开发一个类似于Turbulence的基准测试,专门设计用于评估支持不完整代码片段填充的生成模型。
Q: 有什么可以进一步探索的点?
A: 论文提出了几个未来研究方向: 1. 评估量化对LLMs代码性能的影响:未来的工作可以探索使用不同变体的量化(如INT6和INT8)评估LLMs在代码生成任务上的表现。 2. 开发类似于Turbulence的基准测试,专门设计用于评估支持不完整代码片段填充的生成模型:未来的工作可以涉及创建一个新的基准测试,用于评估LLMs完成不完整代码片段的能力。 3. 探索LLMs推理能力的限制:论文的结果揭示了LLMs在概括解决编程问题的邻域方面的推理能力的差距。未来的工作可以更详细地研究这些差距,并试图了解LLMs推理的潜在限制。 4. 将Turbulence与其他LLMs集成:论文的结果基于评估的一组LLMs,未来的工作可以将Turbulence与其他LLMs集成,例如Google的Bard,它由Gemini Pro提供支持,作者已经请求了API访问,但仍然在等待列表中。这将允许在更大的LLMs样本上评估Turbulence。 5. 使用替代问题模板:论文使用作者设计的问题模板,而不是从互联网上汇编“现实世界”的问题,以避免训练数据偏见。未来的工作可以使用替代问题模板集进行Turbulence评估,这可能提供有关LLMs代码生成能力的其他见解。
Q: 总结一下论文的主要内容
A: 这篇论文介绍了一种新的方法,用于系统评估指令调整的大型语言模型(LLMs)在代码生成方面的正确性和鲁棒性。作者们创建了一个名为“Turbulence”的新基准测试,它由大量自然语言问题模板组成,每个模板都是一个编程问题,参数化以便可以以许多不同的形式提出。每个问题模板都有一个相关的测试预言机,可以判断LLM返回的代码解决方案是否正确。通过这种方法,可以从单个问题模板向LLM提出非常相似的编程问题的邻域,并评估每个问题的结果的正确性。这使得可以识别LLM代码生成能力的差距,包括LLM能够正确解决邻域中的几乎所有问题,但未能概括解决整个邻域的异常情况。作者们使用来自OpenAI、Cohere和Meta的五个LLM进行了实验,每个LLM在两种温度配置下进行评估。他们的发现表明,Turbulence能够揭示LLM推理能力的缺陷。这超越了仅仅强调LLM有时会生成错误的代码(这不是惊喜):通过系统地识别LLM能够在邻域中的一些问题上解决,但不能概括解决整个邻域的情况,他们的方法有效地突出了鲁棒性问题。作者们还提供了数据和例子,揭示了LLM返回不正确代码结果时犯的错误类型。