我为我的本地 RAG 添加了一个验证层,以捕捉幻觉
我使用 Ollama 构建了一个本地研究助手。它运行在我的个人论文上。没有任何数据离开我的机器。
我想阻止幻觉。一个语气肯定却引用错误数字的工具是危险的。
我添加了一个验证层。它分为三个步骤:
- 将答案分解为细小的断言。
- 使用 LLM 根据原文核对每个断言。
- 标记原文不支持的断言。
测试结果给了我一个深刻的教训。我在自己的数据上犯了两次错误。
首先,模型给出了一个真实的数字,但使用了错误的上下文。它为一个并不存在的测试集引用了 0.804 的 AUROC。数字是真的,但上下文是编造的。由于数字匹配,我的验证器通过了它。
其次,模型从论文的其他部分抓取了一个数字。它将一个数值归因于错误的实验。
以下是我通过测试学到的经验:
验证只能捕捉缺失的值。 如果文本中根本没有某个数字,验证器可以捕捉到它。但如果数字是真的,却关联到了错误的事实,验证器往往会失效。
同一模型担任裁判会有盲点。 如果同一个模型既编写答案又对答案进行评判,它会直接认可自己的错误。使用不同的模型进行评判有助于捕捉归属错误的数字。
标记并不总是意味着谎言。 标记可能意味着三种情况:
- 真实的幻觉。
- 检索错误,即未找到来源。
- 检索文本中未包含的真实事实。 当你看到标记时,尝试重新检索数据,而不仅仅是删除该断言。
- 你需要基准真相 (ground truth)。 如果不了解真实答案,就无法衡量幻觉。我差点在关于自己工作的研究中发表了两个错误的发现。通过对文件进行简单的搜索,这两个错误都得到了修正。
给你的 RAG 的实用建议:
- 使用与回答模型不同的模型来进行评判。
- 专注于改进检索。大多数“幻觉”其实只是检索失败。
- 将标记视为深入挖掘的提示,而不仅仅是错误的信号。
可选学习社区:https://t.me/GyaanSetuAi