主要方法
对于第 个 token , 它对应的第 层的 hidden embedding 表示为 , 为 hidden embedding 的维度, LLaMA-7B 中
. 然后通过 token embedding
可以得到 sentence embedding, 有两种方式:
或 ,
即平均或用最后一个 token embedding. 设生成了 个句子, 这 个句子的 sentence embedding
可以写成矩阵 ,
然后可以计算相似度矩阵或者也可以称为协方差矩阵 ,
其中 .
的作用不详.
然后可以计算
用来保证非奇异. 然后
就可以用特征值来计算, 这是所谓的 EigenScore, 可以写成 .
注意到微分熵 在 的情况下进行计算有 的形式, 这也就意味着
的形式就是微分熵或者说与微分熵成线性关系, 所以协方差矩阵的 表征了 sentence embedding space
的微分熵.
感觉像是发现微分熵在 的情况下与
有关,
然后求协方差矩阵凑了一个这种计算方式.
但是上面的内容有不正确的地方. 上面计算的 是 的,
而案例来说句子分布的协方差矩阵是 的, 并且 ,
即上面计算的
并不是协方差矩阵, 而是 个向量
之间的 Gram 矩阵. 所以更谈不上和微分熵有关了.
这篇文章认为 EigenScore 反映了
个 sentence 之间的相关性, 从而反映了 overconfidence:
如果 LLM 对回答比较自信, 那么产生的 个句子就会有很强的相关性, 那么会导致
接近非奇异的状态(真的是这样吗? ), 特征值较小, 甚至接近于
0, 这个时候产生幻觉的概率会比较小.
所以问题就是用 计算 Gram 矩阵时,
如果向量
之间都比较相似, 那么 Gram 矩阵会接近非奇异的状态吗?
否则的话生成的
个句子差距比较大,
的特征值也比较大, 分数也会越高, 产生幻觉的概率也会变大.
所以需要一个阈值.
怎么算呢? 原论文写的不明不白的,
建议自己重新想一个比较合理的动态计算阈值的方式.
以阈值为自变量去优化一个目标,
这个目标应该是这个阈值可以比较好地去分开幻觉与非幻觉, 也就是说:
对于幻觉内容, 设置了阈值后 LLM 应该尽可能多地回答 "我不知道"
对于非幻觉内容, 设置阈值之后 LLM 也能正常回答出正确内容,
避免回答我不知道
给定若干个问题-回答对 ,
输入大模型的回答 , 对比
可以求出来对于这些问题哪些确实出现幻觉了,
根据是否出现幻觉可以得到一个向量 , 对 问 题 的 回 答 出 现 幻 觉 . 然后对于阈值 , 按照 EigenScore 发挥作用的方式,
对这
个样本也可以得出模型有无出现幻觉的一个向量 , 回 答 问 题 时 分 数 高 于 ,
那么在阈值
下就能知道哪些回答用 EigenScore 正确地判断为幻觉了, 所以根据
做对比可以求出阈值 的正确率
, 那么只需要 INSIDE 使用的是 G-Mean, 但总归都是 的函数. 要解决上面的优化问题,
没有办法求导, 可以考虑在区间 上均匀取点,
找最大的点作为最终阈值即可. 这一过程在训练和推理之间做, 当训练好模型后,
抽取若干训练集作为上面提到的
个问题-回答对, 然后用推理的方式求出回答, 按照上述方式计算即可.
因此 是 的函数, 所以可以通过最大化 G-Mean
来求出最优的阈值 .
感觉差不多就是原论文的过程了.
与其他方法的对比
这是一种幻觉检测的方法, 设 为 maximum softmax
probability (MSP), 对于传统的分类模型,
这个值衡量了分类的自信程度以及在预测的不确定性的度量中应用广泛.
已有的方法有:
Perplexity 是 sequence uncertainty, 这实际上是不同
token 的联合概率. 缺点: 这是平均 token-level 的不确定度,
不能有效地捕捉整个句子地不确定度. 多生成一些句子可以更好的估计
sequence-level 的不确定性.
LN Entropy ,
LS : 用 Rouge-L 计算多个句子两两之间的相似度的平均值.
然后比较核心的(前人的)观点是:
当模型对它的回答不确定时, 就会产生幻觉,
同时会导致回答的分布的熵较高.
这是下面文章的观点:
Language models (mostly) know what they
know
生成的多个答案之间的语义一致性也用来度量幻觉, 这假定了如果 LLM
清楚上下文并且对答案很确定的话, LLM 应该会产生相似的回答.
这是下面的文章的观点:
Selfcheckgpt: Zero-resource black-box hallucination
detection for generative large language models
Self-consistency improves chain of thought reasoning in
language models
这里最大的问题就是, LLM 如果对答案很确定,
那万一是对错误的答案比较确定呢? 就很像固执己见的人类.
计算的分数是 embedding space 语义一致性的度量, 并且表征了 sentence
embedding space 的微分熵. 当然文章里这一观点是错误的.
实验
实验指标采用的是:
AUROC (area under the receiver operator characteristic curve):
用于衡量二分类的质量和不确定性度量的指标
PCC (Pearson Correlation Coefficient):
衡量幻觉检测度量与正确性度量之间的相关性, 定义为生成答案与真是答案之间的
ROUGE-L 分数或者语义相似度.
两个都是越高越好. 然后:
表示使用
sentence similarity 作为正确性度量的 AUROC 分数
表示使用 ROUGE-L
分数作为正确性度量的 AUROC 分数
上面提到的三篇文章的关键信息
1: Language models (mostly) know what they
know . 一篇很长的文章.
这篇文章做了一个关于答案分布熵的一个实验. 采样 个句子后用 计算熵, 然后对若干个样本推理计算出每个样本对应的熵,
化成下面的柱状图:
然后可以发现回答正确的那些样本的熵偏低. 但是文章又指出了
作为衡量正误的度量只在模型较小的时候比较显著, 对模型的大小不 robust.
然后还有一个类似的实验 Loss of Sampled Answers Stuffed into a Single
Context, 暂时先不说.
2: Selfcheckgpt: Zero-resource black-box hallucination
detection for generative large language models .
提出了一种不需要外部知识库就可以检测 sentence-level 幻觉的方法为
SelfCheckGPT, 使用的核心前提就是 SelfCheckGPT leverages the simple idea
that if an LLM has knowledge of a given concept, sampled responses are
likely to be similar and contain consistent
facts . However, for hallucinated facts, stochastically
sampled responses are likely to diverge and contradict one
another .
然后剩下的一切方法都是依托于采样得到的不同 response 的幻觉分数.
3: Self-consistency improves chain of thought reasoning
in language models
介绍了一种新的解码策略, 代替 CoT prompting 的 greedy decoding.