在大型语言模型(LLM,例如 GPT-3、GPT-4 等)中,“幻觉”(Hallucinations)指的是模型生成的信息或内容虽然看似合理和连贯,但实际上是虚构的或不准确的。这种现象在模型生成文本时非常常见,尤其是在回答事实性问题或生成有特定约束的文本时。

LLM 是一个经过训练的机器学习模型,不是数据库或搜索引擎,在根据输入的 prompt 生成文本的过程中,如果没有要求其输出解释,我们很难知道 LLM 是基于哪些信息亦或是训练期间从数据中获得的知识。很大程度上,生成的文本是从提供的 prompt 中推断出来,其结果不一定得到任何训练数据的支持,尤其该 prompt 与 LLM 掌握的知识所属领域相差较大时。这一点和人一样,会基于虚假的印象和未经核实的事实来得出看似正确实则谬误的结论,或者隔行如隔山、但却具备吹得天花乱坠的能力。

容易出现幻觉的场景

  • 数值混淆:处理与数字有关的文本,如日期或数值。
  • 处理长文本:在需要解读长期依赖关系的任务中,例如文档摘要或长对话历史(人设不符、指令遵循能力下降的一部分原因也是出于幻觉),模型可能会生成自相矛盾的内容。
  • 逻辑推断障碍:模型误解了原始文本中的信息,有可能产生不准确的结论。
  • 上下文与内置知识的冲突:模型在处理信息时,可能会过度依赖于预训练阶段获取的知识,而忽略实际上下文,导致输出不准确。
  • 错误的上下文信息:当给定的上下文包含错误信息或基于错误的假设时(如:“为什么高尔夫球比篮球大?”),模型可能无法识别这些错误,并在其回答中产生幻觉。

使用幻觉

可以将幻觉视为大型语言模型的一个特征,如果希望模型具有创造性,就希望看到它们产生幻觉。例如,如果要求 ChatGPT 或其他大型语言模型提供一个幻想故事的情节,希望它不是照搬任何现有的情节,而是生成一个新的人物、场景和故事情节。这只有在模型没有查找其训练数据的情况下才有可能实现。

另一个可能需要幻觉的原因是在寻找多样性时,例如,询问想法。这就好比让模型集思广益,从训练数据中找到的现有想法中衍生出新的想法,但又不能完全相同。幻觉可以探索不同的可能性。

缓解幻觉

数据层面的方式

数据是一切的源头,从源头着手去思考问题准没有错。如果是受污染的训练数据导致了幻觉,可以清理数据并重新训练模型。理论上来说,只有创建高质量无噪声的数据集才是最关键的解决方案。但清洗、验证大规模数据,还有保证各个来源数据的质量难度太大了,因此多数论文还有一些工业界落地还是会去探索一些“治标不治本”的其他方法。

这方面我了解的不多,因为在 AI 陪聊以及角色扮演场景是允许出现幻觉,甚至说幻觉也是一种增加有趣性和扩大话题的方式之一(所以在回答幻觉是否一定有害时,可以回答不一定,在一些需要创造力和灵感的场合,比如写作、闲聊等场景,幻觉的存在会带来一些奇思妙想)。唯一需要控制的是模型不要出现具体的人名、地名等信息,例如在和用户 A 对话的过程中出现一个历史人物的名称(因为在训练数据中出现)。一个方式是将训练数据中的人名、地名进行脱敏,用占位符替代,并让模型学会输出占位符,从而在线上使用时对占位符进行用户真实昵称的替换。

生成过程

控制生成

借助 prompt 工程为模型提供足够的细节和限制,使模型产生幻觉的自由度是有限的。具体做法是向模型指明角色和场景,以指导生成,从而避免模型产生无限制的幻觉。

修改解码策略

论文Factuality Enhanced Language Models for Open-Ended Text Generation

  • 原理:作者认为采样的随机性对生成句子的后半部分比生成前半部分影响更大,因此对事实性的损害也比在句子的开头更大。因为在句子的开始没有前文,所以只要它在语法和上下文上是正确的,大模型就可以生成任何内容。然而,随着生成的进行,前提变得更为确定,候选单词会更少,从而导致句子更容易生成不符合事实的结果。
  • 方法:引入事实核心采样算法,该算法在生成每个句子时动态调整 top-p 值,例如生成第 t 个 token 的 top-p 值为$p_t = max{\omega, p \times \lambda^{t-1}}$。其中,$\lambda$是 top-p 概率的衰减因子,随着生成 token 数量 t 的增加而逐渐衰减 top-p 的取值。w 是 top-p 值的下限(防止其过小而没有可选的生成)。当一个句子生成完毕后,top-p 值会因为 t 的增加而变得很小;当生成新的句子时,top-p 值能够重置为原始的值。

一致性策略

论文SELFCHECKGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models

  • 原理:如果模型真的掌握某个事实,那么多次生成的结果应该是相似且事实一致;相反,如果模型在胡扯,那么随机采样多次的结果会发散甚至矛盾。
  • 方法:从模型中采样多个响应(比如通过改变温度参数),并测量不同响应之间的一致性来确定哪些是事实,哪些是幻觉。

后处理方式

通过检测模型生成的内容是否存在幻觉,如果存在幻觉则采取一系列的后处理操作来缓解幻觉。

通过外部知识主动检测

论文A Stitch in Time Saves Nine: Detecting and Mitigating Hallucinations of LLMs by Validating Low-Confidence Generation

作者发现了两个问题:

  • 幻觉的生成是会传播的,比如一句话出现幻觉,后续生成的文本可能也会出现幻觉甚至更严重。这意味着,如果能够“主动”检测并减轻幻觉,那么也可以阻止其在后续生成的句子中的传播。
  • logit 输出值(输出词汇表上的概率分布)可以用来获取幻觉的信号。具体来说,可以计算一个概率得分,当这个得分很低时,模型更容易产生幻觉。因此,它可以作为幻觉的一个信号,当得分很低时,可以对生成的内容进行更具体的信息验证。

检测阶段:首先确定潜在幻觉的候选者,即生成句子的重要概念。然后,利用其 logit 输出值计算模型对它们的不确定性并检索相关知识。

减轻阶段:使用检索到的知识作为证据修复幻觉句子。将修复的句子附加到输入(和之前生成的句子)上,并继续生成下一个句子。该过程不仅减轻了检测到的幻觉,还阻止了其在后续生成的句子中的传播。

参考资料

avatar
clvsit
人生不是戏剧,而我亦非主角
Follow Me
公告
知乎和 CSDN 同名 clvsit,目前在将本地的笔记逐步迁移到这,所以会看到过去日期的文章不断增多