评估LLMs是一个复杂的过程,因为与传统软件开发不同,LLMs的结果不可预测,缺陷也无法像逻辑可以归因于特定代码块那样进行调试。LLMs是一个黑盒,具有无限可能的输入和输出。
然而,这并不意味着传统软件测试中的概念不能应用于测试LLMs。单元测试构成了功能测试、性能测试和可靠性测试,它们共同构成了对LLM的回归测试。
传统测试策略(LLM应用策略)
单元测试(每个节点)
单元测试指的是测试应用程序中最小可测试部分,对于LLMs来说,这意味着根据一些明确定义的标准来评估LLM对给定输入的响应。
例如,对于一个单元测试,目的是评估由LLM生成的摘要的质量,评估标准可以是摘要是否包含足够的信息,以及是否包含来自原始文本的虚构。对评估标准的评分通常由所谓的LLM评估度量来完成。
功能测试(每个工作流)
对LLMs进行功能测试是指在特定任务上评估LLMs的表现。与传统的软件功能测试不同(例如,通过测试整个登录流程来验证用户是否能够登录),LLMs的功能测试旨在评估模型在特定任务(例如文本摘要)范围内的各种输入下的表现能力。换句话说,功能测试是由特定用例的多个单元测试组成的。将单元测试组合在一起进行功能测试
回归测试(标准用例回归)
回归测试是指每次进行迭代时,都对LLM进行相同的测试用例评估,以确保不会引入破坏性变更。使用量化的LLM评估指标进行LLM评估的优点是,我们可以明确地设定阈值,定义什么是“破坏性变更”,并监控LLM在多次迭代中的性能变化。
多种功能测试可以构成回归测试的一部分。例如,我可以评估LLM在进行摘要和代码生成方面的能力,对于回归测试,我可以衡量每次迭代时它是否仍然能够执行这些任务。
性能测试(首token时间等)
当我们说性能测试时,我们并不是指测试LLM是否能够执行给定的任务,而是指一些通用的性能指标,比如每秒生成的词数(推理速度)和每词的成本(推理成本)。性能测试的主要目的是优化成本和延迟。
需要注意的是,性能测试也是回归测试的一部分。
可靠性测试(需求功能之外的处理)
这是唯一一种与传统软件开发中常见的测试方法不同的测试方式。可靠性测试是一种理念,即测试LLM在负可靠性人工智能(Responsible AI)指标如偏见、有毒性和公平性方面的表现,而不管当前的任务是什么。例如,LLM应该在被要求总结一篇有偏见的新闻文章时不这样做。
数据驱动测试(可自动化)
另一种思考LLM测试的方法,而不是像上面描述的那样从传统角度进行测试,而是基于指标标准来测试LLM系统。让我们来看看最常见的三个指标。
准确性测试(标准用例)
其中最直接的一种方法就是准确性性测试。准确性测试就像传统监督式机器学习中的典型测试集,即在给出整个训练数据集的情况下,我们保留一小部分数据,看看新训练的模型是否能够根据目标标签给出正确的答案。
相似度测试(相似问题相似答案)
与准确性一样,相似度也不是传统NLP指标能够轻易评估
虚构性测试(反向case,LLM不虚构回答)
最后,还需要对虚构性进行测试,并且有多种方法可以实现这一点。虚构性可以作为无参考或基于参考的度量标准,其中需要一个“真相”来确定LLM输出的实际准确性。
你可能也注意到我使用了“准确性”这个词。然而,虚构性应该有自己的测试方法,因为虚构性的输出并不一定就是事实错误的。这让你感到困惑了吗?想象一下,如果你的LLM输出的信息不在其训练数据中。虽然在现实世界中它可能是事实正确的,但它仍然被认为是虚构性。
CI/CD中的自动化测试
你需要做的一件事是,为LLM的每次变更(无论是你或你的团队成员所做的变更)提供自动化测试方式。在传统的软件开发中,尤其是在团队环境中,自动化测试对于CI/CD流程至关重要,可以防止未被注意到的破坏性变更。
用模型来测试模型
对于这种大模型场景或者生成式场景来说, 测试人员不可能枚举出所有的问题和答案,这个太不现实了。
虽然我们可以爬取到线上用户提的所有问题, 但是我们没办法把他们作为测试数据, 因为这些问题的答案需要人工来判断。所以测试人员能枚举的情况是有限的。
用一个成熟的模型经过微调后来满足我们的场景。
需要注意的是这种方式不能代替人工测试的,它只能是一种辅助手段,用模型来帮助我们挖掘潜在的问题(毕竟人的精力有限,不可能测试到那么多的样本),所以人工测试,仍然是非常重要的手段。 我们一般可能人工测试 1000~5000 个样本, 机器测试 1W 个或者 10w 个样本甚至更多,用这样的策略让人和机器一起去挖掘潜在的问题。
标签:LLM,LLMs,功能测试,测试,虚构性,评估,策略 From: https://www.cnblogs.com/yjh1995/p/18565756