人工智能学习

我在AI初创企业中如何应对幻觉现象

本文主要是介绍我在AI初创企业中如何应对幻觉现象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
弱 grounding 和强 grounding 之间的区别

A stylised flowchart showing a user request turning into: \(Input + Context\) forming a request to a Large Language Model \(LLM\). The LLM is styled as a digitised brain with equations behind it. The LLM generates a response with “Possible Hallucinations”, some of which are labelled with “Where did you get this from? PROVE IT”. The response is connected back to portions of the input and context with “DON’T TRUST — VERIFY”. The verified result is sent back to the user.

图片由作者提供

我是一名专注于文档自动化和信息提取的AI工程师。在我的行业中,使用大型语言模型(LLM)在幻觉问题上带来了很多挑战。想象一下,一个AI将发票金额误读为100,000美元而不是1,000美元,导致了100倍的超额支付。面对这样的风险时,防止幻觉成为构建稳健AI解决方案的关键方面。在设计可能容易出现幻觉的解决方案时,我重点关注以下几个关键原则。

使用验证规则和“人工在环”

在AI系统中融入人类监督有多种方式。有时,提取的信息总是会被呈现给人类进行审核。例如,在提交给申请跟踪系统(ATS)之前,解析的简历可能会展示给用户查看。更常见的情况是,提取的信息会自动添加到系统中,只有在出现潜在问题时才会被标记出来供人类审核。

任何AI平台的一个关键部分是确定何时纳入人工监督。这通常涉及不同类型的有效性规则:

1. 简单的规则,例如确保每项明细的总额与发票总额一致。

2. 查找和集成,例如将总金额与会计系统中的采购订单进行核对,或验证支付详情与供应商之前的记录是否一致。

Validation popup for an invoice. Text “30,000” is highlighted with the following overlaid text: Payment Amount Total | #xpected line item totals to equal document total | Confirm anyway? | Remove?

一个需要人工干预的验证错误示例。来源:Affinda

这些流程是有益的。但我们也不希望一个AI系统频繁触发安全机制,从而迫使人工干预。如果AI系统频繁出现幻觉,这将违背使用AI的初衷。

小型语言模型

一种防止幻觉的方法是使用小型语言模型(SLMs),这些模型是“提取型”的。这意味着模型会标注文档的部分内容,我们将这些标签收集到结构化的输出中。我建议尽可能使用SLMs,而不是默认使用大型语言模型(LLMs)来解决所有问题。例如,在求职网站上的简历解析中,等待30多秒让一个大型语言模型处理一份简历通常是不可接受的。对于这种情况,我们发现SLMs可以在2-3秒内提供比GPT-4等大型模型更准确的结果。

我们管道中的一个示例

在我们的初创公司中,一个文档可以由多达7个不同的模型处理——其中只有2个可能是大型语言模型(LLM)。这是因为LLM并不总是最适合工作的工具。例如,检索增强生成步骤依赖于一个小型多模态模型来创建有用的检索嵌入。第一步——检测某物是否为文档——使用一个小型且超快的模型,该模型达到了99.9%的准确率。将问题分解成小块并确定哪些部分最适合使用LLM处理,这一点至关重要。这样可以减少幻觉发生的几率。

区分幻觉和错误

我特意区分了幻觉(模型编造信息)和错误(模型误解现有信息)。例如,选择错误的金额作为收据总额是一个错误,而生成一个不存在的金额则是一种幻觉。提取型模型只能犯错误,而生成型模型则可以同时犯错误和产生幻觉。

风险承受能力和接地技术

当使用生成式模型时,我们需要某种方法来消除幻觉。

_对齐_指的是任何迫使生成式AI模型通过引用某些权威信息来为其输出提供依据的技术。如何管理对齐取决于每个项目的风险容忍度。

例如,一家拥有通用收件箱的公司可能希望识别需要执行的操作项。通常,需要采取行动的邮件会直接发送给账户经理。一个充满发票、垃圾邮件和简单回复(如“谢谢”、“好的”等)的通用收件箱,包含了大量的邮件,人工检查非常耗时。当需要执行的操作项错误地发送到这个通用收件箱时会发生什么?操作项经常被遗漏。如果模型虽然会犯错误,但总体上是准确的,那么它已经比什么都不做要好。在这种情况下,对错误/幻觉的容忍度可以很高。

