别迷信大模型,DocRE 精炼器如何合理分工

(NAACL )2025 深度排坑系列其三:别迷信大模型的“幻觉”,DocRE 大小模型协同精炼法则

:chequered_flag: 论文信息速览
录用会议:NAACL 2025
论文地址:https://aclanthology.org/2025.naacl-long.319/
开源代码 (MindSpore Lab):https://github.com/mindspore-lab/models/tree/master/research

:chequered_flag:导语:
现在的大模型圈子有一种很不好的风气:遇到任何信息抽取任务,不管三七二十一,先套个 Llama3 或 GPT-4 进去 Prompt 一把再说。

但在“文档级关系抽取 (DocRE)”这种硬核 NLP 任务上,这种傲慢很容易被现实狠狠干碎。为什么?因为 DocRE 的任务分布非常恶劣:一篇长文档里,绝大多数实体对本来就是“无关系 (NA)”。

这时候,大模型那种“发散性联想能力”和“看什么都像有关系”的倾向,不再是优势,而是灾难——疯狂制造假阳性。你可以把它叫“幻觉”,但说白了,本质上就是:在负样本占绝对多数的任务里,LLM 太容易过预测。

反过来看,传统的专用小模型(SLM,比如基于 RoBERTa 的 DREEAM、ATLOP)虽然经常保守得要命,召回率不够猛,但它们有一个巨大优点:底盘稳,不爱凭空捏造。

东北大学这篇 NAACL 2025 的工作(受 CAAI-MindSpore 开放基金支持),提出了一套非常漂亮的 Refiner(精炼器)架构。它既没有神化大模型,也没有迷信小模型,而是老老实实承认两边各有短板,然后用一套严谨的任务分发与概率融合机制,把两者真正拼起来。

  1. 0基础直觉与底层机制:老中医和毛头小子的会诊系统

这套架构的逻辑,其实特别像会诊。

小模型(老中医):
很稳,很谨慎。证据不够,它就说“没病(NA)”。准是准,但经常漏诊。

大模型(毛头小子):
很敢说,很自信。看谁都像有点关系,脑补能力太强,经常过度诊断。

那怎么玩?作者的思路不是让谁替代谁,而是设计了一个两步走。

第一步(Task Distribution,任务分发):
先让小模型初诊。
如果小模型对“NA”这个判断特别有把握,而且和其他候选关系拉开了明显差距,那这种实体对就属于 Easy Task,直接结束,连大模型都不用叫。

但如果小模型虽然偏向“NA”,却又没法把其他候选完全压死,那说明这里面可能藏着真关系——这种就属于 Hard Task,再把它交给大模型做精炼判断。

这一步非常关键,因为它不是单纯为了省钱,而是在做一件更本质的事:
把大模型从“无意义的大量负样本”里解放出来,只让它处理真正值得花算力的难例。

第二步(Probability Fusion,概率融合):
这里是这篇论文最狠的地方。

很多人一看到“大模型辅助判断”,脑子里第一反应就是:让 LLM 输出一段文本解释,再看它说有关系没关系。
这恰恰是最容易翻车的地方。因为文本输出本身就带着生成式模型的发散性,幻觉最重的地方往往就在这里。

作者没有直接相信大模型的自然语言结论,而是把它强行限制在一个候选关系集合里,只读取它在第一个生成位置上的局部选项分布,再把这个分布和小模型的关系概率对齐后做融合。

说人话就是:
不听大模型“说了什么”,而是只看它在受限选项空间里“第一反应有多偏向哪个答案”。

这就很聪明了。因为你不是在拿一个会胡扯的生成器当裁判,而是在抽取它内部最早期、最受约束的偏好信号。

  1. 数学推导与工程避坑(Pitfalls)

什么时候判定小模型在“犹豫”?论文给了一个很巧的边界:

如果小模型预测 NA 的概率,和最强非 NA 关系之间拉开了足够大的差距,那就说明这个样本基本没争议,可以直接裁掉;
如果这个差距不够大,就说明这里是 hard case,值得交给 LLM 进一步 refine。

它的核心思想其实就一句话:

不是所有样本都值得请大模型出手,只有那些“小模型差一点就判断不稳”的边界案例,才值得进入精炼阶段。

:chequered_flag:【工程避坑指南】

这一块是最容易被做废的地方。

很多新手一看“概率融合”,脑子一热,直接把小模型输出和大模型输出堆起来。结果跑出来的 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 只在受限候选空间里发言;
融合前必须先做概率尺度对齐;
不能把生成式文本输出直接当成可相信的结构化判断。

很多人做多模型协同时翻车,不是模型不够强,而是把不该混的信号混在一起了。

  1. 数据打脸与算力账本

在极难的 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 个点。换句话说,真正拉开差距的,不是“有没有接入大模型”,而是你怎么约束它、怎么让它在系统里只做它该做的那部分事。

  1. 这篇论文真正厉害的,不是“调和大小模型”,而是它认清了大模型的边界

现在很多人做 Agent、做抽取、做流程自动化,最大的问题就是:

只要看到 LLM 表现强,就默认它应该统治一切。

但这篇论文的态度恰恰相反。
它没有被“大模型万能论”绑架,而是非常诚实地承认:

LLM 在开放生成上很强;
但在高负样本密度的结构化判别任务里,容易乱说;
SLM 虽然不够灵,但它稳;
真正好的系统,不是让一个模型统治全场,而是让不同模型各守自己的边界。

这就是为什么我一直说:

真正的架构师,绝不会迷信参数量碾压。
他更关心任务边界怎么划、概率分布怎么对齐、系统里每一层该承担什么责任。

  1. 总结:别把“模型能力”误当成“系统能力”

这篇 NAACL 2025 给我的最大启发,不是某个公式,也不是某个具体超参,而是一种很清醒的工程观:

模型强,不等于系统强。
大模型会说,不等于它说得准。
能生成,不等于能判别。

DocRE 这种任务,本质上不是拼谁最能脑补,而是拼谁更能控制假阳性、谁更能尊重任务分布。
Refiner 这套设计的价值,就在于它不迷信任何一边,而是让 SLM 兜底、让 LLM 补强、再用概率空间上的严格对齐把两边粘成一个真正可用的系统。

所以这篇论文最适合打脸哪类人?
就是那种一遇到复杂信息抽取任务,就默认“上个 GPT-4 / Llama3 再写个 Prompt 就完事”的人。

现实不会惯着这种傲慢。
在真正难的结构化任务面前,会分工、会约束、会融合,比一味堆参数重要得多。

这才是这篇 Refiner 的价值。
也是它最像“工业级方法论”的地方。

1 Like