Created
Aug 20, 2024 12:26 AM
Favorite
Favorite
Priority
备注
推荐
🌟🌟🌟🌟🌟
类型
模型测试
notion image
一起学习,一起进步▼ ▼ ▼ ▼▼ ▼▼
概述
本文为我在做了一次coaching后的总结,仅供那些在测试大模型应用项目的人员做参考。

1. 简介

基于大模型开发的应用项目现在越来越多了,作为这个项目的测试人员,你会如何考虑测试策略呢?本文分享我最近的一些初步思考,FYI。
大模型应用项目与传统的非大模型应用项目,最大的区别在于要处理的是“不确定性”的答案,或者说要应对的是“概率”问题。
假如简单地用分层模型表示大模型应用的项目,自底向上可以分三层:LLM层,Adapter适配层,UI界面层。
为了对抗LLM的各种缺陷,比如幻觉、不稳定性、Token Size受限等问题,一般会在LLM层之上增加很多适配性的工作,比如针对用户的提问做做些预处理、调用一些诸如RAG的相似性算法、组装成Prompts、针对LLM返回的结果进行后处理等等。试图通过这些做法,最终提升LLM应用项目的整体性能表现。
所以,测试中除了要关注传统的功能、安全性等测试以外,重点要落在性能测试上,通过构造并持续维护合理的测试集,得到各种关心的性能指标,通过分析这些指标的变化,再反馈给Adapter层,进行迭代地优化。
测试的对象可以是:
  • LLM层
  • LLM层+Adapter层
  • LLM层+Adapter层+UI层
虽然,关注点不太一样,但是,最核心的本质,还是要提升LLM在回答问题方面的整体表现。
为此,在考虑LLM应用项目的测试之前,首先要花点时间了解常用的性能指标有哪些,如何选择合适的性能指标,然后再据此制定合理的测试策略。下文就从“指标”和“策略”这两个维度进行说明。

2. 性能指标基本概念

模型诊断(判断为正例)的规则

所谓正例,简单可以理解为模型判断的输出与预期的输出是一致的。
可以通过有监督学习的训练提高模型诊断的有效性,也可以通过专家辅助的规则来协助判断。以下是从ChatGPT上获得的答案:
是否需要给模型输入诊断的标准(即判断正例的规则)取决于具体的任务和应用场景。以下是一些考虑因素:
1. **有监督学习:** 如果是有监督学习任务,通常会需要标记好的训练数据,包括输入和相应的输出标签。这些标签可以是模型预测的类别、是否患有疾病、是否存在威胁等。在这种情况下,模型通过学习训练数据中的模式和标准来做出预测。
2. **无监督学习:** 在某些场景下,可能难以获取完全标记的数据。在这种情况下,无监督学习或半监督学习方法可能更为适用。模型需要从数据中学习模式而不依赖明确的标签。
3. **规则辅助:** 有时,专家领域知识可以以规则的形式辅助模型的决策。这些规则可以用来指导模型的输出,特别是在某些情况下,确定性规则比模型的预测更可靠。
4. **自监督学习:** 自监督学习是一种无监督学习的变体,其中模型使用自动生成的标签进行训练。在某些场景下,可以设计任务,使模型通过预测其自身生成的标签来学习有用的表示。

FN,FP,TN,TP

这4个是基本概念,我画了一个简单的图示来理解。
notion image
针对一次具体的问答对(Question,Reference Answer),在给定的信息检索范围内,比如RAG算法得出的TopK的范围,让LLM进行预测,输出系统生成的答案(Actual Answer),那么这个范围的所有信息可以分为4类
  • FP:LLM应该预测出来但是没有被识别到的正例
  • TP:LLM预测出的正例
  • FN:LLM错误地判断为正例
  • TN :LLM不应该输出,也确实没有输出的反例
每一次测试(与LLM的交互问答),都可以产生这四个数据,那么对于不同类型的测试集(不同的问题对、或不同的Prompts),可以通过比较这几个指标(或召回率,精确率等指标)的变化,对于Prompts进行调优。

召回率

  • ChatGpt定义