其他情况下可能需要特别低的风险容忍度——比如处理财务文件和“直通处理”。在这种情况下,提取的信息会自动添加到系统中,无需人工审核。例如,一家公司可能不允许发票自动添加到会计系统中,除非(1)支付金额与采购订单中的金额完全匹配,(2)支付方式与供应商之前的支付方式一致。

即使风险很低,我还是倾向于谨慎行事。每当专注于信息提取时,我都遵循一个简单的规则:

如果从文档中提取文本,那么它必须与文档中找到的文本完全匹配。

这在信息是结构化的(例如表格)时会比较棘手——特别是因为PDF不携带页面上单词顺序的任何信息。例如,一行项目的描述可能会跨多行显示,因此目标是无论单词的左右顺序如何(或某些语言中的右左顺序),都要将提取的文本框围起来。

强制模型指向文档中的确切文本称为“强关联”。强关联不仅限于信息提取。例如,客户服务聊天机器人可能需要引用(逐字引用)内部知识库中的标准响应。这并不总是理想的情况,因为标准响应可能实际上无法回答客户的问题。

另一个棘手的情况是需要从上下文中推断信息。例如,一个医疗助理AI可能会根据症状推断出某种疾病的出现,即使该疾病没有明确地被提及。识别症状被提到的位置是一种“弱接地”。响应的依据必须存在于上下文中,但确切的输出只能从提供的信息中综合得出。进一步的接地步骤可以是强制模型查找该疾病并证明这些症状是相关的。这仍然可能需要弱接地,因为症状常常可以用多种方式表达。

复杂问题的 grounding

使用AI解决越来越复杂的問題可能使得使用“接地”(grounding)变得困难。例如,如果模型需要执行“推理”或从上下文中推断信息,如何对输出进行“接地”(grounding)?以下是一些在复杂问题中添加“接地”的考虑因素:

  1. 识别可以分解为一系列规则的复杂决策。让模型生成决策的各个组成部分,而不是直接生成最终答案。然后使用规则来显示结果。(注意——这有时会使幻觉更严重。向模型提问多个问题会增加其产生幻觉的机会。但目前我们发现,模型在复杂多步骤推理方面通常表现更差。)
  2. 如果某事物可以用多种方式表达(例如症状描述),第一步可以让模型对文本进行标记并标准化(通常称为“编码”)。这可能会为更强的“接地”(grounding)打开机会。
  3. 为模型设置“工具”,以将其输出限制为非常具体的结构。我们不希望执行由LLM生成的任意代码。我们希望创建模型可以调用并对其设置限制的工具。
  4. 尽可能在工具使用中包含“接地”——例如,在将响应发送到下游系统之前,验证其与上下文的一致性。
  5. 是否有办法验证最终输出?如果手工编写规则不可行,能否为验证创建一个提示?(并且遵循上述规则来处理经过验证的模型)。
主要收获
  • 当谈到信息提取时,我们不允许输出内容不在原始上下文中出现。
  • 我们随后进行验证步骤,以发现错误和幻觉。
  • 除此之外,我们所做的就是进行风险评估和风险最小化。
  • 将复杂问题分解为更小的步骤,并确定是否需要大型语言模型(LLM)。
  • 对于复杂问题,使用系统方法来识别可验证的任务:

— 强制引用(Strong grounding)要求LLM直接逐字引用可信来源的内容。始终优先使用强制引用。

— 弱 grounding 要求 LLMs 引用可信来源,但允许合成和推理。

— 在可以将问题分解为更小的任务时,尽可能在这些任务上使用强 grounding。

Affinda AI 平台

我们构建了一个强大的AI文档处理平台,被世界各地的组织使用。

关于作者

我是 Affinda 的首席AI工程师。我花了10年时间从UX转行到AI,详情可参阅我的文章:从UX到AI的职业转变。想深入了解生成式AI吗?请阅读我的深入分析文章:大型语言模型实际上理解什么。

这篇关于我在AI初创企业中如何应对幻觉现象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!