我为我的本地 RAG 添加了一个验证层,以捕捉幻觉

我使用 Ollama 构建了一个本地研究助手。它运行在我的个人论文上。没有任何数据离开我的机器。

我想阻止幻觉。一个语气肯定却引用错误数字的工具是危险的。

我添加了一个验证层。它分为三个步骤:

  • 将答案分解为细小的断言。
  • 使用 LLM 根据原文核对每个断言。
  • 标记原文不支持的断言。

测试结果给了我一个深刻的教训。我在自己的数据上犯了两次错误。

首先,模型给出了一个真实的数字,但使用了错误的上下文。它为一个并不存在的测试集引用了 0.804 的 AUROC。数字是真的,但上下文是编造的。由于数字匹配,我的验证器通过了它。

其次,模型从论文的其他部分抓取了一个数字。它将一个数值归因于错误的实验。

以下是我通过测试学到的经验:

  1. 验证只能捕捉缺失的值。 如果文本中根本没有某个数字,验证器可以捕捉到它。但如果数字是真的,却关联到了错误的事实,验证器往往会失效。

  2. 同一模型担任裁判会有盲点。 如果同一个模型既编写答案又对答案进行评判,它会直接认可自己的错误。使用不同的模型进行评判有助于捕捉归属错误的数字。

  3. 标记并不总是意味着谎言。 标记可能意味着三种情况:

  • 真实的幻觉。
  • 检索错误,即未找到来源。
  • 检索文本中未包含的真实事实。 当你看到标记时,尝试重新检索数据,而不仅仅是删除该断言。
  1. 你需要基准真相 (ground truth)。 如果不了解真实答案,就无法衡量幻觉。我差点在关于自己工作的研究中发表了两个错误的发现。通过对文件进行简单的搜索,这两个错误都得到了修正。

给你的 RAG 的实用建议:

  • 使用与回答模型不同的模型来进行评判。
  • 专注于改进检索。大多数“幻觉”其实只是检索失败。
  • 将标记视为深入挖掘的提示,而不仅仅是错误的信号。

来源:https://dev.to/sysoft/i-added-a-verify-layer-to-my-local-rag-to-catch-hallucinations-it-caught-me-being-wrong-twice-1jm

可选学习社区:https://t.me/GyaanSetuAi