> For the complete documentation index, see [llms.txt](https://elwood.gitbook.io/foundation-model-sec/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elwood.gitbook.io/foundation-model-sec/benchmark/constructing-benchmarks-and-interventions-for-combating-hallucinations-in-llms.md).

# Constructing Benchmarks and Interventions for Combating Hallucinations in LLMs

<figure><img src="https://1203660092-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVIbHxVNUonwDG5X6HrVv%2Fuploads%2FvD0iJNt1yOb2bZsUK4uA%2Fimage.png?alt=media&amp;token=492451e4-6397-4370-a457-7deda7829e02" alt=""><figcaption></figcaption></figure>

## 研究背景

大型语言模型（LLMs）在生成文本时容易出现幻觉（hallucination），即生成与输入或现实世界事实不一致的输出。这种现象降低了模型的可靠性，并引起了广泛关注。为了解决这一问题，研究者们尝试在模型生成过程中进行干预，以减少幻觉的发生。然而，现有的方法没有很好地区分幻觉的不同原因，这限制了干预措施的有效性。

## 过去方案和缺点

以往的研究尝试通过监督学习和强化学习微调方法来修正生成的文本，或者使用模型的内部状态（如权重和内部激活）来检测和预防幻觉。这些方法要么依赖于黑盒方法，要么依赖于白盒方法。黑盒方法关注于生成后的文本修正，而白盒方法则试图通过模型的内部状态来检测和预防幻觉。但是，这些方法缺乏对幻觉原因的区分，并且对于如何在模型架构中实施干预措施缺乏明确的指导。

## 本文方案和步骤

本文提出了一种基于模型知识的构建数据集和检测干预方法的新方法，用于闭卷和开卷问答设置。首先，作者定义了不同类型的幻觉，并提出了一种自动区分这些类型的幻觉的方法。然后，利用这些方法构建了针对特定模型内部知识的模型特定基准测试集。此外，本文提出了一种新的干预方法，即在幻觉发生之前进行干预，而不是在幻觉发生之后。此外，还提出了动态干预方法，仅在需要时进行干预，并与静态干预进行了比较。

## 本文创新点与贡献

1. 提出了一种构建每个LLM特定基准测试集的方法，这些测试集包含在模型知道正确答案的情况下产生的幻觉和基于现实的输出。
2. 对模型架构内的最佳干预策略进行了全面研究，并提出了一种新的动态干预方法，该方法仅在需要时进行干预。
3. 对干预评估提供了新的见解，包括分类准确性不是生成准确性的良好近似，应同时测量困惑度。

## 本实验

实验部分详细描述了如何构建数据集、如何进行幻觉检测和干预，以及如何评估干预的影响。实验使用了Llama2-7B和Goat-7B两个模型，并在开卷和闭卷问答设置中进行了测试。实验结果表明，干预措施在不同的模型组件和不同的情况下表现不同，而注意力组件在各种评估中始终表现良好。

## 实验结论

实验结果表明，通过在幻觉发生之前进行干预，可以有效地减少幻觉的发生。此外，动态干预方法在残差组件上的效果更好，而在注意力组件上则始终表现良好。分类准确性并不是生成准确性的良好指标，困惑度的测量也同样重要。

## 全文结论

本文建立了一个评估开卷和闭卷设置中白盒幻觉缓解技术的框架，并提出了基于模型知识的幻觉类型的分类学，同时揭示了有效的干预策略。研究表明，通过在幻觉发生之前进行干预，可以更好地引导模型生成基于现实的输出。

注1：

本文提出的动态干预方法是一种新颖的策略，旨在减少大型语言模型（LLMs）在文本生成过程中出现的幻觉现象。动态干预方法的核心思想是根据每个输入示例的具体情况，有选择性地对模型的某些组件进行干预，而不是对所有示例采用统一的干预策略。这种方法的优势在于它能够根据模型在生成答案时可能出现幻觉的风险，动态调整干预措施，从而提高干预的有效性，同时避免不必要的干预可能导致的性能损失。

#### 动态干预方法的步骤和特点：

1. **检测器的决策**：首先，使用一个分类器（例如SVM）来检测模型的中间表示，以确定是否存在幻觉的风险。分类器基于模型的内部状态，如隐藏层的激活，来判断每个示例是否可能产生幻觉。
2. **干预的触发条件**：设定一个阈值（TD），只有当分类器的置信度高于这个阈值时，才会对相应的组件进行干预。这意味着只有在模型有较高概率产生幻觉的情况下，才会采取措施。
3. **选择性干预**：动态干预方法允许对模型的不同组件（如MLP、注意力机制、头部或残差连接）进行干预。对于每个输入示例，根据检测器的输出，选择性地对那些可能导致幻觉的组件进行干预。
4. **干预的执行**：一旦确定需要干预，就会向模型的特定组件添加一个称为“引导向量”（steering vector）的调整项。这个向量的目的是将模型的激活向量推向更可靠的子空间，从而引导模型生成更准确的答案。
5. **干预的强度**：通过调整引导向量的大小（α），可以控制干预的强度。实验中，α的值可以通过验证集来优化，以找到最佳的干预强度。
6. **评估干预效果**：通过比较干预前后的分类准确性、生成准确性和困惑度等指标，评估动态干预方法的效果。

#### 动态干预方法的优势：

* **适应性**：动态干预方法能够根据每个输入示例的具体情况调整干预策略，这使得干预更加精确和有效。
* **灵活性**：通过选择性干预，可以减少不必要的干预，从而避免对模型性能的负面影响。
* **可优化性**：动态干预方法提供了多个可以调整的参数（如TD和α），使得干预策略可以通过实验进行优化。

动态干预方法的提出，为减少LLMs在文本生成中的幻觉问题提供了一种新的解决方案，并通过实验验证了其有效性。这种方法强调了在模型架构中进行干预时需要考虑的灵活性和适应性，为未来的研究提供了新的方向。

注2：\
在本文中，开卷（open-book）和闭卷（closed-book）设置是指两种不同的问答场景，它们与模型在生成答案时可以依赖的知识类型有关。

#### 开卷设置（Open-Book Setting）

在开卷设置中，模型在回答问题时可以依赖于提供给它的上下文信息。这意味着模型在生成答案时，除了依赖于其内部知识（即在训练过程中学到的知识）外，还可以参考问题所在的上下文中提供的信息。例如，如果问题和答案对已经明确地在上下文中给出，模型应该能够利用这些信息来生成准确的答案。在这种情况下，如果模型产生了与上下文不一致的答案，那么就可以认为发生了幻觉。

#### 闭卷设置（Closed-Book Setting）

与开卷设置相对，闭卷设置中模型在回答问题时不能依赖于任何外部信息，只能依赖于其内部知识。在这种情况下，模型生成的答案完全基于其在训练过程中学到的知识。如果模型生成的答案与其内部知识库中的信息不一致，那么也可以认为发生了幻觉。

### 如何判断示例是否可能产生幻觉

本文通过以下步骤来判断每个示例是否可能产生幻觉：

1. **构建基准数据集**：首先，作者提出了一种方法来自动区分不同类型的幻觉，并据此构建了包含幻觉和非幻觉（基于现实的）输出的数据集。这些数据集是针对特定模型的内部知识定制的。
2. **重复采样**：对于一个给定的问答示例，使用模型进行多次（例如5次）温度采样来生成多个可能的答案。根据金标准答案在这些采样中出现的次数，将示例分为三类：从未出现金标准答案（类型1），偶尔出现金标准答案（类型2），以及总是出现金标准答案（类型3）。
3. **利用DisentQA数据集**：在开卷设置中，使用DisentQA数据集，该数据集包含一个问题、一个文本上下文和两个答案（参数答案和上下文答案）。通过比较模型对这两个答案的偏好，可以判断模型是否产生了幻觉。
4. **动态干预和检测**：在闭卷设置中，通过动态干预方法和检测器来识别幻觉。模型在回答TriviaQA数据集中的问题时，会根据好的例子（good-shots）和坏的例子（bad-shots）的提示来生成答案。通过比较模型在这些不同提示下生成的答案，可以判断是否产生了幻觉。

通过这些步骤，本文能够识别出模型在特定情况下可能产生幻觉的示例，并为后续的干预策略提供了基础。

注3：

提到的“向量”是指在本文中用于干预大型语言模型（LLMs）生成过程中的“引导向量”（steering vector）。在尝试减少或防止模型产生幻觉（hallucination）时，引导向量的作用是调整模型在生成答案时的内部激活状态，使其更倾向于生成准确和可靠的输出。

具体来说，这个“将模型的激活向量推向更可靠的子空间”的含义是：

1. **激活向量**：在神经网络中，尤其是在深度学习和自然语言处理模型中，激活向量是指在模型的某一层中，所有神经元激活值的集合。这些激活值是模型在处理输入数据时计算得到的，它们代表了模型在该层对输入信息的理解和表示。
2. **子空间**：在数学和线性代数中，子空间是指一个向量空间的子集，这个子集本身也是一个向量空间。在语言模型的上下文中，子空间可以理解为激活向量可能存在的所有可能状态的一个子集，其中某些状态与生成准确和可靠的文本输出相关联。
3. **推向更可靠的子空间**：这意味着使用引导向量来改变或调整模型的激活状态，使其从当前的状态移动到与生成更准确输出相关的子空间中。通过这种方式，模型在生成文本时更有可能选择正确的词汇和信息，从而减少幻觉的发生。

总的来说，引导向量是一种干预手段，它通过改变模型的内部激活状态，引导模型的输出更接近于事实和模型已知的正确信息，以此来提高模型生成文本的准确性和可靠性。这是减少幻觉现象的一种策略，旨在优化模型的生成过程，使其更加符合预期的正确输出。

注4：

在本文中，确定更可靠的子空间涉及到对大型语言模型（LLMs）内部表示和行为的分析。更可靠的子空间通常指的是模型内部状态的某个区域，在这个区域中，模型的激活和表示与真实世界的事实和正确的输出高度相关。以下是如何确定这些子空间的一些方法：

1. **数据驱动的分析**：通过分析大量标注数据，研究者们可以学习到哪些内部表示与准确的输出相关联。例如，通过观察在正确答案生成时模型的激活模式，可以识别出与可靠性高的输出相关的子空间。
2. **对抗样本和异常值分析**：通过引入对抗样本或分析模型输出中的异常值，可以帮助识别模型在哪些情况下容易出错或产生幻觉。这些情况的内部表示通常不被认为是可靠的子空间。
3. **模型的自我监督学习**：在训练过程中，模型可以通过自我监督学习来识别和偏好那些与其预训练知识一致的输出。这种自我监督可以通过模型的内部机制实现，例如，通过强化学习来鼓励模型生成与已知事实一致的文本。
4. **中间表示的可视化和解释**：使用可视化工具和解释性技术来分析模型的中间层表示，可以帮助研究者理解模型在哪些激活状态下更倾向于生成准确的输出。
5. **引导向量的设计**：引导向量（steering vector）是用于调整模型激活的向量，它的设计基于模型的内部表示和已知的正确输出之间的关系。通过优化引导向量以最大化模型生成正确输出的概率，可以间接地识别出更可靠的子空间。
6. **动态干预**：本文提出的动态干预方法允许模型根据每个输入示例的具体情况来调整干预措施。这种方法依赖于模型的检测器来判断何时何地进行干预，从而可以动态地识别和利用更可靠的子空间。

通过这些方法，研究者们可以更好地理解和识别模型的内部表示中的可靠子空间，并利用这些信息来设计干预策略，减少幻觉的发生，并提高模型输出的准确性和可靠性。

## 阅读总结报告

本篇论文针对大型语言模型在文本生成过程中出现的幻觉问题，提出了一种新的干预方法。通过构建基于模型知识的基准数据集，并提出动态干预策略，本文不仅提高了对幻觉原因的理解，还为如何在模型架构中有效实施干预提供了明确的指导。实验结果表明，通过在幻觉发生之前进行干预，可以显著减少幻觉的发生，尤其是在注意力组件上的干预效果最为显著。此外，本文的研究还强调了在评估干预效果时，除了分类准确性外，困惑度也是一个重要的指标。这些发现对于提高大型语言模型的可靠性和准确性具有重要意义。
