Press "Enter" to skip to content

稳定航线:航行LLM申请的评估

评估LLM应用的重要性和如何开始

一位受伤的海盗膝盖上的呈错误问题建立在LLM上的急救助手寻求建议的图像。图像由DALL·E 3作者生成。

导言

大型语言模型(LLMs)充斥着各种各样的应用。回答关系数据库问题的聊天机器人,帮助程序员高效编写代码的助手,以及代表您采取行动的副驾驶员都是一些例子。LLMs的强大能力使您能够在项目中获得初步成功。然而,当您从原型转变为成熟的LLM应用时,一个稳健的评估框架变得至关重要。这样的评估框架有助于使您的LLM应用达到最佳性能,并确保结果的一致可靠。在本博客文章中,我们将涵盖以下内容:

  1. 评估LLM与评估基于LLM的应用的区别
  2. LLM应用评估的重要性
  3. LLM应用评估的挑战
  4. 开始
    1. 收集数据并构建测试集
    2. 测量性能
  5. LLM应用评估框架

通过虚构的FirstAidMatey的例子,一个为海盗设计的急救助手,我们将在评估技术,挑战和策略的海洋中航行。我们将总结关键要点和见解。所以,让我们在这个启发性之旅中起航!

评估LLM与评估基于LLM的应用的区别

通常,评估单个大型语言模型(LLMs),如OpenAI的GPT-4,Google的PaLM 2和Anthropic的Claude,使用基准测试(如MMLU)。然而,在这篇博客文章中,我们感兴趣的是评估基于LLM的应用。这些应用由LLM提供动力,并包含其他组件,如管理LLM调用序列的协调框架。通常使用Retrieval Augmented Generation (RAG) 来为LLM提供上下文并避免虚构。简而言之,RAG要求将上下文文档嵌入到向量存储中,从中可以检索相关片段并与LLM共享。与LLM相比,基于LLM的应用(或LLM应用)被构建为在一个或多个特定任务方面表现出色。找到合适的设置通常需要一些实验和迭代改进。例如,RAG可以以多种不同的方式实施。正如本博客文章所讨论的评估框架可以帮助您找到适合您的用例的最佳设置。

在基于LLM的应用上下文中使用LLM会使其更加强大。

FirstAidMatey是一款基于LLM的应用,帮助海盗解决问题,例如“我的手被绳索夹住了,现在肿了,朋友应该怎么办?” 最简单的构建中,编排器只包含一个提示,将用户的问题提供给LLM并要求它提供有效的答案。它还可以指示LLM以海盗语回答,以实现最佳理解。作为扩展,可以增加一个嵌入了急救文档的向量存储。根据用户的问题,可以检索相关文档并将其包含到提示中,以使LLM能够提供更准确的答案。

LLM应用评估的重要性

在我们了解如何进行评估之前,让我们看看为什么要建立一个评估系统来评估基于LLM的应用。主要目标有三个:

  • 一致性:确保在所有情境下LLM应用产生稳定可靠的结果,并在发生回退时发现问题。例如,当您改进特定情境下的LLM应用性能时,希望被警告以防在其他情境下性能受损。当使用像OpenAI的GPT-4这样的专有模型时,您还受制于其更新计划。随着新版本的发布,您当前的版本可能会逐渐过时。研究表明,切换到新版GPT并不总是更好。因此,能够评估新版本如何影响LLM应用的性能非常重要。
  • 见解:了解LLM应用表现良好的领域以及有哪些改进空间。
  • 基准测试:建立LLM应用的性能标准,测量实验的效果并自信地发布新版本。

作为结果,您将实现以下效果:

  • 获得用户的信任和满意,因为您的LLM应用程序将始终表现出色。
  • 增加利益相关者的信心,因为您可以展示LLM应用程序的表现以及新版本如何改进旧版本。
  • 提升竞争优势,因为您可以快速迭代、改进并自信地部署新版本。

LLM应用程序评估的挑战

