生成型大型语言模型(LLM),如GPT-3,能够对各种用户提示生成高度流畅的响应。然而,众所周知,LLM会对事实产生幻觉,并做出非事实陈述,这可能会破坏对其输出的信任。现有的事实核查方法要么需要访问输出概率分布(这可能不适用于ChatGPT等系统),要么需要访问通过单独的、通常是复杂的模块接口的外部数据库。在这项工作中,我们提出了“SelfCheckGPT”,这是一种简单的基于采样的方法,可以用于以零资源的方式对黑盒模型进行事实核查,即无需外部数据库。SelfCheckGPT利用了一个简单的想法,即如果LLM了解给定的概念,则采样的响应可能是相似的,并包含一致的事实。然而,对于产生幻觉的事实,随机抽样的反应可能会出现分歧和矛盾。我们通过使用GPT-3从WikiBio数据集中生成关于个人的文章,并手动注释生成的文章的真实性,来研究这种方法。我们证明了SelfCheckGPT可以:i)检测非事实和事实句子;以及ii)根据真实性对段落进行排序。我们将我们的方法与几个基线进行了比较,结果表明,在句子幻觉检测中,我们的方法的AUC-PR得分与灰盒方法相当或更好,而SelfCheckGPT最擅长段落真实性评估。

1.灰盒事实性评估

本节将介绍在零资源设置中,当可以完全访问输出分布时,如何确定LLM(大型语言模型)响应的事实性的方法。在此,我们使用“事实性”来定义何时陈述基于有效信息,即避免了虚构,并使用“零资源”来指示不使用外部数据库。

我们首先激发了为什么标准的基于不确定性的指标可能是事实性的好代理的直觉,然后描述了如何使用系统的输出令牌级概率分布来确定句子级的虚构。

1.1 基于不确定性的评估

动机:为了考虑如何在零资源环境中确定生成响应的事实性,我们考虑了LLM的预训练过程。在预训练过程中,模型通过对大量文本数据进行下一个词预测来训练。这使得模型具有强大的语言理解能力、强大的上下文推理能力以及世界知识。考虑输入“Lionel Messi 是一个_”。由于梅西是世界著名的运动员,可能在预训练中出现了很多次,LLM可能知道梅西是谁。因此,给定上下文,“footballer”(足球运动员)可能被分配很高的概率,而其他一些职业,如“carpenter”(木匠),则被认为是非常不可能的。然而,对于输入“John Smith 是一个_”,系统可能不确定句子应如何继续,并且可能有一个平坦的概率分布。在解码过程中,这将导致随机词被生成,从而导致系统产生虚构。

这种洞察力使我们认识到了不确定性指标和事实性之间的联系。事实性的句子可能包含具有更高可能性和较低熵的令牌,而虚构可能来自具有高不确定性的平坦概率分布的位置。

token级概率 p

给定LLM的响应 R,让 i 表示 R 中的第 i 个句子,j 表示第 i 个句子中的第 j 个令牌,J 是句子中的令牌数,p_{ij} 是LLM在第 i 个句子的第 j 个令牌处生成的单词的概率。使用两个概率指标:
\text{Avg}(- \log p) = - \frac{1}{J} \sum_j \log p_{ij}\text{Max}(- \log p) = \underset{j}{\text{max}} \left( - \log p_{ij} \right)
\text{Max}(- \log p) 通过评估句子中的\textit{最不}可能的令牌来衡量句子的可能性。

\mathcal{H}

输出分布的熵是:
\mathcal{H}_{ij} = - \sum_{\tilde{w} \in \mathcal{W}} p_{ij}(\tilde{w}) \log p_{ij}(\tilde{w})
其中 p_{ij}(\tilde{w}) 是在第 i 个句子的第 j 个令牌处生成单词 \tilde{w} 的概率,而 \mathcal{W} 是词汇表中所有可能单词的集合。与基于概率的指标类似,使用两个基于熵的指标:
\text{Avg}(\mathcal{H}) = \frac{1}{J} \sum_j \mathcal{H}_{ij}
\text{Max}(\mathcal{H}) = \max_j \left[ \mathcal{H}_{ij} \right]

2. 灰盒事实性评估

动机:前述的灰盒方法的一个缺点是它们需要输出令牌级别的概率。虽然这似乎是一个合理的要求,但对于仅通过有限的API调用提供的大型LLM,可能无法获得这样的令牌级别信息(例如ChatGPT)。因此,我们考虑黑盒方法,因为即使只能从LLM中得到基于文本的响应,它们仍然适用。

代理LLM:考虑的一个简单基线是使用代理LLM,即我们可以完全访问的另一个LLM,比如LLaMA​​。由于无法访问生成文本的LLM的完整输出,代理LLM可以用于估计输出令牌级别的概率。在下一节中,我们将提议SelfCheckGPT,这也是一种黑盒方法。

3. SelfCheckGPT

