特别注意:本文搬运自 github 项目 anthropics/courses/prompt_evaluations ,经过中文翻译,内容可能因为转译有少数表达上的改动,但不影响主要逻辑,仅供个人阅读学习使用
Evaluations 101 评估基础
本课程(以及后续的八门课程)专注于编写 LLM 用例评估的方法,这是开发人工智能应用的关键组成部分。
在快速发展的人工智能领域,大型语言模型已成为各行各业企业的强大工具。
然而,要充分发挥这些模型的潜力,不仅需要实施,还需要仔细评估和优化。这就是提示评估,或称为“评估”发挥作用的地方。
这些是我们内部解决方案架构师团队的两位真实引言,解释了为什么评估如此重要:
团队衡量其模型性能的能力(或无法能力)是 LLMs 生产用例的最大障碍,同时也使提示变成了一种艺术而不是科学 尽管评估需要花费大量时间,但提前进行评估将长期节省开发人员的时间,并使更好的产品能更快地推出
开发人员不编写评估有两个主要原因:
-
不清楚如何实际实施评估
-
本课程旨在解释这两部分:评估是什么以及如何撰写评估。
本入门课程介绍了第一部分,阐述了评估的概念,并对各种评估方法进行了高层级的概述。
Benchmarks 基准测试
在我们深入客户评价之前,让我们花点时间讨论一种大多数人熟悉的形式的评价:模型基准测试。
模型基准测试就像 AI 世界的标准化考试。就像 SAT 分数据说是为了给大学一个关于学生学术能力的总体概念一样,模型基准测试也给我们提供了一个关于 AI 模型在一系列任务中表现如何的总体概念。
创建大型语言模型的公司会运行这些基准测试来展示他们的模型能做什么。你可能会看到在名为 ARC、MMLU 或 TruthfulQA 等奇怪名称的测试中取得令人印象深刻的分数。
这些基准涵盖了从基本的阅读理解到跨各个领域的进阶推理和知识。它们对于比较不同的模型和跟踪人工智能能力的整体进展很有用。
你可能熟悉显示基准分数的模型卡:
虽然这些基准测试对于炫耀权利和了解模型的一般能力很有用,但它们并非全部真相。
它有点像知道一个人的智商分数——它可能(或者不可能!)告诉你一些关于他们一般智力的信息,但它并不能告诉你他们是否擅长你的特定工作。
Customer evaluations 客户评价
想象一下,你刚刚买了一把崭新的瑞士军刀。它配有几十种工具和小配件,但你主要感兴趣的是用它来在露营时开罐头。
当然,它也能修剪指甲或开启葡萄酒瓶,但它实际开罐头的效果如何?这就是针对大型语言模型的即时评估的重要性所在。
LLMs 就像超级瑞士军刀一样,用于处理文本。它们可以用语言做各种各样令人惊叹的事情,从写诗到编写软件。
但是,当你使用 LLM 执行特定任务——比如回答客户服务邮件或生成产品描述——你需要知道它在特定工作上的表现如何。
这就是提示评估,或简称“评估”,发挥作用的地方。提示评估(也称为客户评估)是系统测试,旨在衡量 LLM 在你的特定用例上的表现。
它们是 LLM 的通用能力和你的业务应用独特需求之间的关键桥梁。
通过实施稳健的评估指标,您可以确保模型和提示组合不仅符合通用基准,而且在您需要它执行的特殊任务中表现出色。
评估的主要好处包括:
- 迭代提示改进 - 我的 v2 提示在我的特定任务上是否比 v1 做得更好?
- 部署前后的质量保证和提示更改 - 我们最新的提示更新是否导致了回归?
- 客观模型比较 - 我们能否切换到 Anthropic 的最新模型并保持或提高我们当前的评估性能?
- 潜在的成本节约 - 我们能否切换到 Anthropic 最便宜且最快的模型并保持我们当前的评估性能?
在编写和优化提示时,我们遵循一个迭代过程,该过程围绕评估展开:
- 我们首先开发测试用例,稍后我们将了解更多关于它们的内容。
- 然后我们为我们的特定用例编写一个草稿提示。
- 接下来,我们使用我们的测试用例测试提示,并衡量模型在我们给定任务中的表现。我们需要某种基线分数。
- 一旦我们有了基线分数,我们就可以修改我们的提示并重复该过程。
评估都是关于为我们的提示+模型组合分配指标来量化其质量。没有定量的测量,我们如何知道对提示的更改是否带来了改进?
评估包含哪些内容?
一个设计良好的提示评估由四个主要组成部分构成:
- 示例输入: 这是给模型提供的指令或问题。设计能够准确反映您的应用程序在实际使用中会遇到的各种输入的提示至关重要。
- 标准答案: 这是作为模型输出基准的正确或理想响应。创建高质量的标凈答案通常需要领域专家的输入以确保准确性和相关性。
- 模型输出: 这是基于输入提示由 LLM 生成的实际响应。这是您将用来评估与标准答案的匹配程度的内容。
- 评分: 这是一个表示模型在特定输入上表现的数量化或定性值。评分方法可以根据任务性质和评分方式的不同而有所不同。
我们通常建议至少有 100 个测试用例/黄金答案对以获得最佳结果,但是为了降低遵循本课程的学员的 API 成本,我们的大多数评估将使用更少的对。
示例评估数据集
想象一下,如果我们想使用一个 LLM 来分类客户的投诉。一个(非常小)的评估数据集可能看起来像这样:
eval_data = [ { “complaint”: “The app crashes every time I try to upload a photo”, “golden_answer”: [“Software Bug”] }, { “complaint”: “My printer isn’t recognized by my computer”, “golden_answer”: [“Hardware Malfunction”] }, { “complaint”: “I can’t figure out how to change my password”, “golden_answer”: [“User Error”] } ]
对于每个输入的投诉,我们都包含一个相应的黄金答案分类。我们将在接下来的课程中扩展这个示例,并学习如何运行和评估。
评分方法
选择合适的评分方法是确保我们评估有效性的关键。每种方法都有其优势,适用于不同类型的任务。
人机评分
对于需要细致理解或主观判断的任务,基于人的评分仍然是黄金标准。这种方法涉及让个人——通常是领域专家——审查模型的输出,评估其质量,并为每个输出分配分数。
人工评分在评估语气、创造力、复杂推理或事实性等方面表现出色,尤其是在处理开放式任务或答案的正确性取决于微妙上下文因素时。它特别有价值。
不足之处在于它耗时且可能昂贵,尤其是在大规模评估时。它还容易受到不同评分者之间不一致性的影响。
人工评分的形式包括:
- 专家评审: 领域专家评估回答的准确性和深度。
对于讨论抵押贷款选项的银行聊天机器人,律师可能会手动审核回复,以确保其符合公平贷款法,并准确反映条款。皮肤科医生可能会评估模型皮肤癌筛查建议,检查正确识别、适当紧迫性以及与最新研究的一致性。 - 用户体验小组: 一个小组评估输出内容的清晰度、帮助性、参与度和其他基于人类的判断。
代码评分
基于代码的评分使用程序化方法来评估模型的输出。这种方法适用于具有明确、客观标准的任务。
例如,如果你使用 LLM 从文本中提取特定数据点,你可以使用代码来检查提取的信息是否与预期值匹配。
基于代码的评分的主要优势在于其速度和可扩展性。一旦设置好,它可以快速且一致地处理数千次评估。然而,它在处理细微差别或主观响应方面的能力有限。
常见的基于代码的评分技术包括精确字符串匹配、关键字存在检查和使用正则表达式进行模式匹配。
代码评分的形式包括:
- 精确字符串匹配评分 - 这是最严格的形式,其中模型的输出必须与黄金答案逐字符完全相同。这就像一个只有正确答案的选择题。
对于一个地理测验,问题可能是“法国的首都是什么?”唯一被接受的答案将是“巴黎”。 - 关键词存在 - 这种方法检查模型的输出是否包含某些关键单词或短语,无论它们的顺序或上下文如何。
在一个产品支持聊天机器人中,查询“如何重置我的 SmartHome 恒温器?”可能需要答案中包含“按住”、“按钮”、“5 秒”和“闪烁的灯”这些关键词。 - 正则表达式 :我们可以定义正则表达式来检查复杂的文本模式。
一个评估信用卡资格的银行聊天机器人可能需要模式 “您的信用分数为 \d{3} (符合|不符合) 我们的 \w+ 卡” 来确保它提供分数和结果。 - 还有很多!
基于 LLM 的评分
基于 LLM 的评分方法介于基于代码和基于人工的方法之间。这种方法使用另一个 LLM(有时是同一个)来评估输出。
通过精心设计评分提示,你可以利用 LLM 的语言理解能力来评估广泛的指标。
这种方法可以处理比基于代码的评分更复杂和主观的评估,同时比人工评分更快、更具可扩展性。
然而,它需要熟练的提示工程来确保可靠的结果,并且始终存在评分 LLM 引入自身偏见的风险。
模型评分的形式包括:
- 摘要质量 - 这个摘要有多简洁和准确?
- 语气评估 - 这个回复是否符合我们的品牌指南或语气?
- 任何其他质量! - 我们可以定义自己的自定义评分标准,让大型语言模型根据我们能够想象到的任何指标来评分输出:输出有多道歉?输出是否提到了竞争对手?
结论
实现稳健的提示评估是开发有效 LLM 应用的关键步骤。通过系统地测试和优化你的提示,你可以确保你的应用提供一致、高质量的结果,满足你的特定需求。
请记住,在创建良好的评估上投入的时间会在改进性能、简化优化和增强你对 LLM 解决方案的信心上得到回报。
接下来,让我们学习如何编写评估!