大模型评估:指标和方法【上】(二)

Wait 5 sec.

大模型的发展愈发迅猛,评估却常常落后一步。本文围绕多维评估指标与方法论展开,深入剖析模型性能到底该如何被“看见”。延续上篇思路,本篇将从实战出发,为你补齐模型评估的“底层逻辑”。Andrej Karpathy:“优质的评估体系很难搭建,在特斯拉时,我大概要把三分之一的时间花在数据上,三分之一花在评估上,剩下三分之一花在其他所有事上。评估体系必须全面、有代表性、高质量,还要能衡量梯度信号(即不能太简单,也不能太难),而且有很多细节得处理到位。”大模型评估(文本指的是针对依赖大模型能力构建的各类产品的评估)是一种测试方式,帮助确保你的AI产品能够实现预期功能,不论是编写代码还是处理客服工单。它与基准测试不同,是通过特定的任务来测试具体的产品,而非比较不同模型的能力。在人工智能产品的整个生命周期中,从上线前的测试到上线后的实时监控,都需要进行这类评测。本文聚焦于自动化的大模型评估方法,将介绍从摘要生成到聊天机器人等各类场景的评估指标与方法。目标是为相关从业人员(领域专家、产品经理、测试人员等)提供全面概述,以便之后能轻松为遇到的任何大语言模型相关任务选择合适的评估方法。评估方法主要分为两类:基于参考答案的评估和没有参考答案的评估。基于参考答案的评估方法:通过精确匹配、词汇重叠、嵌入相似度或使用大语言模型作为裁判,将模型响应与已知的真实答案进行对比。对于分类和排序任务(在检索增强生成(RAG)中常见),存在特定于任务的质量指标。无参考答案的评估方法:通过相关指标和自定义标准评估输出,所使用的工具包括正则表达式、文本统计、编程验证、自定义大语言模型裁判以及基于机器学习的评分。“大模型作为裁判”是最常用的方法之一。通过提示让大模型根据自定义标准对输出进行评分,并且能够处理对话级别的评估。影响评估方法和指标选择的因素1. 是否有参考答案?要选择合适的方法和指标,首先需要确定评估场景。评估场景主要分为两类:基于参考答案的评估:将输出结果与预定义正确答案进行比较。没有参考答案的评估:直接对输出进行评估。基于参考答案的评估会将输出与已知答案进行对比。一旦创建了测试数据集,你的工作就是衡量新的模型输出与这些已知答案的匹配程度。评估方法涵盖从精确匹配到语义比较等多种方式。无参考答案的评估无需预定义答案。相反,它会根据特定的指标或属性(如语气、结构或安全性)来评估输出。这种评估适用于:创建真实数据难度大或不现实的任务,例如聊天机器人对话或创意写作。它也非常适合实时监控,可对输出进行实时评分。其中一种常用方法是 “大模型作为裁判”,也就是通过提示词让大模型从多个维度评估输出,例如询问 “该响应是否有帮助?”部分评估方法(如大模型作为裁判、语义相似度)在两种场景中都适用。然而,许多指标仅适用于基于参考答案的场景,因此区分这两种情况很重要。2. 是否存在唯一正确答案?即使有参考答案,还一个关键问题是:每个输入是否存在唯一正确的答案?如果存在,可以使用简单直接的确定性评估方法。这种情况下将实际结果与预期结果进行比较会很容易。当大模型处理预测类任务时,也可以借助成熟的机器学习任务相关指标,这种情况的出现频率比我们想象的更高。即使你的产品并非用于预测任务,其部分功能也可能涉及预测。例如,聊天机器人中的意图识别可能用于检测用户意图,对意图进行分类;或者你可能需要为 RAG 系统解决排序问题。这两种预测任务都有多种评估指标可供选择。但并非总是存在唯一的 “完美” 答案。在翻译、内容生成或摘要生成任务中,存在多个有效的输出答案,此时精确匹配就不再适用。相反,需要使用语义相似度等比较方法来应对输出的多样性。无参考答案的评估也存在类似情况。有时候我们可以采用客观方法进行评测,例如运行生成的代码查看其是否能正常运行,或验证 JSON 键。但在大多数情况下,都需要处理开放的输出结果。因此需要找到量化主观属性的方法,或设计出特定的个性化指标。大模型评估方法现在,我们来介绍大模型评估的具体方法和指标(文本指的是针对依赖大模型能力构建的各类产品/系统的评估)。下面将根据处理的任务是否需要参考答案(是/否)对这些方法进行分类,并逐一介绍。1. 基于参考答案的评估基于参考答案的评估非常适合对比选型。当测试不同的提示词、模型或配置时,需要一种能够清晰的追踪比较结果的方法,否则就只是在盲目尝试各种想法。评估过程本身很简单:1. 将测试数据传入系统。2. 生成新的输出。3. 将新输出与参考答案进行比较。有一点需要注意:评估的效果取决于测试数据集。必须标注部分数据、或者用模型创建合成用例,又或者从生产日志中提取数据。数据集需要具有多样性,并且随着新用户场景或问题的出现,要不断更新。如果数据集规模过小且过于简单,评估结果将毫无意义。1)分类指标一句话总结:这类评估指标有助于量化二元分类和多元分类等任务在数据集上的性能表现。分类是为每个输入预测一个标签,大模型也能直接处理分类任务。以下是一些例子:意图识别:将聊天机器人的查询分类为 “退货” 或 “付款” 等类别。行动路由:根据用户输入预测正确的下一步操作。工单分类:根据紧急程度(如高、中、低)或主题(如技术问题、账单问题)为工单添加标签。内容审核:标记违反政策的内容,如垃圾邮件或脏话。评论标注:将反馈标记为正面、负面或中性。每个任务都有预定义的类别,系统需要将每个输入分配到其中一个类别,如果允许添加多个标签,有时也可分配到多个类别。需要检查系统在各类输入上是否能正确分类。例如,你正在测试一个聊天机器人的意图识别效果。首先,你需要准备一个包含用户问题及其正确分类的测试集。然后,将这些问题输入到问答应用中,并将其判断的分类结果与实际分类结果进行比较。一个直观的指标是准确率,它能告诉你正确分类的比例。但准确率并不总是最佳衡量标准,尤其是在生产数据不平衡的情况下。比如你将用户查询分为 “安全” 或 “不安全” 两类,以避免出现提供法律、医疗、财务建议等风险。在这种情况下,应该更关注以下指标:召回率:”我们是否捕获了所有不安全的输入?”精确率:”被标记的不安全查询中,有多少是真正不安全的?”这两个指标能提供全面的视角。例如,高召回率可能表明你捕获了所有不良输出。但如果精确率较低,就意味着你错误地标记了太多无害的查询。这会带来糟糕的用户体验!你可能还需要其他指标。例如,在内容审核场景中,你的系统可以完美检测出 “攻击性语言”,但却遗漏了大量 “垃圾邮件”。当存在多个类别时,仅追踪整体准确率可能会掩盖这种不平衡。以下是关键分类指标的简要总结:| 准确率(Accuracy) | 正确分类用例的比例。 || 精确率(Precision) | 所有预测的正例中,实际是真正例的比例。 || 召回率(Recall) | 所有实际正例中,被发现的真正例的比例。 || F1 分数(F1-Score) | 精确率与召回率的调和均值。 || 各类别指标(Per-class metrics) | 每个类别的精确率、召回率和 F1 分数。 |2)排序指标一句话总结:这些指标通过评估系统对相关结果的排序能力,衡量检索(包括 RAG)和推荐等任务的性能。当我们提到排序任务时,通常指搜索或推荐,这两种任务在大模型应用中都很重要。搜索(检索)是 RAG 中的 “R”。例如,聊天机器人可能需要搜索数据库以找到相关内容。它会检索并排序文档或上下文片段,然后大模型利用这些内容生成答案。大模型还可以重写查询,帮助用户更轻松地找到所需内容,也就是所谓的query改写。推荐的目标与搜索类似,返回排序后的选项列表,但侧重点不同。推荐的目的不是找到几个精确答案,而是为用户呈现大量优质选项供其浏览。例如,电商网站上的 “你可能还喜欢” 板块,或搜索引擎中的热搜提示建议。在这两种情况下,每个项目(文档、产品、片段等)都可被标记为相关或不相关,从而为评估创建真实数据。有了真实数据后,你就能评估系统性能。排序指标主要分为两类:与排名无关的指标:关注是否检索到相关项目,而不考虑它们的顺序。(系统是否找到了应找到的项目?)与排名有关的指标:考虑项目的顺序,对将相关结果排在前列的结果给予更高评分。例如,NDCG 等指标会同时评估相关性和排名顺序,对排序靠前的项目赋予更高权重。相比之下,命中率(Hit Rate)仅检查是否至少找到了一个正确答案,即使该答案排在最后。评估通常针对前 K 个结果(如前 5 个或前 10 个),因为系统通常会检索大量项目,但仅显示或使用其中一部分。例如,前 5 个结果命中率(Hit Rate@5)用于衡量至少一个相关结果出现在前 5 个位置的频率。以下是一些常用的排序指标:| Precision @k(前 k 项精确率) | 排名前 k 的项目中,相关项目的比例。 || Recall @k(前 k 项召回率) | 所有相关项目中,出现在排名前 k 的结果中的比例 || Normalized Discounted Cumulative Gain (归一化折损累计增益) | 衡量排名质量,对排名靠前的相关项目赋予更高权重。 || Hit Rate @K(前 k 项命中率) | 二元指标,用于检查排名前 k 的项目中是否至少出现一个相关项目。 || Mean Reciprocal Rank (MRR@K)(平均 reciprocal 排名) | 在所有查询中,排名前 k 的结果里,第一个相关项目的倒数排名的平均值。 |3)确定性匹配一句话总结:只要能编写代码来验证输出与正确答案是否匹配,就可以采用确定性匹配。分类和排序是具有明确定义指标的窄任务示例。但在其他情况下,也可能存在一个正确答案或接近正确的答案。例如:编码数据提取特定领域问答工作流中的单个步骤在这些情况下可以进行确定性匹配,以编程方式检查输出,类似于软件单元测试。但对于大模型,一个答案正确并不意味着其他答案也正确,因此你需要多种测试输入以确保覆盖全面。想象测试一个从招聘广告中提取信息(如识别职位名称)的系统,你可以对输出和预期结果进行精确匹配,或使用模糊匹配来处理细微差异(如格式或大小写)。如果输出为 JSON 格式(例如 { “job role”: “AI engineer”, “min_experience_yrs”: “3” }),你也可以匹配 JSON 键值对。如果涉及特定领域问答,可以构建一个包含预期关键词的真实数据集。例如,”法国的首都是什么?” 的答案应始终包含 “巴黎”。检查每个响应是否包含正确的词汇,而无需进行全文匹配。在压力测试中,可以将所有输出结果与一个预期词汇或短语列表进行比较。如果你希望聊天机器人不要提及竞争对手,可以创建对应的测试提示词,并测试回答中是否包含预置的拒绝类词汇。也可以在其他场景中应用类似的检查。例如,验证智能体是否调用了正确的工具,或脚本交互是否产生了预期结果(如检索到特定的数据库条目)。对于编码任务,通常不会要求输出与参考代码完全匹配,但可以通过其他方式验证正确性。比如故意引入错误,然后检查模型是否能生成修复错误并通过测试的代码。一些常用方法总结:| 精确匹配(Exact Match) | 检查响应是否与预期输出完全匹配。 || 模糊匹配(Fuzzy Match) | 允许细微差异,比如忽略空格或格式。 || 词汇或元素匹配(Word or Item Match) | 验证响应是否包含特定的固定词汇或字符串,不考虑完整措辞。 || JSON 匹配(JSON match) | 匹配结构化 JSON 输出中的键值对。 || 单元测试通过率(Unit test pass rate) | 跟踪生成的代码是否通过预定义的测试用例。 |4)基于内容重复的指标一句话总结:通过词语、元素或字符重叠来比较回答结果。到目前为止,我们主要关注的是存在单一正确结果的任务。但许多大模型应用会生成自由格式文本。在这些情况下,可以有一个参考答案,但不会要求新输出与该答案完全匹配。例如,在总结财务报告时,会将每个新摘要与人工撰写的 “理想” 摘要进行比较。但传达相同信息的方式有很多种,因此许多仅部分匹配的摘要实际上也同样出色。为此,机器学习界提出了基于重叠的指标。这些指标用于反映参考内容与生成结果之间重复的符号、词汇或词汇序列数量。以下是一些例子:BLEU 分数:最初是为机器翻译开发的,但也适用于其他语言任务。它通过评估 n 元语法(短词汇序列)的重叠度来反映精确率(生成响应中出现在参考内容中的词汇比例),同时还会对过短的响应施加惩罚。ROUGE: 最初是为文本摘要设计的,其原理与 BLEU 类似,但更注重召回率(衡量参考文本中有多少内容出现在生成响应中)。METEOR: 会进行词汇级匹配,但还会借助外部语言词典考虑同义词和词根形式。一些常用方法总结:| BLEU(双语评估研究) | 评估 n 元语法重叠(最多 4 元)。注重精确率;对简洁性进行惩罚。 || ROUGE-n(面向摘要评估的召回导向研究) | 评估指定的 n 元语法重叠。注重召回率。 || ROUGE-l(面向摘要评估的召回导向研究) | 评估生成文本与参考文本之间的最长公共子序列。注重召回率。 || METEOR(带显式排序的翻译评估指标) | 评估词汇重叠情况,考虑同义词和词干提取。平衡精确率和召回率。 || 莱文斯坦距离(Levenshtein distance) | 计算使两个字符串匹配所需的字符编辑(插入、删除或替换)次数。 |需要注意的是:尽管基于重叠的指标是自然语言处理(NLP)研究的基础,但它们往往与人类判断相关性不高,且不适用于高度开放式任务。基于嵌入模型或 LLM 的现代评估方法则能提供更具上下文感知的评估。5)语义相似度一句话总结:使用嵌入模型进行语义匹配。精确匹配和基于内容重叠的指标都会比较输出结果中的词汇和元素,却不会考虑它们的含义。但含义往往是我们真正关心的!以下是两个聊天机器人的回答示例:– “是的,我们接受产品购买后的退货。”– “当然,您可以在购买后将商品退回。”大多数人类读者都会认为这两个回答的意思大致一样。但基于内容重叠的指标不会这么认为,因为它们的共用词汇很少。语义相似度方法用于比较含义而非词汇。可以使用嵌入模型,直接计算语义相似度。这类模型将文本转换为向量,以捕捉词汇之间的上下文和关系。通过比较这些向量之间的距离,你可以了解文本的实际相似程度。这种评估方法的局限性在于,它们完全依赖于所使用的嵌入模型。嵌入模型可能无法很好地捕捉含义的细微差别,且可能出现误匹配。仅关注词元级或句子级比较有时也会忽略整个段落的更广泛上下文。6)LLM 作为裁判一句话总结:通过提示词要求大模型来比较或者选择更好的输出结果。(1)相似度匹配虽然语义匹配(”这两个回答的含义是否相同?”)通常是目标,但基于嵌入模型的相似度并不总是最精确的结果。嵌入可以捕捉大致含义,但可能遗漏重要细节。例如:– “联系支持人员之前,请重启设备。”– “重启设备之前,请联系支持人员。”尽管语序改变会导致含义变化,但这两个句子的向量可能仍然看起来很相似。再比如– “点击菜单中的’账户’页面。”– “点击菜单中的’账户详情’页面。”在这种情况下,特定菜单项的正确名称对判断准确性至关重要,但基于嵌入计算相似度对这种情况的区分力度不够。为了获得更好的结果,可以使用 LLM 作为裁判进行相似度匹配。例如,可以将参考内容和新生成的答案输入给模型,并询问:”新答案是否与参考内容传达相同的含义?回答是或否。“这种方法的适应性很强。你可以指定评判时需要优先考虑的因素(如精确术语、遗漏信息或风格一致性)。你还可以要求 LLM 解释推理过程,使结果更可信,并提高评估质量。这种 LLM 评估方法在实践中应用很广泛。(2)成对比较使用 LLM 的另一种方式是成对比较:向 LLM 提供两个答案,并要求它判断哪个更好。这也是 “LLM 作为裁判” 这个名称的由来。总结一下用LLM评估的两种方法:相似匹配:使用大语言模型(LLM)比较两个输出结果,判断它们是否传达相同的含义、风格或细节。成对比较:使用大语言模型(LLM)根据指定标准,从两个输出回答中选出更优的,或判断两者是否效果一样。下一篇文章,我们来讲对于【没有参考答案】这种情况的评估方法和指标选择。本文由 @Mrs.Data 原创发布于人人都是产品经理。未经作者许可,禁止转载题图来自Unsplash,基于CC0协议该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务