在阅读了上述优势之后,采用基于LLM的应用程序会有利。但在这之前,我们必须解决以下 两个主要挑战

  • 缺乏标记的数据:与传统的机器学习应用程序不同,基于LLM的应用程序不需要有标记的数据就可以开始运行。LLMs可以完成许多任务(如文本分类、摘要生成等),而无需提供特定示例。这很好,因为我们无需等待数据和标签,但另一方面,这也意味着我们没有数据来检查应用程序的表现。
  • 多个有效答案:在LLM应用程序中,同样的输入往往会有多个正确答案。例如,聊天机器人可能提供具有类似含义的多个回复,或者可以生成实现相同功能但结构不同的代码。

为了解决这些挑战,我们必须定义适当的数据和度量标准。我们将在下一节中完成这些工作。

入门

收集数据和建立测试集

为了评估基于LLM的应用程序,我们使用一个包含测试用例,每个测试用例都有特定输入和目标的测试集。这些内容取决于应用程序的目的。例如,代码生成应用程序期望输入口头指令,并返回代码作为输出。在评估过程中,将为LLM应用程序提供输入,并将生成的输出与参考目标进行比较。以下是FirstAidMatey的几个测试用例:

我们的急救聊天机器人应用程序的一些测试用例。

在此示例中,每个测试用例包含一个问题作为输入和一个正确的参考答案作为目标。除此之外,还可以将历史响应甚至历史用户反馈添加到测试用例中。这可以让您检查新答案是否改进了旧答案,以及是否处理了用户反馈。理想情况下,您的测试集由经过验证的参考答案组成,但是如果您想快速将新模型与旧模型进行比较,可以使用历史响应和反馈。

由于通常在没有数据集的情况下开始开发基于LLM的应用程序,因此尽早开始构建测试集非常重要。您可以通过添加当前模型失败的示例来逐步进行迭代。最初,开发人员将最多地与LLM应用程序进行测试,并根据其手动测试添加第一个测试用例。然而,重要的是尽快将业务或最终用户纳入到这个过程中,因为他们对相关的测试用例有更好的理解。为了启动测试集,您还可以使用LLM基于您的知识库生成输入-目标对。随着时间的推移,测试集应涵盖最重要的终端用户关心的所有话题。因此,收集用户反馈并为性能欠佳和少见的话题添加测试用例非常重要。

评估性能测量

有了一组测试用例,现在我们可以将输入传递给LLM应用程序,并将生成的响应与目标进行比较。由于每个输入没有一个确定的正确答案,我们无法直接将响应与参考答案进行比较。响应可能在措辞上有所不同,但与参考答案意义相同。然而,我们可以评估响应的几个属性,作为响应质量的替代。要测试的相关属性取决于应用程序和可用数据。以下是FirstAidMatey响应的一些属性以及如何将其转化为度量标准:

  • 事实一致性:使用LLM评估生成的答案是否与参考答案在事实上一致。
  • 海盗风格:使用LLM评估答案是否用海盗术语书写。
  • 语义相似性:计算生成答案和参考答案的嵌入向量之间的余弦相似度。请注意,这种计算比事实一致性要便宜得多,但可能与正确答案的相关性不太高。
  • 冗余性:将生成答案的长度除以参考答案的长度。冗余性越高,LLM应用程序的对话越多,这可能不是应用程序的本意。
  • 延迟:测量LLM应用程序生成响应的时间。这使您可以在更准确但较慢的配置之间进行权衡。

根据用例不同,您可以拥有更多/不同的属性。例如,对于一个代码生成的LLM应用程序,一个额外的属性可以是生成代码的语法正确性,可以通过将代码发送到编译器来衡量。下图说明了如何使用LLM评估属性。

通过另一个LLM调用评估事实一致性指标的示例插图。

一旦所有属性对所有测试案例进行了评估,就可以计算出每个指标的平均分数,并与基线/目标性能进行比较。当您尝试不同的配置(例如,RAG)时,测试分数可以指出最有利的候选者。正确性、冗余性和延迟之间的权衡也变得清晰。除了指标分数之外,失败案例还可以为进一步改进提供有用的见解。仔细查看一些测试失败的情况,它们可能为进一步改进您的LLM应用程序提供有用的见解。

