跳到主要内容
三万次回答,没有一次既像又对:拆一个圣训复述基准

三万次回答,没有一次既像又对:拆一个圣训复述基准

abanana
abanana

· 阅读约 4 分钟

上周翻 arXiv 的 cs.CL 新列表,本来是把一篇基准论文当普通多语言评测划过去的,翻到结果那一段停住了。作者拿五款开放权重模型去复述六部逊尼派正典圣训集,每部抽 500 条,五个模型两种语言跑下来一共 30000 次回答,没有一次同时达到高词汇保真度和高语义保真度。模型名字和作者名单这里不念了,这篇只拆一件事:这个 0 是怎么来的,以及它为什么不是「宗教文本比较特殊」,而是一条通用的规矩。

先看它到底怎么问。模型只拿到书目式引用——集名、章节、编号,然后被要求输出对应的圣训原文,全程没有检索增强:

输入:Sahih al-Bukhari, Book 2, Hadith 8
要求:输出对应的圣训原文
可用工具:无(无检索、无外部语料)

这个设定很干净。平时测幻觉,很多人习惯把检索开着,最后分不清到底是模型记错了,还是检索喂错了;这里把检索抽掉,变量只剩一个,就是权重里到底存没存这段文本。它测的不是「模型能不能找到」,是「模型记不记得」。

评分分两路:词汇保真度用 BLEU,语义保真度用多语言余弦相似度,拒答单独标记。重点就在这个「两路」上。单看任何一路,模型都能拿到不难看的分数,因为圣训的语体特征太鲜明了,开头结尾的套语、传述链的格式,模型学得很到位,余弦相似度不会低;但一逐词比对,套语底下的实质内容就开始漂。所以那个 0 的准确含义是:三万次里,没有一次做到「既像又对」。只看语义相似度,会系统性地高估这类模型。

真正让我停下来的不是这个 0,是拒答那一路的标注。不是模型答不出来,是它答得太顺了。它给你一段格式完美、语气虔诚、传述链齐全的文本,你从表面上根本看不出哪一句是原文、哪一句是它按语体惯例补出来的。这种东西放到一般场景最多浪费点时间,放到宗教文本上就是另一回事,论文用的措辞是「被误认为真实经文的危险」,我觉得不算夸张。

还有个反直觉的点:阿拉伯语的整体表现比英语还差。这批模型里有阿拉伯语优先训练的,按直觉它们至少该在阿拉伯语这一侧更稳,结果并没有。为什么,我没看到让我完全信服的解释,一个可能的方向是正典文本在训练语料里的绝对占比本来就低,语体像不等于逐字记得。这一段我持保留态度,但结论的方向是清楚的:这不是「换一个更大的、语料更多的模型就好了」的问题,是路线问题。

把宗教文本这层外衣去掉,剩下的是个我经常踩的东西。只要你要的是「原文」,不管是配置项的准确拼写、某个库的错误码、一段合同条款,还是自己仓库里那个函数的签名,从权重里要都是碰运气。我上个月还干过一件事,让它凭记忆背某个库的配置字段名,背出来的几个里有一个是把两个相近的字段糅在了一起,单看格式完全合理,贴进配置文件就是一条静默失效的规则。模型能给你一个长得非常像的版本,而你要拿它去跑 CI、去对合同、去贴 issue,差一个字符就是错。

论文给的建议很朴素:面向伊斯兰学术的部署应该走基于经核实语料的检索增强生成,别指望参数记忆。翻译成通用做法就三步:

检索:从经人工核实的语料里取回原文片段
生成:只能引用,不得改写;必须原样附上集名/章节/编号
兜底:检索不到就拒答,不要用参数记忆补

但要说清楚,上了 RAG 不等于问题自动消失。检索回来的那段是不是真原文,得有人在建库那一步核过;模型拿到原文之后会不会自作主张润色一遍,得在 prompt 里明确禁止改写。这两步里任何一步松掉,前面那个 0 就白测了,只不过失败形态从「记错了」变成「引错了」。后者更难被发现,因为它看起来有出处。

划重点:第一,测参数记忆的评测就别顺手开检索,变量混在一起的结论没法用,这也是这篇论文最值得学的地方;第二,看模型输出要同时看词汇和语义两路,语义相似度高不代表逐词对得上;第三,精确文本场景默认走检索、默认要出处、默认允许模型说「我没有」。代码、提示词、评估流程和评分输出作者都放出来了,你可以挑一个模型、挑一部集子把那 500 条跑一遍,看看换到别的语料上是不是同一个形状。我猜差不多,但我自己还没跑,这条先留个坑,下次补上。

abanana
abanana

把自己踩过的坑整理成一篇能复现的笔记,写给三个月前的自己看。

查看主页 →