Turbulence: Systematically and Automatically Testing Instruction-Tuned Large Language Models for Code[URL]Authors: Shahin Honarvar ; Mark van der Wilk ; Alastair Donaldson

101次阅读
没有评论

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 $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 $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 $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 $anomalies$ where the LLM correctly solves $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 $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 返回不正确代码结果时犯的错误类型。

正文完
 
评论(没有评论)