一、对抗样本库构建
1. 基于LLMs的领域针对性扰动设计对抗样本生成
-
替换实体、三元组和触发器(Replace Entity, Triple, and Trigger)
- 使用LLMs(如GPT-4)来替换句子中的实体、关系三元组或事件触发器,同时保持其类型不变,并确保其他内容不受影响:
- xxx名称(如“x方” → “xx方”)、xx编号(如“XM2024-001” → “xx编号:24-ZB-001”)。
- 保留实体类型(x构、x间、x额等),确保语义一致性。
- 规则辅助:建立xxx术语替换词典(如“xx保证金” → “xxxx金”)。
- 使用LLMs(如GPT-4)来替换句子中的实体、关系三元组或事件触发器,同时保持其类型不变,并确保其他内容不受影响:
-
上下文扰动
- 冗余信息注入:在句子中插入无关条款(如“根据《中华人民共和国xxxxx》规定……”)。
- 格式扰动:
- 删除标点或添加无序段落分隔符(如“###”)。
- 大小写混合(如“xx截止时间:2024年12月31日” → “xx截止时间:2024年12月31日”)。
- 改变上下文(Change Context):
去除句子中的标点、实体、事件触发器和停用词,只保留有意义的上下文词汇。然后随机选择最多四个单词并用[MASK]标记替换。接着,使用LLMs为每个[MASK]标记生成三个预测,并随机选择一个进行替换。 - 扩展句子(Extend Sentence):
在句子的开头或结尾添加语义相关的内容,以增加句子的语义深度。对于NER任务,新句子必须保持原始实体的边界和类型;对于RE任务,原始的关系三元组不能改变;对于ED任务,原始的事件触发器不能引入新的事件信息。
-
噪声注入
- 拼写错误:模拟OCR识别错误(如“xx文件” → “xx文仵”)。
- 符号干扰:插入特殊字符(如“xx预算:¥5,000,000” → “xx预算:¥5,000,000”)。
-
领域特定扰动
- 条款变异:同一条款不同表达(如“xx文件需密封提交” → “xx文件应加盖公章后密封递交”)。
- 时间格式多样性:统一时间格式为多种形式(“2024-12-31” → “2024年12月31日”或“31/12/2024”)。
2.基于规则的对抗样本生成
-
拼写错误注入(Typo Injection):
• 目标:模拟现实世界中常见的拼写错误。
• 实现:在较长的单词中随机插入拼写错误。由于LLMs生成的错误通常不现实,因此采用规则方法来实现。 -
大小写转换(Lowercase Conversion):
• 目标:模拟非标准输入,评估模型在文本格式变化时的鲁棒性。
• 实现:将每个单词的所有字符转换为小写,除了第一个单词的首字母。这测试了模型在非标准输入条件下是否仍能准确提取信息。
3. 样本生成与验证
- LLM生成流程:
- 输入原始xxx文本,通过定制Prompt引导LLM生成对抗样本(示例见附录)。
- 示例Prompt:
请对以下xxx进行扰动生成: 1. 替换实体(x标方、项目编号),保持类型一致。 2. 添加冗余法律条款,不改变核心信息。 3. 注入1-3处拼写错误(如同音字、形近字)。 原始文本:{原文}
- 人工审核:
- 验证生成样本的语义合理性和扰动有效性,过滤不符合实际的噪声样本。
- 确保敏感信息(如xx名称、金额)脱敏处理。
二、动态数据增强策略
一种基于损失的动态选择困难样本进行迭代训练的方法。首先,使用初始模型在原始训练集上进行训练,并计算增强样本的推理损失。然后,根据推理损失选择高损失样本进行微调。接下来,基于微调后的模型重新计算增强样本的推理损失,并选择困难样本进行下一轮训练。重复此过程,直到模型在验证集上的性能提升低于收敛阈值。
1.训练方法
-
输入:
•D
:原始训练数据集。
•M
:初始的信息抽取模型。
•β
:用于选择高损失样本的比例。
•δ
:用于判断模型性能提升是否达到收敛的阈值。 -
输出:
•M_t
:经过多次迭代微调后的模型。 -
步骤:
• 步骤1:使用LLM生成基于原始训练数据D的增强数据集 D aug D_{\text{aug}} Daug。
• 步骤2:在原始训练数据集D
上微调初始模型M
,得到模型 M 0 M_0 M0。
• 步骤3:初始化迭代次数t
为1。
• 步骤4:进入循环,直到满足退出条件。
◦ 步骤5:对于每个样本,计算推理损失 L i = L ( θ t − 1 ; x i , y i ) L_i = L(\theta_{t-1}; x_i, y_i) Li=L(θt−1;xi,yi)。
◦ 步骤6:根据推理损失对增强样本进行降序排序。
◦ 步骤7:根据选择比例 β \beta β,选择损失最高的样本组成新的训练集 D retrain ( t ) D_{\text{retrain}}^{(t)} Dretrain(t)。
◦ 步骤8:使用 M t − 1 M_{t-1} Mt−1 在 D retrain ( t ) D_{\text{retrain}}^{(t)} Dretrain(t) 上进行微调,得到新的模型 M t M_t Mt。
◦ 步骤9:更新选择比例 β \beta β 为 β / 2 \beta / 2 β/2 并递增迭代次数t
。
• 步骤10:检查模型在验证集上的性能提升是否低于收敛阈值 δ \delta δ。如果是,则退出循环。
• 步骤11:返回最终微调后的模型 M t M_t Mt。
三、鲁棒性评估与优化
1. 测试集构建
-
对抗测试集:
- 从xx标数据中抽取1000条样本,应用14种扰动生成对抗测试集(如RUIE-Bench模式)。
- 覆盖典型噪声场景:拼写错误、格式混乱、术语变异、长文本干扰。
-
跨领域测试集:
- 收集未参与训练的xx标数据(如不同行业、地区),验证模型泛化能力。
2. 评估指标
- 基础指标:
- 精确率(Precision)、召回率(Recall)、Micro-F1(按Span边界和类型严格匹配)。
- 鲁棒性指标:
- 性能下降率:原始测试集F1与对抗测试集F1的差值百分比。
- 扰动敏感度:统计模型在不同扰动类型下的F1波动(如拼写错误 vs. 格式扰动)。
3. 持续优化
- 困难样本挖掘:
- 定期从新xxx数据中提取模型预测错误的样本,加入对抗样本库。
- 领域自适应:
- 针对特定行业(如基建、IT),定制扰动规则和增强数据比例。
- 多任务联合训练:
- 将实体识别、关系抽取、事件检测联合优化,增强上下文推理能力。
四、部署与监控
1. 生产环境适配
- 实时对抗防御:
- 在推理阶段前置文本清洗模块,自动纠正明显拼写错误和格式问题。
- 动态更新机制:
- 每月更新对抗样本库和模型参数,适应政策变化和新术语出现。
2. 异常监控
- 日志分析:
- 记录模型在真实场景中的预测错误案例,分析主要噪声类型。
- 人工反馈:
- 建立标注团队定期审核模型输出,修正漏检/误检样本并反哺训练。
五、附录:xxx领域对抗样本示例
原始文本
xxx方:XX市交通局
xx编号:XM2024-001
xx金额:¥5,000,000
xx截止时间:2024年12月31日
对抗样本(LLM生成)
xxx方:XX市城建集团(实体替换)
xx编号:24-ZB-001(格式扰动)
xxx金额:¥5,000,000(符号干扰)
xx截止时间:2024年12月31號(拼写错误)
注:本项目需符合《中华人民共和国xxx实施条例》第三十二条(冗余信息注入)
8192个Token长度文档的信息抽取UIE模型开源了 上文中的模型M大家可以直接用它,当然其他的也很多l大家可以在它基础上进一步的微调了,当然老版的uie(2048)也够用而且效率要更高,硬件要求也低
增强方法有兴趣的可以去看看相关论文https://arxiv.org/pdf/2503.03201