notion image
  • 我的定义
    • 在某种确定的诊断规则下 Under a set of certain rules
      • 经验判断
      • 专家规则
      • 。。。
    • 在某个确定的范围内 Within a certain range
      • Top k
      • All knowledge LLM has
    • 针对给定的输入数据 For given input data
      • 包含:Positive - 符合规则的正例
      • 也包含:Negative - 不符合规则的反例
    • LLM对正例识别的比例
      • LCS/参考摘要的长度
      • TP /(TP+FN)
    • 召回率只关心【正例是否漏报】,不关心反例是否误报
  • 场景
    • 以下应用场景信息来自于ChatGPT:
      召回率通常应用在那些对于【模型漏报(未能正确识别正例)非常敏感】的场景中,例如:
      1. **医学诊断:** 在医学影像分析中,如果模型无法捕捉到潜在的疾病迹象,可能导致漏诊,因此高召回率对确保尽早发现疾病非常关键。
    • 输入: 医学影像数据(如X射线、MRI、CT扫描等)。
    • 期望输出: 对患者是否患有特定疾病或病变的准确诊断。
2. **安全检测:** 在网络安全领域,如果入侵检测系统无法识别网络攻击,会导致系统遭受攻击。在这种情况下,高召回率有助于提高对潜在威胁的检测能力。
  • 输入: 网络流量数据、日志文件等网络活动信息。
  • 期望输出: 对于是否存在潜在威胁(如恶意软件、网络攻击等)的准确检测。
3. **搜索引擎:** 在搜索引擎中,确保搜索结果包含用户可能感兴趣的内容是至关重要的。高召回率可以确保用户得到尽可能多的相关结果。
  • 输入: 用户的搜索关键词和其他上下文信息。
  • 期望输出: 与用户查询相关性最高的搜索结果。
4. **法医学:** 在刑事调查中,如果法医工具无法识别犯罪现场的物证,可能导致犯罪分子逍遥法外。高召回率有助于提高犯罪现场检测的准确性。
  • 应用
    • 在这些场景中,高召回率的目标是确保模型尽可能多地捕捉到真正的正例(例如,病变、威胁、相关结果、物证等),以降低漏报率。这是为了最大程度地避免错过重要的信息,即便在牺牲一些准确度的情况下。
    • 总体来说,召回率在那些对于错过正例风险较高,而容忍一些误报的应用场景中得到广泛应用。
    • 然而,需要注意的是,召回率和其他性能指标(如精确度)之间存在权衡,具体的选择取决于特定问题的需求和约束。

精确率

  • ChatGPT定义
notion image
  • 我的定义
  • 在某种确定的诊断规则下 Under a set of certain rules
    • 经验判断
    • 专家规则
    • 。。。
  • 在某个确定的范围内 Within a certain range
    • Top k
    • All knowledge LLM has
  • 针对给定的输入数据 For given input data
    • 包含:Positive - 符合规则的正例
    • 也包含:Negative - 不符合规则的反例
  • LLM预测中正例所占的比例
    • LCS/系统生成摘要的长度
    • TP /(TP+FP)
    • 精确率可以看出【正例是否误报】,或者说只关心正例预测上的准确性,不关心正例是否识别完整
  • 场景
    • 以下应用场景信息来自于ChatGPT:
  • 垃圾邮件检测:
    • 示例:一个垃圾邮件过滤器需要确保它的预测准确,即它不会将正常邮件误判为垃圾邮件,因此精确率是一个重要的指标。
  • 医学诊断:
    • 示例:在医学领域,比如癌症检测,精确率用于衡量模型在判断患者患有疾病时的准确性,以确保减少误诊的可能性。
  • 金融欺诈检测:
    • 示例:在金融领域,精确率用于评估模型对欺诈交易的准确性,以减少对正常交易的误报。
  • 推荐系统:
    • 示例:在推荐系统中,精确率可以用于评估模型在用户点击的推荐中有多少是用户真正感兴趣的。
总体而言,任何需要关注模型在正例预测中准确性的场景都可以使用精确率作为评估指标。在这些场景中,模型的准确性对于避免误判正例非常关键。
  • 应用
    • 如何平衡召回率和精确率?
    • F1分数: F1分数是召回率和精确率的调和平均,可以在一定程度上平衡两者。当业务需求对召回率和精确率都有一定要求时,可以考虑使用F1分数作为评估指标。
    • 设定阈值: 可以根据实际需求设置阈值,例如提高阈值可以提高精确率,降低阈值可以提高召回率。这样可以根据业务场景的不同调整平衡点。
    • 场景举例