也许你会想:“如果LLM不能正确回答问题,我们如何相信它来评估相同的答案?会不会有对其自身输出的偏见?”的确,这听起来有些违反直觉,但这里的主要想法是评估比生成更容易。考虑创作和评估绘画的类比。当你创作一幅画时,你需要同时考虑多个因素,如构图、颜色、透视、光影、质感、意图等。而评估一幅画则可以让你一次只关注一个因素;评判一件完成的作品比从头开始制作作品更简单。同样的想法适用于LLM:生成合适的响应可能具有挑战性,但对现有响应进行批判性评估更直接。如果有参考响应可用(例如事实一致性属性),评估就变得更加可行。

LLM应用程序评估框架

让我们在最后一节中将所有内容综合起来。下图显示了评估框架的概述,并说明了一个重要的反馈环路:

  1. LLM应用程序、属性和测试案例传递给评估器,评估器会循环遍历所有测试案例并将测试输入传递给LLM应用程序。然后,通过循环遍历属性并将结果收集为指标来进行评估。
  2. 评估结果被存储以供进一步分析。除了指标外,跟踪LLM应用程序的配置(例如使用的LLM和参数、使用的RAG组件和参数、系统提示等)也非常重要,以便您可以轻松区分最有希望的实验并获得改进该应用程序的见解。您可以将评估结果和LLM应用程序配置存储在自己的数据库中,或者使用像MLflow这样的工具,它为您提供了用户友好的界面。
  3. 一旦您对性能满意,就可以将新版本的应用程序发布给内部或外部用户。
  4. 在项目的早期阶段,进行测试和收集反馈的将是开发人员。随后,可以从最终用户那里收集反馈,无论是直接(点赞/点踩和书面反馈)还是隐式(对话交流次数、会话时长、接受的代码建议等)。
  5. 通过分析进入的反馈,扩展测试集并添加测试案例来处理当前模型未充分考虑和处理的情况。
  6. 找出进入反馈中的趋势,并将其转化为LLM应用程序的改进。根据情况,您可以改进编排器(例如,通过分别调用一系列独立的LLM而不是单个提示),改进检索过程(例如,改进嵌入)或者LLM(例如,更改模型、参数甚至考虑微调)。
LLM基础应用评估框架概述。

要了解步骤1和2的示例,请查看以下Jupyter笔记本。这个笔记本演示了本博客文章中解释的概念。您可以看到如何定义和发送属性、测试用例和LLM应用程序版本到评估者。除了打印评估结果外,它们还记录在MLflow仪表板中进行进一步分析。一定要查看,这将使讨论的主题更加具体。

结论

评估LLM基础应用程序是LLM应用程序开发的重要组成部分。本博客文章介绍的评估框架简化了开发过程中的实验比较,确保一致的性能,并为进一步改进提供了见解。

缺乏标记数据,即我们遇到的第一个挑战,可以通过早期构建一个测试集,并通过添加困难和代表性较低的案例来迭代扩展它来解决。第二个挑战,即通常存在多个正确答案的事实,可以通过查看生成输出的不同属性来克服。其中一些属性可以用简单的公式或规则进行测量,而其他属性可以用LLM进行评估。

最后,我们发现了一个关键的反馈循环,即评估结果和收集到的用户反馈推动LLM应用程序的性能提升。总之,系统化的评估是引导LLM应用程序走向成功的指南!

作者说明:本博客文章的灵感来源于我作为Radix的解决方案架构师的经验。Radix是一家比利时人工智能公司,专注于为各行各业开发创新的机器学习解决方案和应用程序。如果您对LLM基础应用程序想要了解更多信息,我鼓励您访问radix.ai,或直接在LinkedIn上联系我。

除非另有说明,所有图片均为作者所拍摄。

Leave a Reply

Your email address will not be published. Required fields are marked *