
💡 一句话总结:文档 MLLM 在看不清图的时候会靠"背下来的字段关系"成组吐出敏感信息,这篇 ACM MM 2026 论文量化了这个风险(最坏 95.5% 泄露率)并给出遗忘方案 DRUF------如果你的业务里有证件识别、表单抽取这条链路,建议花十分钟了解一下。
🎯 先做个小实验
先问一个可能让你后背发凉的问题:把你家文档抽取模型拿过来,喂一张空白图 或者一张无关的风景照,再问一句"这份证件的信息是什么"------它会不会照样报出姓名和证件号?
如果你的第一反应是"图都没给有效信息,它应该说不出来啊",那这正是问题所在。一篇刚挂在 arXiv 上、中稿 ACM MM 2026 的论文(《Beyond Visual Evidence》)系统测了这件事:给 LLaVA-1.5 喂无关图片,95.5% 的情况下它照样吐出了成组的真实字段------姓名、证件号连着来,涉及训练数据里的几十个身份。
对,就是你想的那种画面:模型不是在"识别",是在默写。
想自己动手试?
- 📄 论文:arXiv 2608.12911(ACM DOI)
- 💻 代码:GitHub · xubeining/Beyond-Visual-Evidence
- 📊 数据集:DocXPand-25k、IDNet(公开数据集,论文未附直链)
🤔 泄露的不是单条数据,是"关系"
先说清楚这个泄露和以往说的"模型泄露训练数据"有什么不同。
做证件识别的模型,训练时见过大量"姓名 + 证件号 + 出生日期"成组出现的样本。这些字段之间存在天然关联------而模型不光记住了单个字段,还把字段之间的绑定关系 也记住了。论文把这叫关系级隐私泄露 :触发条件是视觉证据缺失,泄露形态是多个关联字段同时出现在输出里。
打个比方:模型像个背过一堆通讯录卡片的实习生。你把卡片藏起来问他,他凭记忆把整张卡片默了出来------不光记得名字,连卡号一起带出来了,因为在他脑子里这俩本来就是绑着记的。
为什么以往的方法治不了它?论文指出了两个盲区:
- 隐私保护研究大多针对单属性泄露------盯着"别泄露某个字段",没人管"字段之间的关联"这个粒度
- 现有遗忘方法依赖预先定义好的遗忘集------但你没法提前知道模型到底记住了哪些字段对,这个集合取决于模型自己的行为,而且随着训练过程动态变化
还有一个现实背景:这类模型大量用在 KYC(了解你的客户)、表单自动化这些身份文档处理场景里,攻击成本却低得离谱------一张废图加一句话就够。
图说:左侧是以往研究的单属性泄露视角,右侧是本文指出的关系级泄露------弱证据或异常输入触发模型凭记忆成组吐出敏感字段
🛠️ DRUF 怎么把"关系"忘掉
论文的方案叫 DRUF(Dynamic Relational Unlearning Framework,动态关系遗忘框架),思路是"一只手忘、一只手锚",两个分支同时跑:
- 🔒 Retain 分支:一个全程冻结的 teacher 模型坐镇,student 模型在正常文档样本上跟 teacher 对齐------把正经的关键信息抽取(KIE,Key Information Extraction,从证件图抽结构化字段)能力锚住,别忘过头
- 🧹 Forget 分支 :用"空白图 + 固定提问"当输入,找出模型还在联合泄露的字段对,针对性地把这些字段对上的输出分布推离原模型
其中遗忘损失的设计是全文最巧的一笔。对一对被判定泄露的字段(比如姓名和证件号),分别计算它们各自 span(输出里这个字段覆盖的 token 区间)上 student 和 teacher 的分布差异,然后让遗忘损失去最大化这两个差异的乘积。
翻译成人话:把两个字段"绑着推远"。如果只推远其中一个,另一个还留着,字段关联这条线就没断干净;乘性耦合意味着一个字段推得越远,另一个字段被推的力道也越大------直到两边都离开了原模型的记忆轨迹,"联合恢复"(一次吐出一组)的通道才算被破坏。
图说:左路 Retain 分支保住正常抽取能力,右路 Forget 分支做关系级遗忘,中间的回路是"边训边探测、动态更新遗忘目标"
那"该忘哪些字段对"这个清单从哪来?这就是第二个关键设计------动态遗忘集。
作者发现用静态清单不行:你圈定一批泄露对去遗忘,训练几轮后模型行为变了,新的泄露对又冒出来了,按下葫芦浮起瓢。所以 DRUF 每训练 500 步就重新探测一遍:拿当前模型在弱证据输入上跑一轮,看哪些字段对还在泄露,刷新清单再继续忘。本质上是把"发现泄露"和"遗忘泄露"闭成了一个循环------打地鼠,但打得很系统。
图说:配套的 DocPrivacyBench 评测协议------用空白图/人脸图/无关图片隔离视觉通道,用 1300 个多样化 prompt 测诱导泄露,再单独测正常任务性能有没有被误伤
配套的评测基准 DocPrivacyBench 也值得单独一说。它把评估分成三种设定:
- 🖼️ Image-Driven:把输入图像换成空白图、人脸裁剪图、无关图片,提问不变------隔离视觉通道,测纯记忆驱动的泄露
- 💬 Prompt-Driven:图像固定为空白,换 1300 个自动生成的提问------自然疑问、结构化指令、还有直接问"某姓名对应的证件号"这种实体关联探测
- ✅ KIE Task:正常文档图,测正常抽取能力有没有被遗忘过程误伤
判定标准也直白:输出和真实字段的相似度超过阈值、且至少两个字段同时命中,记一次泄露。
📈 效果与代价
几个数字,坦白地摆。
先看问题有多严重。基线模型在弱证据输入下的泄露准确率:无关图片 0.955 ,人脸图 0.825,分别涉及训练数据里的 32 和 55 个身份。这不是边角案例,是系统性的记忆。
再看方案效果。泄露准确率从最强 baseline SCRUB 的 0.049 压到 0.001 ------论文摘要里说的"提高 4.8 个百分点"就是这个差值。我倒觉得更诚实的读法是相对抑制约 98%,因为两边绝对值都已经很小了。
最有信息量的其实是那张 trade-off 矩阵,我挑三行给你感受一下方法分野:
- 📉 梯度上升类(GA):泄露压到 0,但正常抽取能力跟着崩------KIE 一致性从 0.852 掉到 0.119,等于把模型废了
- 😐 DPO / FTF:抽取能力纹丝不动,但泄露也基本没动(0.633 / 0.428)------白忙
- 🎯 DRUF:泄露 0.001 的同时 KIE 保持 0.808------唯一同时占住两个角的
图说:弱证据输入下,基线模型整段吐出姓名、证件号等成组字段;DRUF 处理后不再泄露
图说:消融实验------静态遗忘集会残留泄露,动态探测版清零;乘性耦合的形式也明显优于 NPO、LEGO 等替代设计
消融部分有两个值得记住的点:把动态遗忘集换回静态清单,残留泄露 0.006(动态版是 0)------"边训边探测"不是锦上添花,是必要组件;把乘性耦合换成其它耦合形式,效果明显退化------怎么耦合 比是否耦合更关键。
代价也要如实说:DRUF 的 KIE 一致性从 0.852 降到 0.808,掉了 5.2%------其实比 SCRUB 的代价(掉 1.8%)更大,换来的是 49 倍的泄露压制。这笔账划不划算取决于你的场景对隐私的敏感度。
💡 为什么你要关心?
落到实操层面,我觉得有三类人该认真看看这篇。
第一类:业务里有证件 / 表单 / KYC 链路的。 你的模型在训练中大概率也背了字段关联------这篇给了现成的自查协议(DocPrivacyBench 三设定 + 泄露判定标准),代码开源,拿自家模型跑一遍弱证据探测,成本不高,睡前焦虑成本不低。就算你的模型只是内部用,"被遗忘权"这类合规要求早晚要面对。
第二类:做多模态模型安全 / unlearning 研究的。 两个可搬运的组件:span 级 teacher-student KL 加乘性耦合的关系遗忘损失(任何"成组敏感属性"的遗忘场景都能套用),以及动态探测-更新遗忘集的闭环设计(预定义遗忘集这个假设在很多 unlearning 工作里都站不住,这个思路可以推广)。
第三类:给业务选型 / 采购文档 AI 服务的。 评估文档模型时别只测准确率------加一条"喂空白图看它说不说"的隐私探针。这篇的基线数字说明,只看正常指标你完全发现不了这个问题。
再往远看一层:这个发现其实戳中了所有"背过训练数据"的模型的共性------泄露的粒度不一定是单条记录,也可以是记录内部的关联结构。以后做隐私审计,"关系"这个维度值得进默认清单。
🧭 理性看待
几个该打问号的地方,读的时候带着。
最核心的一条:DRUF 消除的是当前探测协议下可观测的泄露,不一定是记忆本身。探测用的是固定的提问方式和弱证据图像;换一种问法、换种语言、或者给一部分真实字段让模型补全,被压下去的关联会不会重新浮出来?论文没有做对抗性重攻击验证------这是机器遗忘评估的经典难题,本文未能免俗。我的建议:把 DRUF 理解为"显著提高了泄露门槛",而不是"彻底删除了记忆"。
其次,遗忘那一侧的损失是无界的分布推离,全靠 teacher 锚定和 batch 配比往回拽,论文自己也承认训练过程有波动;换模型换数据集,平衡参数大概率要重调。
最后,评估的三个模型(LLaVA-1.5、Xgen-Phi3、Idefics2)都不算新,对当前最强的文档模型是否同样成立、同样可治,还需要验证。数据集本身是公开的身份数据,"泄露训练集身份"的现实危害取决于与真实个人的重合度,这个威胁模型目前更偏研究性质。
作者:lusca
版本:lusca-paper-blog v1.6.0