假设有一个智能问答系统,负责回答运维人员关于网络故障和配置的问题。系统的目标是提供尽可能全面和准确的答案。
以下为ChatGPT的信息:
设定阈值的方法:
  • 高精确率需求:
    • 如果在该场景中,系统更注重提供准确的答案,以防止误导运维人员,可以设置较高的阈值。
    • 例如,可以设置阈值为0.8,表示系统只有在非常确信答案准确性较高时才会给出回答。
  • 高召回率需求:
    • 如果在该场景中,系统更注重提供全面的信息,即使可能存在一些不够准确的情况,可以设置较低的阈值。
    • 例如,可以设置阈值为0.5,表示系统对于可能的答案都会给出回答,以确保不错过潜在的有用信息。
  • 平衡策略:
    • 如果要平衡召回率和精确率,可以选择一个适中的阈值,例如0.6或0.7。
    • 这样可以在一定程度上保持召回率和精确率的平衡,提供相对全面和相对准确的答案。
  • 动态调整:
    • 根据实际应用的反馈和业务需求,可以动态调整阈值。如果发现系统提供的答案过于保守,可以降低阈值以提高召回率,反之亦然。

F1分数

  • ChatGPT定义
notion image
  • 场景
F1分数是一个综合考虑精确率(Precision)和召回率(Recall)的指标,特别在处理不平衡类别的二分类问题时很有用。F1分数通过计算这两者的调和平均值来综合评估模型性能。
以下例子来自于ChatGPT。
F1分数通常在二分类问题中应用,特别是在存在类别不平衡的情况下。以下是一个应用场景的例子:
  • *场景:医学诊断中的罕见病检测**
  • 假设我们有一个医学诊断模型,用于检测一种罕见病,该罕见病的发病率非常低。考虑到罕见病患者数量相对较少,大多数样本都是正常样本。这就导致了一个类别不平衡的问题。
    • **正类别(Positive):** 患有罕见病的患者。
    • **负类别(Negative):** 未患有罕见病的健康人。
  • 在这个场景中,我们关心的可能更多是对患有罕见病的患者的准确诊断,因为将患者错分为健康人可能导致更为严重的后果。因此,我们可以使用F1分数来综合考虑精确率和召回率。
    • **Precision(精确率):** 模型预测为罕见病的样本中,有多少确实是罕见病。在医学上,这表示模型的确诊准确性。
    • **Recall(召回率):** 所有真实罕见病样本中,模型成功预测为罕见病的比例。在医学上,这表示模型对罕见病的全面覆盖程度。
  • F1分数将这两个指标综合考虑,对于医学诊断中罕见病检测这样的类别不平衡问题,它提供了一个更全面的性能评估。在这种情况下,我们更关注模型在正确诊断患有罕见病的患者方面的表现,而不是简单地追求准确率。

准确率

notion image

文本相似度度量

在文本匹配场景中,判断两个文本串是否相匹配通常需要使用一些文本相似度或匹配度的度量方法。以下是一些常见的用于文本匹配的方法(来源于ChatGPT):
notion image
ROUGE(Recall-Oriented Understudy for Gisting Evaluation)方法属于精确匹配的一种文本相似度度量方法。 ROUGE 主要使用了一些技术,如 N-gram overlap、最长公共子序列(LCS)等,来评估生成的文本与参考摘要之间的相似度。 ROUGE 通常应用于评估生成式任务(如文本摘要、翻译等),用于量化系统生成的文本与参考文本之间的重叠程度。
  • 在文本相似度度量中通常提到的是“Rogue”的变体“ROUGE”(Recall-Oriented Understudy for Gisting Evaluation)
  • ROUGE是一组用于评估文本生成系统输出与参考摘要之间相似度的指标。这些指标包括 ROUGE-N(N-gram overlap)、ROUGE-L(Longest Common Subsequence,LCS)、ROUGE-W(Weighted LCS)、ROUGE-S(Skip-bigram)、ROUGE-SU(Skip-bigram plus unigram)等。
  • **ROUGE-N**:基于N-gram的overlap来计算相似度。
  • **ROUGE-L**:使用最长公共子序列(LCS)来计算相似度,强调了内容的匹配。
    • **ROUGE-W**:在ROUGE-L的基础上进行加权,更强调长词的匹配。
    • **ROUGE-S**:考虑skip-bigram,通过允许单词间有一定的跳跃来更灵活地匹配。
    • **ROUGE-SU**:在ROUGE-S的基础上,加入了unigram的考虑。
    • 这些指标通常用于评估自动摘要、机器翻译等任务中生成文本的质量。ROUGE-L 特别关注于长序列的匹配,因此在某些情境下能够更好地反映文本的语义相似度。

3. 智能问答应用的测试策略