符号说明:让 R 表示由给定用户查询得出的LLM响应。SelfCheckGPT通过从相同的查询中抽取另外 N 个随机LLM响应样本 \{S^1,S^2,..,S^n,...,S^N\},然后测量响应和随机样本之间的一致性。我们设计了SelfCheckGPT \mathcal{S}(i)作为第 i 个句子的幻觉分数,使得 \mathcal{S}(i) \in [0.0, 1.0] ,如果第 i 个句子是幻觉,那么 \mathcal{S}(i) \rightarrow 1.0;如果它是基于有效信息的,那么 \mathcal{S}(i) \rightarrow 0.0

3.1 使用BERTScore的SelfCheckGPT

\mathcal{B}(.,.) 表示两个句子之间的BERTScore。使用BERTScore的SelfCheckGPT找到一个句子与每个抽取样本中最相似的句子的平均BERTScore:
\mathcal{S}_\text{BERT}(i) = 1-\frac{1}{N} \sum_{n=1}^N \underset{k}{\text{max}} \left( \mathcal{B} (r_i, s^n_k) \right)
其中 r_i 表示 R 中的第 i 个句子,s^n_k 表示第 n 个样本 S^n 中的第 k 个句子。这样,如果一个句子中的信息出现在许多抽取样本中,我们可能会假设该信息是事实;如果该陈述在其他样本中没有出现,那么很可能是幻觉。

3.2 使用问题回答的SelfCheckGPT

基于可以使用问题回答(QA)评估信息一致性的想法,我们将自动多选题回答生成(MQAG)框架应用于SelfCheckGPT。MQAG通过生成可以独立回答给定每个段落的多选题来评估一致性。如果查询了关于一致概念的事实,我们期望回答系统能预测出类似的答案。MQAG框架包括问题-答案生成系统 \texttt{G1},干扰项生成系统 \texttt{G2} 和回答系统 \texttt{A}。对于响应 R 中的句子 r_i,我们按照以下方式抽取问题 q、相关答案 a 和干扰项 \mathbf{o}_{\backslash a}
q, a \sim P_{{\tt G1}}(q,a|r_i);\hspace{2mm}\mathbf{o}_{\backslash a} \sim P_{{\tt G2}}(\mathbf{o}_{\backslash a}|q,a,R)
接下来,为了过滤掉不好(例如,无法回答)的问题,我们定义了一个可回答性分数 \alpha
\alpha = P_{{\tt U}}(\text{answerable}|q,\text{context})
然后,我们使用回答系统 \texttt{A} 来回答所有可以回答的问题:
a_R = \underset{k}{\text{argmax}} \left[ P_{{\tt A}}(o_k | q, R, \mathbf{o}) \right]
a_{S^n} = \underset{k}{\text{argmax}} \left[ P_{{\tt A}}(o_k | q, S^n, \mathbf{o}) \right]
我们比较 a_R 是否等于所有样本 \{S^1,...,S^N\}a_{S^n},得到匹配数 N_{\tt m} 和不匹配数 N_{\tt n}。随后,基于匹配/不匹配计数为第 i 个句子和问题 q 计算一个简单的不一致性分数:
\mathcal{S}_\text{QA}(i,q) = \frac{N_{\tt n}}{N_{\tt m} + N_{\tt n}}
为了考虑可回答问题的数量(即评估句子的证据),我们使用贝叶斯定理,得到
\mathcal{S}_\text{QA}(i,q) = \frac{\gamma_2^{N'_{\tt n}}}{\gamma_1^{N'_{\tt m}} + \gamma_2^{N'_{\tt n}} }
最终,使用QA的SelfCheckGPT是跨 q 的不一致性得分的平均值:
\mathcal{S}_\text{QA}(i) = \mathbb{E}_q \left[ \mathcal{S}_\text{QA}(i,q) \right]

3.3 使用n-gram的SelfCheckGPT

给定由LLM生成的样本 \{S^1,S^2,...,S^N\},我们可以使用这些样本训练一个新的语言模型来近似LLM。随着 N 的增大,这个新的语言模型更接近于生成响应样本的LLM。因此,我们可以使用新训练的语言模型来近似LLM的令牌概率。在实践中,由于时间和/或成本限制,样本数量 N 是有限的。因此,我们使用样本 \{S^1,...,S^N\} 和主响应 R(将被评估)来训练一个简单的n-gram模型。我们注意到,通过在训练n-gram模型时包括 R,可以将其视为一种平滑方法,其中 R 中每个令牌的计数增加1。然后,我们计算响应 R 上的平均对数概率:
\mathcal{S}_\text{n-gram}^\text{Avg}(i) = - \frac{1}{J} \sum_j \log \tilde{p}_{ij}
或者,我们也可以使用n-gram模型的负对数概率的最大值:
\mathcal{S}_\text{n-gram}^\text{Max}(i) = \max_j \left( -\log \tilde{p}_{ij} \right)

3.4 SelfCheckGPT组合

最后,考虑到SelfCheckGPT的三种变体的性质差异,我们期望它们是互补的。因此,我们考虑SelfCheckGPT-Combination,它是三种变体的标准化得分的简单组合,包括 \mathcal{S}_\text{BERT}\mathcal{S}_\text{QA}\mathcal{S}_\text{n-gram}