Lilian Weng 出品,必是精品。
上下文幻觉:模型输出与上下文中的源内容不一致。 外源性幻觉(extrinsic hallucination):模型输出应该以预训练数据集为基础。但是,由于预训练数据集规模庞大,因此检索和识别冲突的成本非常高,不可能每次生成时都执行。如果我们认为预训练数据语料库可以代表世界知识,那么我们本质上就是需要确保模型输出的是事实并且可通过外部世界知识进行验证。另一个功能也同样重要:如果模型不知道某个事实,那么它应该表示自己不知道。
预训练数据问题 微调新知识
检索增强式评估 基于采样的检测 对未知知识进行校准 间接查询
RAG → 编辑和归因 动作链 针对归因进行微调 针对事实性进行微调 采样方法
Unknown 样本的拟合速度比 Known 样本的慢得多。 当 LLM 拟合的样本大多数是 Known 样本且仅有少量 Unkown 样本时,该 LLM 的开发集性能最佳。而当模型学习的样本大都是 Unknown 样本时,就会开始出现幻觉。 在 Known 样本中,MaybeKnown 能让模型的整体表现更好,胜过 HighlyKnown 样本。
幻觉命名实体(NE)误差:使用一个预训练的实体检测模型和文档层级的定基,该指标度量的是检测到的却未在 ground truth 文档中出现过的命名实体的比例。 蕴涵率(Entailment ratio):使用一个在 MNLI 上微调过的 RoBERTa 模型和句子层级的知识定基,该指标计算的是生成句子中由该蕴涵模型标记为「与配对的维基百科句子相关」的比例。
非上下文 LLM:直接使用「< 原子事实 > True or False?」来问询 LLM,不带任何上下文。 检索→LLM:在提词中加入 k 条从知识源中检索到的相关消息,并将其作为上下文。 非参数概率(NP):通过一个掩码式语言模型来计算原子事实中 token 的平均似然,并将其用于预测。 检索→LLM+NP:以上两种方法的集成方法。
在传记生成任务中,更罕见实体的错误率更高。 在生成时,更后面提到事实的错误率更高。 在生成时,如果使用检索来设定基础,便有助于大幅降低幻觉。
事实性:用精度衡量,即得到支持的事实在整个响应中所有事实中的占比。 长:用召回率衡量,即所提供的事实在所有应当出现在响应中的相关事实中的占比。因此,我们可以设定得到支持的事实数量最多为 K。
陈述提取:通过向 LLM 发送 prompt 来提取所有可验证的陈述。 查询生成:将每个陈述转换成适合外部工具使用的查询列表,比如搜索引擎查询、单元测试用例、代码片段、论文标题。 工具查询和证据收集:查询搜索引擎、代码解释器、谷歌学术等外部工具并获取结果。 一致性验证:根据来自外部工具的证据所提供的支持水平,为每个陈述分配一个二元的事实性标签。
用语言表达的数值或词,比如:最低、低、中等、高、最高。举个例子:「置信度:60% / 中等」。 答案 token 的归一化对数概率;请注意:微调实验中并没有使用这个概率。 在原始回答之后的一个间接「True/False」 token 的对数概率。他们的实验关注的重点是:在任务难度或内容的分布变化时,校准的泛化能力如何?每个微调数据点都是一个问题、该模型的答案(可能不正确)和一个已校准置信度。语言表达的概率能很好地泛化到这两种情况,并且所有设置都能很好地应对「乘法 - 除法」的任务变化。至于模型预测置信度方面,少样本学习的表现比微调模型差。包含更多示例能带来助益 —— 使用 50 个样本的表现差不多与微调版本一样好。
归因率(Attribution)是使用 AIS 分数(可归因于已识别来源分数)度量 y 中有多大比例可以归因于 A。我们可以收集人类标注或使用 NLI 模型来近似计算自动 AIS 分数。 留存率(Preservation)是指 y 中有多大比例保留了 x 的原文本,度量方式为 Prev_intent × Prev_Lev,其中 Prev_intent 需要人类标注,而 Prev_Lev 则是基于字符级的 Levenshtein 编辑距离。相比于两种对比方法,RARR 能带来更平衡的结果,尤其是在留存率指标上。
给定一个 prompt x 和模型输出 y,可检索出一些最相关的文档:d = ℳ_ret (x,y) 通过编辑器生成一个增强版的输出:
知识检索:RR 的实验是在维基百科上使用离散检索方法 BM25,然后根据一个预训练 MPNet 模型提供的嵌入余弦相似度来重新排名。 忠实度分数:组合使用蕴涵分数、矛盾分数和 MPNet 相似度来估计每条推理路径的忠实度分数。其中蕴涵分数和矛盾分数均由一个预训练 NLI 模型提供。
Retrieve:决定是否运行并行检索以获取一组文档;输出值:{yes, no, continue} IsRel:prompt x 和检索到的文档 d 是否相关;输出值:{relevant, irrelevant} IsSup:d 是否支持输出文本 y;输出值:{fully supported, partially supported, no support} IsUse:输出文本 y 对 x 来说是否有用;输出值:{5, 4, 3, 2, 1}
如果 Retrieve == no,则直接生成 y_t。 如果 Retrieve == yes,则模型并行检索多篇文章并使用 isRel token 检查检索到的文档是否相关。如果相关,则生成 y_t 并使用其它批评 token 给出分数,然后排名并从中选取最佳输出。
指令微调和 CoT 不会减少幻觉。 分解式和两步式 CoVe 能提升性能,并且进一步对不一致检测进行显式推理也能带来帮助(分解 + 修订方法)。 相较于长篇查询,短篇验证问题能得到更准确地回答。 LLM 生成的篇幅不定的验证问题比启发式方法更好(比如 X 能回答这个问题吗?),并且需要开放式生成的问题的效果优于单纯的是非问答题。
TopicPrefix 是为了让模型能更好地感知事实:在文档中的每个句子前面加上主题(即维基百科文档标题)。 训练目标是句子完成度损失:更新训练损失以将重点放在句子的后部分 —— 他们假设句子的后部分包含更多事实知识。其实现很简单:先确定一个中心点 t,然后对第 t 个 token 前面的所有 token 使用零掩码。
SFT 阶段(可感知事实性的 SFT):目标是生成事实性优于(根据 FActScore)模型自身生成结果的训练数据。 RLHF 阶段(可感知事实性的 RLHF):他们测试了两种方法,其中方法 (1) 的结果很差,而 (2) 的结果还算不错,原因很可能是 (1) 试图在没有足够训练的情况下向模型注入新知识。有证据表明微调新知识可能导致幻觉,而源自 RAG 的监督会包含 LLM 未知的信息。
基于参考的方法,检查外部知识库是否支持该模型陈述,类似于上面关于基于检索的幻觉评估部分。其过程为:(a) 提取原子陈述列表,(b) 查找维基百科参考资料,(c) 使用一个小型的 NLI 微调模型来检查参考文本是否支持该原子陈述。 无参考方法:使用该模型自身的置信度作为其真实度,这类似于间接查询方法。其过程为:(a) 使用少样本提词,将每个陈述转换成对应的问题 / 需要仔细调整语句以确保问题无歧义;(b) 多次采样模型,得到问题的多个答案;(c) 使用聚合分数 / 使用字符串匹配或让 GPT 来评价两个答案的语义是否等价。