2023-10-10论文笔记
Contrastive Decoding: Open-ended Text Generation as Optimization
想要解决的问题
大语言模型存在的生成内容无关、重复、不连贯等问题。
灵感来源
大语言模型的种种问题在更小的 LMs 上更为明显。
使用的方法
- 首先需要分别加载好两个 LM ,一个是大语言模型(例如 OPT-13B ),叫做 expert ,一个是小语言模型(例如 OPT-125M ),叫做 amateur 。并分别使用这两个模型对下一个 token 进行预测。
- 考虑到合理性约束的问题,需要将 token 的搜索空间限制在 expert 预测的概率高于某个阈值的子集中。
- 接着对该空间之中的每个 token 进行搜索,目标是最大化 expert 对数概率和 amateur 对数概率之间的差异。
方法效果
How Language Model Hallucinations Can Snowball
引言
在之前的论文阅读中,我们主要关注的是那些由于知识的鸿沟而导致的幻觉现象,这篇论文关注的却是来源于其他的幻觉现象。
背景
在现实应用中,LLMs的主要风险在于它们倾向于产生不正确的陈述,也就是我们所说的幻觉现象。这种生成错误内容的情况通常被认为是因为语言模型自己知识有限所致。但是这篇文章的作者提出了一个假设,那就是在某些情况下,当语言模型试图为自己先前生成的错误内容进行解释或者辩解时,它会产生一些明显错误的说法,而这些错误它本身具有能力认出来。也就是说,有时候语言模型生成错误内容不是因为知识缺乏,而是它在为自己的错误找理由的时候,刻意产生了容易识别为错误的说法。
作者将“语言模型过度依赖于早期的错误,导致出现更多原本不会犯下的错误“的现象称为“幻觉雪球式增长“。
本文的工作
发现
首先作者对发现的“幻觉雪球式增长“现象进行了测试,发现这种为了跟之前产生的幻觉保持一致性而生成的辩护内容往往会在单独进行测试的时候被判别为假,如下图所示:
数据集
作者构造了三个数据集,分别包含了原始问题和独立的验证问题,如下图所示:
来源
有两点是值得我们注意的:
- 通常来说,LLMs的回答由两部分组成:结论以及后续对结论的解释。在三个数据集的实验中,作者发现GPT-4和ChatGPT会立即确定问题的答案,此外,一旦语言模型生成了Yes或No,该词汇将保留在上下文中,并且为了保持一致性,在后续的解释中LLMs会坚持这一选择。
- 一些理论工作(William Merrill and Ashish Sabharwal. 2023. The parallelism tradeoff: Limitations of log-precision transformers)证明了Transformer无法在单个时间步内解决素数判别或图连接等等具有潜在顺序推理的问题。因此,要求Transformer在单个时间步内解决需要多个时间步才能正确回答的问题,势必会导致LLMs在有时给出一个不正确的答案。
作者认为,这两点都会导致语言模型产生它本不会生成的支持错误事实的幻觉。
实验
经过实验,作者发现在这三个数据集中,绝大多数的幻觉都属于“雪球式幻觉”,如下图所示:
如何预防雪球式幻觉
关于如何预防雪球式幻觉,作者提出了两种方法:prompting 和 decoding or training methods。
prompting
无需赘述,就是通过设计prompt鼓励模型在答案之前生成推理链来实现更好的效果。但是如以往的工作(Kushal Arora, Layla El Asri, Hareesh Bahuleyan, and Jackie Cheung. 2022. Why exposure bias matters: An imitation learning perspective of error accumulation in language generation.)中提到的那样,在LLMs中一个错误往往会触发更多的错误,于是作者通过实验发现这种方法并不十分有效,因此又开发了第二类方法——算法修正。
decoding or training methods
- beam search。前面提到过,一旦模型生成了一些确认答案的词汇,它们就会保留在上下文中并影响后续的生成。因此,缓解雪球式幻觉的一个潜在方法就是beam search,具体来说就是在decoding过程中的每个时间步都维护一个高概率序列束,而不是单个序列。在下一时间步,对当前beam中的每个序列候选分别生成新的词,并计算新的序列概率,并再次保留具有top-k高概率的新序列束进入下一个时间步,依此类推。其目的应该是缓解初始答案出错导致的雪球式幻觉。
- 学习策略。前面是解码阶段的缓解方法,训练阶段也有自己的缓解方法——在生成答案之前,让模型产生推理链或者在backtracking data上进行微调(指的是先给出一个问题,再给出一个错误的解决方案,然后在给出正确的解决方案之前添加“抱歉,那是不正确的”之类的短语;其目的应该是为了缓解曝光偏差导致的雪球式幻觉——在训练过程中,语言模型只接触到金标准历史,但在推理过程中,上下文中包含可能有错的以往的预测)。
Chain-of-Verification Reduces Hallucination in Large Language Models
背景
- 在长文本生成任务中,幻觉的一个来源就是曝光偏差。
- 独立地验证问题比在上下文中进行验证更加准确。
- 注意到自己生成内容中存在幻觉的模型,往往会重复这些幻觉,而不是改正它。
本文的工作
Chain-of-Verification (COVE)的流程大致如下:
- 给定问题,让LLMs生成一个初始的响应。
- 给定问题和初始响应,让LLMs设计一系列的验证问题来对初始响应进行自我检查。
- 独立地回答这些验证问题,然后检查初始响应和验证回答之间的一致性。
- 根据找出的不一致性和之前的内容,生成最终的响应。
简单的示例如下图所示:
在这四个步骤中,第1、2、4步都是可以通过单个prompt实现的,第三步作者则是设计了四种变体:联合式,两步式,分解式(这一步其实可以使用工具,如搜索引擎或外部文档等等,但是作者只使用了LLMs本身),分解修正式。
联合式
第2、3步是使用一个prompt完成的。
两步式
联合式变体有一个问题就是由于两个步骤是基于一个prompt完成的,那么LLMs对于验证问题的响应就一定会受到之前生成的初始响应的影响。如我们之前所述,这样显然会增加雪球式幻觉和重复的可能性,让验证问题的答案趋同于初始响应,以至于难以判别是否有幻觉产生。因此作者将这两个步骤分开进行,在第二步的给定上下文中只包含问题,而不包含初始响应。
分解式
这种方式是要对所有的问题都进行独立的问答。这样做除了可以消除初始响应的影响,还可以消除答案之间的影响。具体做法是先将第2步中生成的所有问题分解为一个个独立的问题,然后并行地进行问答。
分解修正式
这一方式是在分解式的基础上添加了一个验证步,具体做法是将初始响应、验证问题以及对其的响应一起作为输入,让LLMs判断是否产生了不一致现象。
方法的效果
关于 exposure bias 问题
简单来说,exposure bias指的是在训练大语言模型过程中,模型只能看到人工提供的训练数据,而看不到自己生成的序列。这导致模型在测试时生成的序列质量可能不如训练数据,从而对下游任务产生负面影响。
主要有以下几个方面的原因:
- 模型只见过真实数据分布,没有接触到自己生成序列的分布。这导致模型对自己的输出分布估计不准确。
- 模型无法评估自己生成序列的质量。它不知道哪些生成的内容是错误的或不合逻辑的。
- 在训练过程中,模型总是以真实数据作为下一个输入,而不是模型生成的序列。这导致测试时模型不习惯自己的生成结果作为输入。
- 有evidence显示exposure bias会导致模型生成内容的多样性不足。
解决exposure bias的常见方法包括:
- 数据增强,给模型提供更多样化的训练数据。
- 使用reinforcement learning的方法,允许模型评估自己生成内容的质量。
- 在训练过程中,有一定概率使用模型生成的序列,而不是真实数据作为下一个输入,让模型适应自己的输出。
- 在测试时使用beam search等搜索算法生成多个候选序列,而不是单次输出。
总体来说,exposure bias依然是困扰大模型的一个重要问题,需要通过数据和算法手段综合解决。
关于减轻幻觉的方法
论文中的相关工作将减轻幻觉的主要方法粗略地分为三类:训练时修正,生成时修正以及使用工具增强。
- 训练时修正。通过训练或者调整编码器-解码器或仅解码器语言模型的权重来改进生成内容,以减少幻觉生成的概率。例如使用强化学习,对比学习等方法。
- 生成时修正。在LLMs的基础上使用推理决策,使得到的结论更加可靠。例如考虑生成token的概率来检测幻觉,考虑LLMs输出的不一致性来检测幻觉,使用多个LLMs进行“辩论”来检测幻觉等等。
- 使用工具增强。使用外部工具,而不是仅依靠语言模型本身的能力来减轻幻觉现象。例如使用外部事实文档,使用CoT验证,使用事实检查工具等等。