我们以智能问答类的应用为例,来说一说LLM应用项目的测试策略。
主要从以下四个方面来说:
  • 首先,了解一下什么是智能问答类的应用
  • 其次,介绍一下启发式测试策略模型
  • 再次,让我们打开一次具体的测试过程看看要关注什么
  • 最后,从质量属性的维度聊一聊LLM应用项目的测试策略

智能问答类的应用

智能问答类的应用场景,以下内容来自ChatGPT:
智能问答系统在各个领域都有广泛的应用,以下是一些常见的智能问答类的应用场景:
  • 1. **虚拟助手:** 智能问答系统被用作虚拟助手,能够回答用户的日常生活问题,提供天气信息、新闻、时间管理等服务。
  • 2. **在线客服:** 公司和组织使用智能问答系统作为在线客服工具,回答用户关于产品、服务、常见问题等方面的咨询。
  • 3. **医疗咨询:** 在医疗领域,智能问答系统可提供基本的医学信息和健康建议,回答患者关于症状、疾病、药物等的问题。
  • 4. **教育领域:** 智能问答系统用于在线教育平台,帮助学生解答问题、提供学科知识、辅助学习。
  • 5. **法律咨询:** 在法律领域,智能问答系统可提供法律咨询服务,回答用户的法律问题,解释法规和条款。
  • 6. **技术支持:** 公司使用智能问答系统作为技术支持工具,回答用户关于软件、硬件、网络等方面的问题,提供解决方案。
  • 7. **金融领域:** 智能问答系统被用于金融机构,回答用户关于账户、交易、投资等方面的问题,提供金融咨询服务。
  • 8. **旅游指南:** 智能问答系统可用作旅游指南,回答用户关于目的地、交通、住宿等方面的问题,提供旅行建议。
  • 9. **HR管理:** 公司的人力资源部门可以使用智能问答系统回答员工关于福利、招聘、培训等方面的问题。
  • 10. **社交媒体:** 智能问答系统在社交媒体平台上用于回答用户关于平台功能、隐私政策等方面的问题。
这些场景展示了智能问答系统在不同领域中提供信息和解决问题的广泛应用。

启发式测试策略模型

James Bach很多年以前写的“Heuristics Testing Strategy Model”(HTSM)依然适用,这里是原文的下载地址:https://www.satisfice.com/download/heuristic-test-strategy-model。
强烈建议那些不知道如何制定测试策略的同学,不妨对照这个模型的每个引导词(Guideword Heuristics)仔细思考、研讨,最终一定会形成一份比较满意的测试策略。
notion image
比如,针对一个技术支持/或操作运帷类的智能问答应用:
首先,我会识别这个应用的主业务价值(具体做法是采纳了海盗派变革中的OBI组织业务目标制定的方法):
notion image
然后,就可以使用HTSM来分析(我这里的分析只是示意,所以比较简单,仅供参考):
notion image

一次具体的测试过程

任何一次具体的测试过程,不论是由人来测试、还是由工具自动化进行,都可以分为四个部分(可以参考之前公众号里的文章):
  • Develop
  • Apply
    • Operate
    • Observe
    • Compare
    • Output
  • Interpret
  • Maintain
notion image
notion image

质量属性测试

首先想强调一点:大模型应用项目中,测试所扮演的角色的变化,可以描述为“Built In testing and Quality”
  • 开发即测试,测试即开发
  • 不要明显地区分Deveoper and Tester
  • Meshing Programming (包含Natural Language和计算机编程语言的混合编程)中,需要借助testing的探索,来不断调整代码中的Prompts
具体的质量属性维度可以根据各个项目的不同而有所不同,如下是一些可能需要考虑的质量属性维度:
  • Capability Testing
  • Security Testing
  • Usability Testing
  • Performance Testing
  • Maintainability Testing
  • Stability Testing
这里简单说几个:
Capability Testing
  • Capability:指的是基本功能
  • 通过少量的人工的Testing,验证问答基本功能可用
    • 确保模型正确回答各类问题,覆盖系统设计的所有功能。
    • 包含各种复杂度、各种场景、各种用户画像的测试输入
      • 针对各种输入情况测试,包括问题的多样性、长度、结构等。
      • 验证模型是否能够正确处理异常输入,如不完整或格式错误的问题
  • 为设计有效完整的测试集做探索
    • 大模型应用通常基于大规模数据集进行训练,因此在测试中需要考虑使用多样化的数据集来覆盖不同的场景。
    • 自动化测试对于大模型应用尤为重要,可以提高测试效率,确保在不同的场景下能够持续有效地测试。
  • 对核心的对话能力进行测试
    • 多轮对话能力
    • 对话中如果涉及推荐,那么推荐的准确率
    • 问答策略
      • 比如重复问同一个问题时,看系统如何应对
      • NLP能力指标,评估自然语言处理能力,比如同义词识别,语义纠错等
      • 意图识别能力
      • 。。。
