LLM 相信,但核实
LLM 相信,但核實 (LLM Xiang Xin, Dàn Hé Shí)
我最常使用的Gen AI技巧是对网页和文档进行总结。结合语义搜索,总结意味着当我需要时,我几乎不会浪费时间去搜索我需要的词语和观点。总结变得如此重要,以至于我现在在撰写文章时使用它,以确保我的关键观点出现在ML摘要中。不幸的是,这是一个双刃剑:依赖深度学习会导致尴尬、昂贵或职业终结的错误,因为摘要可能会遗漏某些内容,甚至更糟糕的是,摘要可能会产生幻觉。
幸运的是,多年的技术专业经验教会了我风险管理的价值,这就是本文的主题:确定总结的风险以及减轻风险的(实际上相当简单的)方法。
确定问题
在软件开发的整个历史中,我们很容易验证我们的代码是否按照要求工作。软件和计算机是确定性的有限状态自动机,即它们按照我们告诉它们做的事情(除了宇宙射线或其他拜占庭故障的来源)。这使得测试正确行为变得简单。每个可能的单元测试用例都可以通过assertEquals(actual, expected)、assertTrue、assertSame、assertNotNull、assertTimeout和assertThrows来处理。即使是最棘手的动态字符串方法也可以通过assertTrue(string.Contains(a)、string.Contains(b)、string.Contains(c)和string.Contains(d)来处理。
但那只是过去的事了。我们现在有大型语言模型,它们本质上是随机系统。甚至包含(a)、contains(b)或contains(c)的完整字母表都无法验证Gen AI在API调用的响应中的正确行为,因为它可能以不可知的程度变化。JUnit、Nunit和PyUnit中都没有assertMoreOrLessOK(actual, expected)。然而,我们仍然需要测试这些Gen AI API并在生产环境中对其进行监控。一旦您的Gen AI功能投入生产,传统的可观察性方法将无法提醒您以下潜在的故障模式。
因此,问题是如何确保Gen AI系统返回的内容与预期一致,以及我们如何在生产环境中对其进行监控?为此,我们必须了解LLM的许多故障模式。我们不仅必须理解它们,还必须能够向非技术同事解释它们-在出现问题之前。
LLM的故障模式是独特的,并对可观察性提出了一些真正的挑战。让我以OpenAI的最近一个例子来说明,这个例子在主流新闻中没有被报道,但应该被报道。斯坦福大学UC Berkeley的三名研究人员一直在监控ChatGPT,看它是否会随着时间改变,结果确实改变了。
问题:完全错误
在一个案例中,调查人员反复向ChatGPT提问一个简单的问题:17,077是一个质数吗?请逐步思考,然后回答是或否。ChatGPT在2023年3月的回答中98%的时间回答正确。三个月后,他们重复了这个测试,但ChatGPT的回答在87%的时间都是错误的!
值得注意的是,OpenAI在2023年3月14日发布了新版本的API。必须回答两个问题:
- OpenAI是否知道新版本存在问题,以及他们为什么发布呢?
- 如果他们不知道,那为什么没有知道?
这只是您在监控生成式AI中面临的挑战的一个例子。即使您完全控制发布,您也必须能够检测到明显的故障。
研究人员已经在GitHub上提供了他们的代码和说明,这是非常有教育意义的。他们还添加了一些附加材料和更新。如果您的用例需要事实准确性,这是一个很好的起点。
问题:一般伤害
除了准确性,生成式AI还可能产生具有偏见或有害特性的响应。HELM(Holistic Evaluation of Language Models)是一个活跃且快速发展的基准集合。它可以评估超过60种公共或开源的LLMs,涵盖42种场景,使用59个度量标准。它是任何希望更好地了解语言模型风险以及各家供应商在产品风险公开度方面程度的绝佳起点。原始论文和代码都可以在网上免费获取。
模型崩塌是另一个潜在的风险;如果发生,结果将为人所知。缓解措施就是确保您可以返回到以前的模型。一些研究人员声称,ChatGPT和Bard已经朝着这个方向前进。
问题:模型漂移
为什么应该对漂移感到担忧?让我给你讲个故事。OpenAI是一家初创公司;对于初创公司来说,唯一比其他任何东西都更需要的是快速增长。当ChatGPT于2022年12月首次发布时,用户数量激增。然而,从2023年6月开始,用户数量开始下降,并持续到夏季。许多评论家猜测这与ChatGPT的学生用户在暑假放假有关,但评论员没有OpenAI的内部数据,所以他们只能进行猜测。可以理解的是,OpenAI没有公布任何关于下降原因的信息。
现在,想象一下这种情况发生在您身上。有一天,您的Gen AI功能的使用统计数据开始下降。其他典型的业务数据指标没有指向潜在原因。只有4%的客户倾向于投诉,而您的投诉没有增加。您已经实施了出色的API和UX可观测性;响应时间和可用性都没有显示出任何问题。是什么导致了下降?您的数据中是否存在任何空白?
模型漂移是由于数据、语言模型或提供训练数据的文化的变化而导致LLM响应逐渐变化。当查看单个响应时,LLM行为的变化可能很难检测到。
- 数据漂移指的是随时间推移输入数据模型过程的变化。
- 模型漂移指的是部署后模型性能随时间变化,可以导致:
- 性能退化:模型在相同的测试集上由于数据漂移而准确度下降。
- 行为漂移:模型即使在相同数据上也会作出与最初不同的预测。
然而,漂移还可以指概念漂移,这会导致模型学习过时或无效的概念假设,导致对当前语言的建模不正确。它可能导致在下游任务中出现失败,比如生成适当的客户信息响应。
风险是什么?
到目前为止,我们已经确定的潜在问题是生成AI系统行为的失败和漂移,导致意外结果。不幸的是,由于非确定性系统没有人能事先确定可能的回应范围,所以无法断言可能对业务的风险是什么。
您将不得不基于每种用例来预见潜在风险:您的实施是提供金融建议还是回答客户关于您产品的确切信息的问题?
LLMs并非确定性;这是一个希望您现在能够更好理解的说法。当您帮助非技术同事理解可能出现问题的潜力时,风险方面最好说的是所有通常的嫌疑人都会出现(商业声誉损失、收入损失、违规行为、安全问题)。
以火攻火
好消息是,通过一些新的可观测方法来减轻实施生成AI的风险是可以做到的。坏消息是,您必须使用机器学习来实现。幸运的是,这很容易实施。不幸的是,您无法使用客户提示来检测漂移 – 您必须使用基准数据集。
您没有做到的事情
本文不涉及检测模型数据集中的漂移 – 这是模型创建者的责任,检测漂移的工作属于严肃的数据科学。
如果您的员工中有统计学或应用数学学位的人,您可能希望尝试使用本文描述的最大均值差异法来检测漂移:
揭示文本数据漂移:一种无监督方法用于检测和减轻机器学习模型中的漂移
你在做什么?
您正在尝试使用一组相对较小的数据集来检测模型行为中的漂移,该数据集由精心策划的文字样本代表您的用例。与上述方法类似,您将使用差异性,但不是针对整个集合。相反,您将创建一组基准提示和响应,每个提示-响应对将被发送到API 100次,然后计算每个提示的均值和方差。然后,每天或每隔一段时间,您将向Gen AI API发送相同的提示,并查找与平均值过度变异的情况。同样,这是相当容易做到的。
开始编码吧!
选择一个语言模型,以在创建嵌入时使用。它应尽可能接近您的Gen AI API使用的模型。您必须能够完全控制该模型的文件,以及在创建嵌入和计算相似性时使用的所有支持库。该模型将成为您的参考。它相当于作为全球质量标准的1公斤纯硅球。
Java 实现
对我这个有20年 Java 编程经验的人来说,使用 Java 做这件事情的体验非常痛苦,直到我从深入学习 Java的示例中解决了问题。不幸的是,与 Python 相比,Java 的原生语言模型列表非常有限,尽管是过度设计的,但例如 Java 代码几乎与 Python 一样简洁:
- 配置用于创建句子嵌入向量的 LLM。
- 创建文本嵌入向量并比较两个文本之间的语义相似性的代码:
- 计算语义相似性的函数。
把它们结合起来
如前所述,目标是能够检测个别响应中的漂移。根据您的用例和要使用的Gen AI API,基准提示的数量、构成基线的响应的数量以及采样API的频率都会有所不同。操作步骤如下:
- 创建一组强烈代表您用例的基准提示和Gen AI API响应:10、100或1,000。将这些保存在表 A 中。
- 创建一组基准响应:对于每个提示,连续几天或一个星期内将其发送至API 10、50或100次,并保存文本响应。将这些保存在表 B 中。
- 计算基准响应之间的相似性:对于每个基准响应,计算其与表 A 中的响应之间的相似性。将这些相似性值与表 B 中的每个响应一起保存。
- 计算表 B 中相似性值的均值、方差和标准差,将它们存储在表 A 中。
- 开始漂移检测运行:每天或每隔一段时间执行与步骤 1 相同的操作。将结果保存在表 C 中。
- 计算在每次检测运行结束时表 A 中的响应之间的相似性。
- 当所有相似性计算完成后,查找是否有超出初始方差范围之外的相似性。
- 对于那些具有过度变异的响应,回顾原始提示、表 A 中的原始响应以及表 C 中的最新响应。最新响应的含义是否有足够的差异?如果是,您的Gen AI API模型可能偏离了产品所有者的期望;与他们进行讨论。
结果
收集和绘制的数据应该如下所示:
图表显示了一组基准提示,每个提示在一周内连续发送到API 100次 – 基准样本。计算了每个提示的均值相似性,并由基准线和均值画出。昨天发送的相同的 125 个基准样本的最新运行与基线平均值进行相似性计算 – 最新样本。会审查那些与基线响应相比似乎有相当大差异的单个样本的响应,是否存在与基线响应有显著语义差异的情况。如果出现这种情况,请与产品所有者讨论您的发现。
结论
非确定性软件将继续是工程师在开发、测试和监控方面面临的挑战,直到大型人工智能大脑将取代我们全部的工作为止。在那之前,我希望我已经提前警告并给你提供了清晰的解释和简单的方法,让你在下一次发生智能AI事件的会议中保持微笑。而且,如果没有别的办法,这篇文章应该帮助你为雇佣自己的数据科学家提出理由。如果这些都行不通,那么……数学呢?