零、前言
📕欢迎访问:
Github主页:github.com/Conqueror71...
注意,本文不涉及太多复杂的公式与数学推导,初学者或者像笔者一样数学不好的读者可以放心阅读!
一、一句话读懂在做什么
这篇文章有两个主要工作:
- 通过使用 LLM 改进了 ASR 的效果
- 使用有限状态约束来对抗 LLM 的幻觉现象
我们这次来介绍一下后者。
二、什么是 LLM 的幻觉
当 LLM 出现生成的文本在语法、结构或上下文连贯性方面可能存在的不准确或不符合预期的问题时,我们就称 LLM 出现了幻觉。由于生成模型的自由性,它可能生成看似合理但实际上是不正确的句子、缺乏逻辑连贯性或不符合输入上下文的文本,想必大家也经常遇见,不过按照惯例,还是举个例子:
假设我们使用 LLM 来写一封邮件回复,生成模型可能会生成一些看起来合理但实际上是错误的句子,例如:"我非常期待与您会面的飞行"。这句话中的"飞行"一词是错误的,可能是因为生成模型没有准确理解上下文或没有正确理解单词的含义。在这种情况下,生成模型给人一种幻觉,即它生成了一个表面上合理但实际上是错误的语句。
起飞?启动!
三、如何定义良好的输出形式
首先我们要了解,使用 LLM 进行生成任务的一个不足之处是,输出可能不仅不能正确地分段处理段落,甚至可能不包含与段落相同的标记。
在这里,"标记"指的是文本中的单词、标点符号或其他语言单位。在 NLP 中,文本通常被切分成一个个标记,每个标记代表一个有意义的语言单位。而在生成任务中,"标记序列"就是模型生成的文本中的一系列标记的顺序。
那么什么输出是良好 的呢,当它包含与输入相同的标记序列,在每个标记之前有零个或一个句子分隔符。虽然大型的 Transformer 模型的丰富参数可以学习输出的固有结构,但这可能并不稳定,本文提供了两种解决方案来强制让输出变为良好形式。
法一:Levenshtein 事后对齐算法
生成模型产生任意输出的能力可以被视为一种优势 ,如果经过训练,该模型可以纠正转录错误和消除不流畅之处 。因此,我们其实可以让模型自由地生成,而不强制执行结构约束,然后在事后强制执行良好形式的对齐。
这里的转录意思就是 ASR 或者 OCR 的过程
Levenshtein 事后对齐算法是一种用于在生成的字符串 和参考字符串 之间进行对齐的方法,较为形式化地说,我们使用它将生成的字符串与参考字符串 x 进行对齐,使用了 Levenshtein 距离来测量两个字符串之间的编辑操作的最小数量,然后通过将生成的字符串上的分段边界映射到参考字符串 x 上来确定生成字符串 y。通过这种方式,在 LLM 没有精确重新创建输入时,可以消除一些不流畅的文本。
举个例子来辅助说明:
假设我们有一个生成模型生成了以下文本:"我喜欢苹果",但实际上我们期望的是:"我喜欢吃苹果"。Levenshtein 可以通过比较这两个字符串并计算编辑操作的最小数量来纠正这种错误。在这种情况下,它可以识别出缺少的"吃"这个词,并将其插入到生成的字符串中,得到正确的句子。
法二:有限状态约束 FST
强制生成良好形式的另一种策略是使用约束解码。这种方法将输入的 FSA\ x 与一个特殊的 FST\ T 进行合成,该 FST 编码了所有可能的分段决策,然后将 FST 投影到输出带中,以获取输出空间的确定性 FSA,FST\ x◦T 如下图所示,如果从 0 状态开始,走最上面一条路,那就是没有 Segmentation,反之,走任何一条下面的路都会带来至少一个 Segmentation,在这里作者使用 ε:■ 表示:
"我来,我看,我征服。"------盖乌斯·尤利乌斯·凯撒
更进一步地说,FST 是 Finite State Transducer 的缩写,它是一种在输入序列和输出序列之间进行转换的有限状态机。FST 可以被用于模拟字符串的转换和映射操作,比方说将一个字符串转换为另一个字符串,或者将一个字符串映射到一组可能的输出字符串。在这篇文章中,FST 被用作约束解码的一部分,用于编码所有可能的分段决策,并将其投影到输出带中,以获得输出空间的确定性有限状态自动机。
举个例子辅助说明 FST 其实就是一个转换 Function:
想象一下你有一个自动售货机,它接受硬币并提供相应的饮料。你投入一个 1 元硬币,然后自动售货机发出一听可乐。在这个例子中,自动售货机就是一个 FST。它将输入序列(硬币)映射到输出序列(饮料)。FST 在这里充当了一个转换器的角色,执行输入到输出的转换操作。
那么,使用有限状态约束的效果是怎么样的呢?
作者对 Greedy Search 和 Beam Search 进行对比,其中 Decoder 内部使用了上文提到的分段 FST 约束,或者使用 Levenshtein 事后对齐修复无效的输出。不仅如此,作者还使用了不同的模型类型和模型大小,以分析约束解码在不同情况下的效果。
Greedy Search 想必大家都不陌生,就是一往无前的贪心!
这里简单介绍一下 Beam Search:这是一种更加综合考虑全局信息的搜索算法,它在每个生成步骤维护一个大小为 k 的候选项集合(称为 Beam),并根据模型的预测结果选择最具有潜力的 k 个候选项作为下一步的生成选择。这样,Beam Search 会跟踪多个可能的生成序列,而不仅限于贪心搜索的单一选择。
下表显示,在针对 Prompt 进行调优的情况下,约束对于较小的模型至关重要。可以看到,使用 Greedy Search 进行 PaLM 8B 模型的输出良好形式的比例仅为 14.5% 。即使将模型大小增加到 62B,良好形式的比例仍然低于 90%。
我们可以看出 Levenshtein 事后对齐算法是有效的,但更一般的有限状态约束效果更好。对于 8B 模型,F1 Score 的改进绝对值为 1-2%。对于 62B 模型,改进绝对值接近 3%。另一方面,如果微调的代价可接受,LLM 可以非常适应这个任务。
经过微调的 T5 Base 模型的良好形式比例为 99.4%。但需要指出的是,为了使结果对下游应用有用,Levenshtein 和 FST 这两种类型的约束都是必要的 ,以完全消除 LLM 中的幻觉。而 FST 约束更一般且更有效 ,因为它们在搜索过程中通过拒绝非良好形式的假设来影响束搜索。
四、为什么 FST 可以消除 LLM 的幻觉
FST 之所以可以消除 LLM 的幻觉,是因为它们在解码过程中引入了特定的约束 ,限制了生成文本的可能性。通过将输入的 FSA(有限状态自动机)与特定的 FST 合成,这些 FST 编码了所有可能的分段决策,并将其投影到输出带中,从而获得输出空间的确定性 FSA。这些约束确保生成的文本更符合预期的结构和语法,并减少不流畅或不正确的文本的生成。
让我们假设我们使用一个生成模型来描述一个图片,但是生成模型可能会生成一些看起来合理但实际上是不正确的描述,比如"图片中有一只黄色的狗在天空中飞翔"。这个描述中的狗飞翔在天空中的情况是不符合现实的,这是一个幻觉。如果通过使用有限状态约束,我们就可以将输出的描述限制为只包含可能的场景和对象,就像是"图片中有一只黄色的狗在草地上奔跑"。这样,有限状态约束可以消除生成模型中的幻觉,确保输出更符合预期和现实。
更进一步地说,具体的约束取决于应用的场景和需求,但通常可以包括以下几个方面:
- 场景约束:约束描述的场景必须与图片中的实际情况相匹配,比如限制狗在天空中飞翔和在草地上奔跑这两种可能性。
- 动作约束:约束狗的行为必须与现实中的狗的行为相符合,比如限制狗可以奔跑,但不能飞翔。
- 物体约束:约束描述中的物体必须与图片中的物体相匹配,比如限制描述中的狗必须存在于图片中。
- 颜色约束:约束描述中的物体的颜色必须与图片中的实际颜色相匹配,比如限制狗的颜色为黄色。
通过将这些约束应用于生成模型的输出,我们可以消除不符合现实的描述,确保生成的文本更准确地描述了图片的内容。这些约束可以通过有限状态约束的方法进行建模,以指导生成模型的输出。
FIN.