(NAACL )2025 深度排坑系列其三:别迷信大模型的“幻觉”,DocRE 大小模型协同精炼法则
论文信息速览
录用会议:NAACL 2025
论文地址:https://aclanthology.org/2025.naacl-long.319/
开源代码 (MindSpore Lab):https://github.com/mindspore-lab/models/tree/master/research
导语:
现在的大模型圈子有一种很不好的风气:遇到任何信息抽取任务,不管三七二十一,先套个 Llama3 或 GPT-4 进去 Prompt 一把再说。
但在“文档级关系抽取 (DocRE)”这种硬核 NLP 任务上,这种傲慢很容易被现实狠狠干碎。为什么?因为 DocRE 的任务分布非常恶劣:一篇长文档里,绝大多数实体对本来就是“无关系 (NA)”。
这时候,大模型那种“发散性联想能力”和“看什么都像有关系”的倾向,不再是优势,而是灾难——疯狂制造假阳性。你可以把它叫“幻觉”,但说白了,本质上就是:在负样本占绝对多数的任务里,LLM 太容易过预测。
反过来看,传统的专用小模型(SLM,比如基于 RoBERTa 的 DREEAM、ATLOP)虽然经常保守得要命,召回率不够猛,但它们有一个巨大优点:底盘稳,不爱凭空捏造。
东北大学这篇 NAACL 2025 的工作(受 CAAI-MindSpore 开放基金支持),提出了一套非常漂亮的 Refiner(精炼器)架构。它既没有神化大模型,也没有迷信小模型,而是老老实实承认两边各有短板,然后用一套严谨的任务分发与概率融合机制,把两者真正拼起来。
- 0基础直觉与底层机制:老中医和毛头小子的会诊系统
这套架构的逻辑,其实特别像会诊。
小模型(老中医):
很稳,很谨慎。证据不够,它就说“没病(NA)”。准是准,但经常漏诊。
大模型(毛头小子):
很敢说,很自信。看谁都像有点关系,脑补能力太强,经常过度诊断。
那怎么玩?作者的思路不是让谁替代谁,而是设计了一个两步走。
第一步(Task Distribution,任务分发):
先让小模型初诊。
如果小模型对“NA”这个判断特别有把握,而且和其他候选关系拉开了明显差距,那这种实体对就属于 Easy Task,直接结束,连大模型都不用叫。
但如果小模型虽然偏向“NA”,却又没法把其他候选完全压死,那说明这里面可能藏着真关系——这种就属于 Hard Task,再把它交给大模型做精炼判断。
这一步非常关键,因为它不是单纯为了省钱,而是在做一件更本质的事:
把大模型从“无意义的大量负样本”里解放出来,只让它处理真正值得花算力的难例。
第二步(Probability Fusion,概率融合):
这里是这篇论文最狠的地方。
很多人一看到“大模型辅助判断”,脑子里第一反应就是:让 LLM 输出一段文本解释,再看它说有关系没关系。
这恰恰是最容易翻车的地方。因为文本输出本身就带着生成式模型的发散性,幻觉最重的地方往往就在这里。
作者没有直接相信大模型的自然语言结论,而是把它强行限制在一个候选关系集合里,只读取它在第一个生成位置上的局部选项分布,再把这个分布和小模型的关系概率对齐后做融合。
说人话就是:
不听大模型“说了什么”,而是只看它在受限选项空间里“第一反应有多偏向哪个答案”。
这就很聪明了。因为你不是在拿一个会胡扯的生成器当裁判,而是在抽取它内部最早期、最受约束的偏好信号。
- 数学推导与工程避坑(Pitfalls)
什么时候判定小模型在“犹豫”?论文给了一个很巧的边界:
如果小模型预测 NA 的概率,和最强非 NA 关系之间拉开了足够大的差距,那就说明这个样本基本没争议,可以直接裁掉;
如果这个差距不够大,就说明这里是 hard case,值得交给 LLM 进一步 refine。
它的核心思想其实就一句话:
不是所有样本都值得请大模型出手,只有那些“小模型差一点就判断不稳”的边界案例,才值得进入精炼阶段。
【工程避坑指南】
这一块是最容易被做废的地方。
很多新手一看“概率融合”,脑子一热,直接把小模型输出和大模型输出堆起来。结果跑出来的 F1 不是提升,而是直接暴跌。
为什么?
因为这两个东西根本不在一个分布空间里。
小模型做的是 DocRE 的关系分类,它面对的是一个关系标签集合;
大模型原始输出面对的是超大词表分布。
两边的方差、温度、概率尺度,根本不是一个量级。你如果不先做局部约束和归一化,直接融合,等于拿两个单位都不一样的量硬加,最后把系统搞炸。
注意:下面代码只是为了讲清 Refiner 思路而写的“简化示意版”,不是论文原始实现的等价复现。原论文本身是多标签设定,而且还包含 top-k 候选、温度平衡和 self-supervision 等细节。你可以把它看成“帮助理解的工程草图”。
import mindspore as ms
import mindspore.numpy as mnp
from mindspore import ops
class DocRERefiner:
def init(self, delta=0.5):
self.delta = delta
def task_distribution_and_fusion(self, slm_probs, llm_logits_func):
"""
slm_probs: [N] 小模型已经归一化后的关系概率
llm_logits_func: 触发大模型推理并返回“局部候选选项概率”的函数
"""
# 假设第 0 类是 NA,后续是真实关系类别
# 坑 1:这里必须是概率,不是原始 logits
p_na = slm_probs[0]
p_max_r = mnp.amax(slm_probs[1:])
# 恢复真实索引
best_r_idx = ops.argmax(slm_probs[1:]) + 1
# 坑 2:分母要做数值保护,避免 0 附近导致 NaN
gamma = (p_na - p_max_r) / (p_na + 1e-8)
# Easy Task:小模型已经很确定,直接裁决
if gamma > self.delta:
return 0 if p_na > p_max_r else best_r_idx
# Hard Task:触发大模型,但绝不能直接读文本答案
# 只能读取首个生成位置在“候选选项局部空间”中的概率分布
llm_local_probs = llm_logits_func()
p_llm_na = llm_local_probs[0]
p_llm_r = llm_local_probs[1]
# 概率融合
fused_na = p_na + p_llm_na
fused_r = p_max_r + p_llm_r
# 最终裁决
return best_r_idx if fused_r > fused_na else 0
真正的大坑,不是“会不会调参”,而是会不会尊重分布边界。
这篇论文最值得学的地方,不是某个参数,而是它对系统边界非常清醒:
SLM 负责兜底;
LLM 负责补充;
LLM 只在受限候选空间里发言;
融合前必须先做概率尺度对齐;
不能把生成式文本输出直接当成可相信的结构化判断。
很多人做多模型协同时翻车,不是模型不够强,而是把不该混的信号混在一起了。
- 数据打脸与算力账本
在极难的 Re-DocRED 测试设定下,这套架构真正厉害的地方,不只是 F1 高,而是它把“效果”和“算力账”同时打通了。
纯砸算力(表12):
如果让大模型无脑覆盖所有实体对,效果其实很难看。
GPT-3.5-Turbo 直接全量推理,成本高达 $100.91,但 F1 只有 27.65;
LLaMA3-8B 全量推理,耗时 28.69 小时,F1 也只有 31.92。
说白了,大模型不是不能做 DocRE,而是你不能让它在这种 NA 占绝对多数的任务里无脑全覆盖。它一旦开始“想太多”,假阳性会堆得非常离谱。
Refiner 第一步发威:Task Distribution(还是表12):
加入小模型的任务分发以后,整个系统立刻像开窍了一样。
GPT-3.5-Turbo + Task Distribution:成本降到 $4.96,F1 反而升到 34.01;
LLaMA3-8B + Task Distribution:时间从 28.69 小时暴降到 1.21 小时,F1 提升到 42.43。
这就说明一个很朴素但很多人不愿承认的事实:
不是所有实体对都值得请大模型看。
大量本来就明显是 NA 的样本,让小模型先挡掉,才是工业理性。
完整 Refiner 收官(表4):
真正的 SOTA,不是只靠“筛数据”,而是靠后面的协同精炼。
当完整 Refiner 叠加到强 SLM 上之后:
AA + Refiner 在 Re-DocRED test 上达到 82.03 F1;
DREEAM + Refiner 达到 81.69 F1。
这才是这篇论文最有价值的地方:
Task Distribution 解决的是“别乱花算力”,而 Probability Fusion + Self-Supervision 解决的是“别让大模型乱说话”。
消融(表5):
论文的消融也很有意思。
如果你不做后面的精炼融合,而是更粗暴地使用 LLM,性能会明显掉点。比如 Refiner + DREEAM 是 81.69 F1,而去掉 probability fusion 之后会掉到 79.24,直接少了 2.45 个点。换句话说,真正拉开差距的,不是“有没有接入大模型”,而是你怎么约束它、怎么让它在系统里只做它该做的那部分事。
- 这篇论文真正厉害的,不是“调和大小模型”,而是它认清了大模型的边界
现在很多人做 Agent、做抽取、做流程自动化,最大的问题就是:
只要看到 LLM 表现强,就默认它应该统治一切。
但这篇论文的态度恰恰相反。
它没有被“大模型万能论”绑架,而是非常诚实地承认:
LLM 在开放生成上很强;
但在高负样本密度的结构化判别任务里,容易乱说;
SLM 虽然不够灵,但它稳;
真正好的系统,不是让一个模型统治全场,而是让不同模型各守自己的边界。
这就是为什么我一直说:
真正的架构师,绝不会迷信参数量碾压。
他更关心任务边界怎么划、概率分布怎么对齐、系统里每一层该承担什么责任。
- 总结:别把“模型能力”误当成“系统能力”
这篇 NAACL 2025 给我的最大启发,不是某个公式,也不是某个具体超参,而是一种很清醒的工程观:
模型强,不等于系统强。
大模型会说,不等于它说得准。
能生成,不等于能判别。
DocRE 这种任务,本质上不是拼谁最能脑补,而是拼谁更能控制假阳性、谁更能尊重任务分布。
Refiner 这套设计的价值,就在于它不迷信任何一边,而是让 SLM 兜底、让 LLM 补强、再用概率空间上的严格对齐把两边粘成一个真正可用的系统。
所以这篇论文最适合打脸哪类人?
就是那种一遇到复杂信息抽取任务,就默认“上个 GPT-4 / Llama3 再写个 Prompt 就完事”的人。
现实不会惯着这种傲慢。
在真正难的结构化任务面前,会分工、会约束、会融合,比一味堆参数重要得多。
这才是这篇 Refiner 的价值。
也是它最像“工业级方法论”的地方。