Maintainability Testing
持续监控和反馈循环:
  • 由于大模型应用通常在生产环境中运行,因此需要建立持续监控机制,及时发现潜在问题。反馈循环是一个关键的步骤,将用户反馈和性能监控集成到模型的改进过程中
  • 对于大模型,特别是深度学习模型,需要关注其在硬件资源上的消耗,如内存、计算资源等。确保模型在生产环境中能够高效运行
Stability Testing
稳健性测试:大模型可能对输入中的小变化非常敏感,因此需要进行对抗性测试,以验证模型在面对恶意输入或轻微扰动时的稳健性。
Performance Testing
  • 确定性能指标
    • LLM的响应内容是个“概率”事件
      • 想要优化整个系统,就可以把问题分解为优化这个系统的每个部分。
      • 但是优化一个基于 LLM 的系统的难点在于,这个系统本质上是一个黑盒,没有一套有效的评估手段。
      • 如果连最基础的 benchmark 也没有,怎么提升对应的指标也就是空谈了。
      • Ref:《Evaluating Verifiability in Generative Search Engines》
    • 针对LLM的特点进行针对性测试,看应用程序如何对抗LLM各种缺陷
      • Token Size的受限
      • 记忆?对话轮数受限
      • 幻觉
      • 生成能力
      • 不确定性
      • 。。。
    • Adapter层决策过程变得更加重要。测试过程中需要关注输出的可解释性和可理解性,决策过程对测试来说应该是透明的和合理的
  • 设计一套测试集,评估模型的整体性能指标
  • 样本数量
    • 召回率是评估模型在检索相关信息方面的性能的指标,通常情况下,需要一定数量的样本或问题才能更准确地评估模型的召回性能。这是因为在只有少数样本的情况下,单个问题的结果可能对整体召回率产生较大的影响,从而不够稳定和可靠。
    • 具体来说,召回率是通过计算检索到的相关文档数量与总相关文档数量的比率来衡量的。如果只有一个问题,且这个问题有多个相关答案,那么模型只要检索到了其中一个相关答案,就能达到较高的召回率。但这并不能全面反映模型在更广泛情境下的性能,因为不同问题可能有不同的相关文档数量和难度。
    • 总的来说,召回率的评估需要基于足够的样本量,以确保评估结果具有代表性和鲁棒性。
  • 样本多样性
    • 为了获得更可靠的召回率评估,通常建议在一个问题集上进行评估,确保问题集涵盖了多样性、复杂性和问题难度。这样可以减少单个问题的影响,提高对模型整体性能的全面了解。
  • 关注响应性能
    • 回答过程的出字率
    • 回答完问题的响应时间
    • 测试系统在并发负载下的性能,确保在高负载时也能正常运行
  • 维护测试集,建立性能基线数据
    • 使用标准数据集测试,测试模型的准确度
    • 要基于对Adapter层的认知、以及用户应用场景,构建测试集
      • 使用了什么算法
      • 什么样的推理规则
      • 如何构建提示词
      • 如何修正LLM的输出
      • 。。。
  • 测试集要不断维护更新
    • 大模型可能需要经常更新,因此测试团队需要考虑模型随时间演化的情况。新的训练数据、新的输入分布以及新的需求可能导致模型行为的变化
    • 有了这套评测系统,每次 RAG 优化了之后就可以重新跑一遍评测集,来确定相关指标的变化,这样就可以宏观上来判断整个 RAG 系统是在变好还是在变差了。

结语

以上只是我在做了一次coaching辅导后的一些学习总结,内容完整性和系统性都无法保证,分享出来,仅供大家参考。
凡心所向,素履所往
我是邰晓梅
热爱学习
勇于探索
孜求匠艺
交付以责
Buccaneer Methodology
Share Learning,Share Success!
学习 和 分享 是人生中的两大趣事: 学习,从未停止过分享,感谢有您的参与
Buccaneer Methodology 海盗派方法学关注公众号,回复“海盗派”:了解如何加入海盗派微信群
notion image
Loading...