一句话定义:SelfCheckGPT 是一种让模型自己检查自己有没有编造内容的方法。做法是让同一个模型对同一个问题采样多次,再比较这几次答案是否一致;答案越不一致,就越可能是在编。
大模型编造内容(hallucination,幻觉)时,往往语气很肯定。麻烦的是,从单次回答里看不出它什么时候在编。SelfCheckGPT 的思路像法庭上的交叉询问:不要求对方每次都说得一样,但要求前后不矛盾。具体做法是:把同一个问题问模型 N 次(把采样温度调高一点,让每次回答有变化),再把答案拆成一句句话,逐句看这一句在别的几次回答里有没有对应、是否互相矛盾。打分方式有好几种:词面重叠、句子向量相似度(如 AI 词典:BERTScore">BERTScore)、用自然语言推理(NLI,Natural Language Inference)判断两句是否互相蕴含,或者再请一个模型当裁判。这一步得到的“不一致分数”越高,这句越可疑。
打个比方:你问一个朋友“上周三那顿饭在哪儿吃的”,他真记得的话,问三遍基本说的都是同一家店;如果他当时不在场、只是随口应付你,每次细节都不一样——先是“街角那家”,再问变成“好像是个火锅”,第三次又说“记不清了但我记得是七点”。SelfCheckGPT 抓的就是这种“每次说法都不同”的答案。
| 方法 | 需要什么 | 判断依据 | 盲点 |
|---|---|---|---|
| 检索核查 | 外部知识库或文档 | 回答与资料是否一致 | 资料里没有就查不了 |
| 看输出概率 | 模型原始概率(不能只看被截断的输出) | 概率高就信 | 概率高不等于正确 |
| 让模型自我批评 | 模型自己 | 它说“我这样对不对” | 和它犯错误时是同一套偏见 |
| SelfCheckGPT | 只要多采样几次 | 多次答案是否互相一致 | 稳定地错会漏检 |
和相邻概念的区别:检索核查(retrieval-based factuality check)依赖外部资料;SelfCheckGPT 不需要任何知识库,只看模型自己前后是否一致。困惑度、输出概率这类不确定性估计通常需要访问模型的内部概率;SelfCheckGPT 是黑盒方法,只要能把模型多调用几次就行,所以对只开放 API 的模型也能用。名字里的 GPT 来自论文当时使用的模型,方法本身与具体模型无关。
对从业者的实际意义:这是一道成本很低的幻觉初筛。比如做客服或知识问答时,对于被标成“高不一致”的句子,可以把它标黄、转人工,或者触发一次检索核实;全量走人工显然不现实。对普通用户的意义是转换思路:判断模型可不可靠,它的语气不算数;换个问法、多问一遍、看它两次说法是否一致,才算数。
最后有两点要记住。第一,一致不等于正确——如果模型对某个常见误解一直记错,每次都会稳定地给出同一个错误答案,这种方法就发现不了。第二,不一致也不一定错,开放式问题本来就该有不同的回答,所以在需要发散的问题上别用它。另外,采样次数、判定阈值和具体打分方式都要按场景来调,实际实现细节以对应的开源项目页面为准。
