在人工智能(AI)驱动的时代,模型迭代已成为常态。然而,对于评估(evals)的迭代,许多团队似乎有所滞后。构建自动评估体系并非必须投入巨额资源,从小处着手,快速迭代,同样能带来显著的效益。
许多通用人工智能(GenAI)应用项目在系统输出的自动化评估方面进展缓慢,过度依赖人工评估。这主要是因为构建评估体系被视为一项巨大的投资,需要创建大量的示例、设计和验证指标,使得团队总觉得没有足够的时间来承担这项前期成本。然而,构建评估体系应该被视为一个迭代过程。从一个快速而粗糙的实现开始,逐步改进,将评估的负担从人工转移到自动化评估。
之前我曾撰文探讨过创建评估体系的重要性和难度。假设你正在构建一个客户服务聊天机器人,它可以自由文本回复用户。由于没有唯一正确的答案,许多团队不得不花费大量时间,让人工审查每次更新后的数十个示例输出,以判断系统是否有所改进。尽管像“LLM-as-judge”这样的技术有所帮助,但要使其有效运作,需要微调许多细节(例如,使用什么提示、提供什么上下文等)。所有这些都加剧了构建评估体系需要大量前期投资的印象,因此,团队往往觉得依靠人工评估比构建自动化评估系统更能取得进展。
我鼓励大家以不同的方式看待评估体系的构建。即使是快速构建的评估体系,只要能够部分、不完整且带有噪声地衡量系统性能,也可以接受,并通过迭代来改进它们。它们可以作为人工评估的补充,而不是替代品。随着时间的推移,你可以逐渐调整评估方法,以缩小评估输出与人工判断之间的差距。例如:
- 从评估集中极少的示例开始(比如5个),然后随着时间的推移逐渐增加,或者删除那些过于简单或过于困难,对区分系统不同版本的性能没有帮助的示例。
- 从仅衡量你关心的性能维度的一个子集开始,或者衡量你认为与系统性能相关但不完全捕获系统性能的狭窄线索。例如,如果在对话的某个时刻,你的客户支持代理应该(i)调用API来发出退款,并且(ii)生成一条适当的消息给用户,你可以先只衡量它是否正确调用了API,而不必担心消息的内容。或者,如果在某个时刻,你的聊天机器人应该推荐一个特定的产品,一个基本的评估可以衡量聊天机器人是否提到了该产品,而不必担心它说了些什么。
只要评估的输出与整体性能相关,就可以在开始时只衡量你关心的一个子集。
因此,开发过程包括两个迭代循环,你可以并行执行它们:
- 迭代系统,使其性能更好,通过自动化评估和人工判断相结合的方式衡量;
- 迭代评估体系,使其更符合人工判断。
就像人工智能领域的许多事情一样,我们常常无法一次性做好。因此,最好快速构建一个初始的端到端系统,然后迭代改进它。我们已经习惯于采用这种方法来构建人工智能系统。我们可以用同样的方式构建评估体系。
对我而言,一个成功的评估体系需要满足以下标准。假设我们目前有一个系统A,我们可以对其进行调整以获得一个系统B:
- 如果根据一位熟练的人工判断,A比B的表现明显更好,那么评估体系应该给A一个明显高于B的分数。
- 如果A和B的性能相似,它们的评估分数应该相似。
每当系统A和B的配对与这些标准相矛盾时,这就表明评估体系存在“错误”,我们应该调整它,使其能够正确地对A和B进行排名。这与构建机器学习算法中的错误分析类似,只不过我们关注的是评估体系的“错误”,而不是机器学习算法输出的错误(例如,当它输出一个不正确的标签时)。评估体系的错误指的是当它们错误地对两个系统A和B进行排名时,导致评估体系无法帮助我们在它们之间做出选择。
纯粹依赖人工判断是启动项目的绝佳方式。但对于许多团队来说,将评估体系构建为一个快速原型,并通过迭代使其更加成熟,可以让你更早地进行评估,并加速你的进展。
精益求精!
安德鲁