似乎在一夜之间,每个IT企业的待办事项清单以及招聘启事都包含了生成式AI,基于大模型的应用已经在改变人们的工作、学习、写作、设计、编码、旅行和购物的方式,而且可能只是冰山一角。
大模型应用并不神秘,仍然是一种软件系统。就像使用一个库或者web服务,以及SaaS乃至云计算服务,我们需要对库、服务、SaaS以及平台进行评估、监控和追踪,这可以被粗略地认为是它们的可观测性。对大模型应用而言,也是如此。
1. 大模型应用的评估
如果评估一个传统的机器学习模型,我门一般会检查模型的输出或预测的准确性。这通常会用很多众所周知的度量指标来衡量,如准确率、精确率、 RMSE、 AUC、召回率等等,详见《机器学习模型性能的10个指标》。在处理时间序列数据时,我们可能会使用特定于该领域的指标,如MAE或MAPE。而对于自然语言处理任务,BLEU、ROUGE或Perplexity等指标可能更为适用。
但是,大模型的评估要复杂得多,这里尝试列出常见的几种方法。
1.1 分类与回归度量
虽然大模型大模型在某些方面与传统的机器学习模型有所不同,但在评估方法上仍然可以借鉴传统机器学习模型的经验。
大模型能够生成数值预测或分类标签,使得评估过程变得相对直接。在这种情况下,我们可以采用与传统机器学习模型相同的评估方法。例如,对于二分类问题,我们可以计算模型的准确度、精确度、召回率和F1分数;对于多分类问题,我们可以使用每个类别的精确度、召回率和F1分数,以及整体的准确度;对于回归问题,我们可以使用MSE、RMSE和MAE等指标。
为了提高评估效率,我们可以采用并行计算或分布式计算等技术来加速评估过程。另外,由于大模型的输出具有随机性,即使在相同的输入下,也可能得到不同的预测结果。因此,在评估大模型时,我们需要多次运行模型并计算平均值,以获得更稳定和可靠的评估结果。
1.2 基于独立文本的度量
在缺乏可靠数据来源的情况下,基于独立文本的度量工具对于评估大型模型生成的文本输出显得尤为重要。这类工具能够从不同维度对文本的质量进行量化分析,帮助我们判断模型输出的可靠性和有效性。例如,Perplexity (https://huggingface.co/spaces/evaluate-metric/perplexity)这个工具可以被用于测量模型生成输入文本序列的可能性,并且可以被认为是评估模型学习文本的效果,还包括了阅读水平和非字母字符。
一个更复杂方法包括从模型输出中提取嵌入并分析那些针对异常模式的嵌入。这可以通过检查三维 图像中的嵌入图手动完成。通过性别、预测类别或困惑评分等关键领域的着色或比较,可以揭示 大模型 应用中潜在的问题,并提供偏见和可解释性的度量。通过聚合嵌入向量,并将它们映射到三维空间,现有的一些软件工具允许以这种方式可视化嵌入。例如 HDBSCAN 、UMAP以及 K-means等方法。
除了可视化方法,还可以在生成嵌入的过程中运行一个异常检测算法来寻找异常值。
1.3 评估数据集
在评估大型语言模型的文本输出质量时,一个可行的方法是使用带有可信数据标签的评估数据集来进行比较。这种方法的核心在于比较模型生成的文本与已知的、经过人工审核的回复之间的一致性和质量。
我们需要选择一个合适的数据集,该数据集应该包含丰富多样的文本示例,并且每个示例都有相应的数据标签,这些标签通常是由领域专家或经验丰富的数据工程师给出的。这些标签反映了文本的质量、准确性、风格等方面的标准,可以作为我们评估模型文本输出的依据。
一个众所周知的例子是 ROUGE 指标。面对机器翻译的场景,ROUGE 依赖于一个参考数据集,该数据集的答案将与被评估的大模型 进行比较。可以根据参考数据集计算相关性、准确性和大量其他指标。嵌入在该评估方法中起着关键的作用, J-S 距离、 Hellinger 距离、 KS 距离和 PSI 这样的标准距离度量将 大模型 输出嵌入与评估数据集的嵌入进行比较。
最后,还有一些被广泛接受的 大模型 基准测试,斯坦福的 HELM 网站(https://crfm.stanford.edu/helm)提供了更多的参考信息。
1.4 基于大模型的评估器
使用一个大模型来评估另一个大模型,这种方式被许多人认为是目前最好的方向之一,具体可以参考《大模型应用的10种架构模式》一文中的红蓝双评架构模式。在这种模式下,两个大模型相互独立,一个作为评估者,另一个作为被评估的模型,通过比较两者的输出结果来衡量被评估模型的性能。这种模式的优势在于,它可以充分利用大模型的强大能力,可能提供更加全面和深入的评估结果。
例如,我们依赖于一个大模型评估器来判断一个大模型的输出是否有“毒”, 例如 Hugging Face 推荐使用的roberta-hate-speech-dynabench-r4) 。在这里,我们将“ 大模型 评估器”的输出作为参考,评估数据集下面的所有指标都适用。
基于大模型的评估器可能会成为大模型评估的主要方法之一,它不仅可以提供客观公正的评估结果,还可以提高评估效率,降低评估成本。
1.5 人工反馈
前面四种评估方法的重点都放在可衡量的指标上,这些指标有助于我们快速了解模型的性能和效果。然而,人工反馈仍然在其中发挥着不可或缺的作用。与冷冰冰的数据不同,人工反馈能够提供更多的维度,帮助我们更全面地了解模型的表现,发现潜在的问题和改进空间。
在构建大型机器学习模型应用的早期阶段,数据科学家和工程师通常会使用人工反馈来辅助模型的调整和优化。他们可以通过观察模型的输出,与人工标注的结果进行对比,从而发现问题所在,并对模型进行相应的调整。这种人工反馈的方式虽然耗时耗力,但往往能够获得更为准确和深入的评估结果。
为了提高人工反馈的效率和便捷性,大模型的可观测性软件通常提供一个接口,用于收集和整理人工反馈。这个接口可以帮助数据科学家和工程师更方便地提交反馈,同时也使得反馈的过程更加标准化和规范化。通过这种方式,我们可以更好地利用人工反馈来优化模型的性能。
除了在早期的开发过程中使用人工反馈外,将人工反馈纳入最终的评估过程也是一种最佳实践。
2. 大模型应用的追踪
系统跟踪作为监控的前奏,对于大模型应用来说尤为重要。通过深入跟踪大模型的运行细节,我们能够发现一些细微的差别,从而更准确地把握模型的性能和状况。在实现系统跟踪时,我们可以采用一种简单而有效的方式,即捕获请求数、响应时间、令牌使用、成本和错误率等关键指标。
这些指标虽然看似简单,但却能够为我们提供关于大模型运行状态的重要信息。例如,请求数可以反映模型的访问量和负载情况;响应时间则能够衡量模型的处理速度和效率;令牌使用则涉及到模型的资源消耗情况;成本则直接关联到模型的运行效益;错误率则能够反映出模型的准确性和稳定性。
为了实现对这些指标的有效跟踪,我们可以结合使用标准的系统监控工具配合具体的大模型选项。标准的系统监控工具可以帮助我们了解系统的整体运行状况,而针对大模型的特定选项则能够更深入地分析模型的运行细节。
通过捕捉输入提示与输出响应,我们能够洞察模型行为,为未来分析提供宝贵数据。这看似简单,实则涉及被忽视的复杂性。在讨论或记录大型模型时,许多数据科学家常忽略这些细节。我们面对的是一个由一个或多个大型模型、预设的指令提示词和协同工作的代理组成的应用程序。一些大型模型应用程序相对简单,但许多应用高度复杂,且日益增加。在调试过程中,了解每一步的状态及顺序至关重要。因此,从业人员需借助能揭示并解开这些复杂性的软件工具。
3. 大模型应用的监控
虽然大多数 大模型 应用至少经历了某种形式的评估,但较少有实现了连续监视的应用。我们分解监视的组成部分,试图构建一个面向大模型应用的监视系统,进而实现其完整的可观测性。一个面向大型模型应用的监视系统应该能够实时收集和分析模型的运行数据,包括输入、输出、性能指标等。这些数据可以帮助我们了解模型的实时状态,发现潜在的问题和瓶颈。我们还需要建立一个完善的监控机制,以确保监视系统的正常运行和及时响应。这可能包括设置合理的监控指标和阈值、制定有效的警报和处理流程、以及建立定期审查和更新机制等。
在这里,老码农仅对需要监控的维度作简要的探讨。
3.1 功能性监控
为了确保大型模型应用的性能和稳定性,我们应当具备持续监控关键性能指标的能力。这些指标包括了先前讨论的请求数、响应时间、令牌使用量、成本以及错误率,它们都是能够较为容易地获得的成果。通过对这些指标进行实时的监控,我们可以及时了解到系统的运行状况,进而作出相应的调整和优化。
3.2 提示词监控
在确保安全合规的前提下,我们还需对用户在一定时间内提供的提示或输入进行持续监控。其中,衡量用户输入与预设提示词库之间距离的指标尤为重要。尽管大型模型应用能够处理各种预料之外的提示词,但了解客户与应用之间的交互是新产品的创新点还是随时间发生的变化仍然至关重要。
针对这一问题,我们有必要引入一个全新的评估类别——恶意提示词注入。这一评估在初步的测试中往往被忽视。通过与已知的对抗性提示词数据集进行比对,我们可能能够识别出那些潜在的恶意参与者。同时,大型模型评估器也应具备区分恶意提示词与非恶意提示词的能力。
3.3 响应监控
当我们将大型模型应用所生成的内容与预期结果进行对比时,可以采用多种有效的检查方法。例如,我们可以观察模型是否对相关内容产生了适当的反应,或者它是否产生了幻觉;我们还可以检查模型的输出是否偏离了预期的话题;此外,我们还需判断模型的响应是否正确,以及这些响应是否随着时间的推移而发生了变化。
在部署大型模型应用的过程中,毒性和有害输出始终是我们需要特别关注的问题。前面提到的嵌入可视化技术或许可以在root cause方面发挥重要作用。
此外,提示词泄露也是潜在的风险之一。为了防范这一问题,我们可以监控模型的响应,并将其与提示词数据库进行比对。通过衡量嵌入与提示词之间的距离,我们能够较为有效地发现这类问题。一旦发现问题,我们就可以针对这些特定的提示词对模型进行微调,以确保其正常运行。
3.4 阈值和警报
我们必须确保设定的阈值和警告系统不会频繁触发虚假报警。然而,到目前为止,关于如何设定错误报警率或阈值的最佳实践尚未出现。
许多监控系统提供了与Slack、企业微信或钉钉等信息源的集成功能,这使得当输入的提示词触发警报时,可以自动阻止响应。这种能力同样适用于在将响应发送给用户之前,筛选出可能涉及隐私信息泄露、有害内容或其他质量指标的问题。
此外,由于我们的大型模型应用可能具有独特性,因此需要具备自定义度量标准的灵活性,以适应不同的场景和需求。
3.5 UI 监控
如果系统具备监控功能,那么用户界面上也应当展示度量指标的时间序列图。这种UI设计能够让用户深入研究警报趋势,从而更准确地区分不同的根因分析。
一个成熟的产品应该能够支持用户、项目和团队通过基于角色的访问控制(RBAC)对监控数据进行分组管理。这样的工具可以确保每位成员只能访问到自己权限范围内的数据,这在当今许多组织中是非常重要的。
4. 小结
如果大模型应用的可观察性未被置于产品规划的核心位置,众多利益相关方将面临过高的风险。企业快速且持续地采纳人工智能技术,可能成为其成功与失败的关键因素。一个成熟的人工智能框架,以及针对大模型应用制定的详尽的可观察性技术路线图,为我们提供了坚实的基础,使我们能够推出规模更大、效果更佳且更为安全的产品。
本文这涉及的工具、技术和度量指标,或许可以视为实现大模型应用可观测性的基石。基于此,我们可以对每一个概念展开更加深入的研究与实践。