← 返回项目

模型安全

Uni-Guard 项目详细过程

Uni-Guard 项目工作梳理(2026 年 7 月—8 月)

1. 项目概述

Uni-Guard 是一套文本内容安全审核方案,由两个工程共同组成:

  • secureEngine:负责 BGE-M3 模型训练,以及预处理、规则匹配、风险评分、策略决策和审计等安全引擎能力。
  • codex_create:负责 Qwen3Guard-Stream 模型部署、数据构造、LoRA 微调、SGLang 评测及模型交付。

整个系统采用分层审核思路:先由速度快、成本低的 BGE-M3 对高置信样本进行放行或拦截,再将难以判断的灰区样本交给 Qwen3Guard-Stream 做更深入的语义安全判断。

用户输入
  -> 文本预处理与规则检测
  -> BGE-M3 高置信分流
       -> 高置信 Safe:直接放行
       -> 高置信 Unsafe:直接拦截
       -> Grey:交给 Qwen3Guard-Stream
  -> 最终安全决策与审计

项目中的两条模型线侧重点不同:

  • BGE-M3 是自行训练分类头并进行阈值校准,重点是低延迟、高精度的一级筛选。
  • Qwen3Guard-Stream 以 8B 原模型为基础进行 LoRA 微调,主要精力不是修改微调算法,而是清洗数据、构造边界数据、处理标签冲突和调整不同数据的训练权重。

项目迭代中最重要的认识是:安全模型效果的提升主要来自数据质量、数据分布和边界样本定义,而不是单纯增加模型规模或复杂训练方法。

2. 7 月初:搭建安全引擎并拆分 BGE-M3 训练任务

2.1 建立完整安全审核链路

7 月初首先完成了 secureEngine 的整体工程框架,将文本安全审核拆成以下模块:

  1. 输入适配:统一字符串和结构化请求。
  2. 文本预处理:完成归一化、编码解码、混淆检测和实体提取。
  3. 规则引擎:支持高风险规则、中风险规则、白名单和匹配证据。
  4. 模型推理:加载 BGE-M3 encoder 和不同分类头。
  5. 风险评分:融合规则分数、模型概率和文本混淆度。
  6. 策略决策:输出 allow、block 或 review。
  7. 审计记录:保存模型版本、规则证据、风险类别、耗时和最终动作。

最终形成了如下端到端链路:

InputAdapter -> Preprocessor -> RuleEngine -> ModelAdapter
             -> RiskScorer -> DecisionMaker -> AuditLogger

2.2 将 BGE-M3 拆成 Risk Head 和 Safety Head

BGE-M3 encoder 在训练过程中保持冻结,只在其 CLS embedding 上训练轻量分类头:

  • Risk Head:九类风险的多标签分类。
  • Safety Head:safe/unsafe 二分类。

这种设计降低了训练和推理成本,也允许两个任务独立准备数据、训练和替换 checkpoint。

2.3 BGE Risk Head 优化

Risk Head 数据规模为:

  • train:19,799 条
  • valid:2,335 条
  • benchmark:1,494 条

风险类别包括暴力、非暴力违法、色情、个人信息、自杀自残、不道德行为、政治敏感、版权和越狱,并加入 negative 样本,使多标签模型能够学习所有类别均为低风险的情况。

训练过程中完成了 14 组实验,比较:

  • Linear 与 MLP 分类头
  • BCE 与 Focal Loss
  • hidden dimension、dropout、学习率和训练轮数
  • 正样本权重

最终选择:

Head:MLP512
Loss:BCE
Learning rate:5e-4
Epochs:5

最终 benchmark 指标:

  • top1:84.00%
  • top2:92.17%
  • macro F1:75.80%

正式产物为 bge_m3_risk_head_v2.pt。这一阶段还改造了模型加载器,使其兼容 Linear 和 MLP Risk Head。

3. 7 月 3—4 日:704 BGE Safety Head 数据与训练优化

3.1 构造双模型一致数据

704 阶段使用 Q3 和 MiniMax 对 16,365 条数据进行审核,并采用一致性筛选:

  • 两个模型都判合规,保留为 Safe。
  • 两个模型都判违规,保留为 Unsafe。
  • 两个模型判断不一致,暂时丢弃。

筛选结果:

数据 数量
Safe 7,346
Unsafe 7,123
不一致丢弃 1,896
最终可用 14,469

同时准备了 2,000 条人工审核开发集,其中 Safe 837 条、Unsafe 1,163 条。与同源验证集相比,这批人工数据包含更多越狱、角色扮演、间接诱导和复杂边界内容,因此成为后续优化的主要依据。

3.2 704 V1:分类头结构和权重扫描

第一轮比较了:

  • Linear、MLP256、MLP512
  • unsafe class weight 1.0、1.3、1.5、2.0
  • 多组学习率和 epoch

主要结论:

  • MLP 明显优于 Linear。
  • MLP512 在人工数据上的泛化更好。
  • 提高 Unsafe 权重可以降低风险漏判。
  • 增加训练轮数对同源测试有效,但对人工集改善有限。

安全优先版本采用 MLP512 + CrossEntropy + unsafe weight 2.0。在人工集上取得:

  • Precision:91.76%
  • Recall:73.69%
  • Accuracy:80.85%
  • FN:306

3.3 704 V2:Focal Loss 与训练流程优化

第二轮在不修改数据的情况下优化训练流程:

  • 固定随机种子并进行多 seed 实验。
  • 引入 CosineAnnealingWarmRestarts。
  • 加入 Early Stopping。
  • 使用 Focal Loss 关注难分类样本。

最优参数为:

Head:MLP512
Focal gamma:2.0
Unsafe alpha:2.0
Learning rate:5e-4

人工集结果相比 V1:

指标 704 V1 704 V2
Recall 73.69% 79.71%
Precision 91.76% 89.74%
Accuracy 80.85% 82.90%
FN 306 236
FP 77 106

该版本用可接受的误杀增长换取了 70 条风险漏判的减少。

3.4 704 V3:阈值和更深分类头实验

第三轮进行了两项实验:

  1. 将 Unsafe 阈值从 0.5 下调到 0.4,人工集 Recall 提升到 81.51%,FN 降到 215。
  2. 使用三层 MLP 和 LayerNorm,但模型在人工集上的 Recall 降至约 75.3%,表现出明显过拟合。

由此确认:冻结的 BGE-M3 embedding 已具有较强可分性,继续增加分类头深度收益有限;数据、损失函数和阈值更加重要。

4. 7 月 6 日:706 难例补充与召回优化

706 阶段主要针对 704 人工集中的 Unsafe 漏判进行分析和补数,重点覆盖:

  • 越狱和提示词攻击
  • 角色扮演
  • 间接诱导
  • 对抗性表达
  • 容易被普通语义分类器放过的复杂风险内容

在这一阶段继续比较 CE、Focal、MLP256/512、类别权重和阈值,形成了不同业务运行点:

  • 0.5 阈值更加保护正常内容通过率。
  • 0.2 等较低阈值更适合降低风险漏放。
  • 更低阈值能够进一步提高 Recall,但会增加 Safe 误拦。

706 阶段的主要价值是从追求单一模型指标,转向根据一级分流职责选择运行阈值。

5. 7 月 7—8 日:形成最终 708 BGE 数据和模型

5.1 多模型一致性筛选

708 阶段回到原始运营数据:

  • 原始 Safe:8,001 条
  • 原始 Unsafe:16,182 条

使用多个安全模型进行交叉审核,只保留高一致性数据,最终得到:

  • Safe:5,521 条
  • Unsafe:9,761 条(原始 9,763 条,去除 2 条重复)
  • 总计:15,282 条

这一轮数据相较 704 更偏向高置信样本,降低了训练标签中的噪声。

5.2 训练 708 Safety Head

最终训练参数为:

Encoder:冻结 BGE-M3
Pooling:CLS
Head:MLP512
Dropout:0.1
Loss:CrossEntropy
Unsafe weight:1.0
Learning rate:3e-4
Epochs:12
Batch size:64
Max length:128

同源测试结果:

  • Accuracy:97.12%
  • Macro F1:96.89%
  • Safe Recall:96.74%
  • Unsafe Recall:97.34%

正式产物为 bge_m3_safety_head_708_v1.pt。

5.3 人工开发集阈值校准

在更困难的 2,000 条人工数据上,默认阈值 0.5 的结果为:

  • Accuracy:83.85%
  • Safe Recall:89.61%
  • Unsafe Recall:79.71%

随后在不重新训练模型的情况下扫描阈值,将阈值降至 0.08:

  • Accuracy:87.00%
  • Safe Recall:83.63%
  • Unsafe Recall:89.42%
  • Unsafe 漏判率从 20.29% 降至 10.58%

这一结果进一步证明,对 BGE 一级筛选器而言,阈值校准与重新训练同样重要。

6. 7 月中旬:部署 Qwen3Guard 并建立原模型基线

完成 Qwen3Guard-Stream 的运行环境和 SGLang 推理链路,验证 0.6B、4B 和 8B 三种原模型。

旧版 2,000 条 test2 上的结果:

模型 Accuracy Unsafe Recall Unsafe F1
0.6B 82.60% 80.48% 84.32%
4B 86.40% 88.39% 88.32%
8B 85.60% 82.63% 86.97%

4B 原模型综合表现最好,8B 的误杀较少、Precision 更高。后续微调主要选择 Qwen3Guard-Stream-8B,以利用更大的模型容量和优化空间。

这一阶段还完成了:

  • SGLang 环境搭建和模型加载。
  • User Prompt 与 Assistant Response 流式审核验证。
  • 数据集批量评测工具。
  • 延迟、吞吐和错误样本统计。
  • LoRA 模型 merge 后的 SGLang 评测流程。

7. 7 月 15—22 日:第一轮 Qwen LoRA 与 Controversial 问题定位

7.1 Strict/Loose 四模型交叉构造边界数据

参考 Qwen3Guard 的方法,使用 Strict 和 Loose 两种模型,将数据拆成 A、B 两部分,共使用四个模型交叉预测。

从原始 Safe 和 Unsafe 数据中挖掘边界样本:

  • Safe 中风险分较高的样本。
  • Unsafe 中风险分较低的样本。
  • 将这些不确定样本标记为 Controversial。

第一轮训练采用三分类:

Safe / Unsafe / Controversial

并给 Controversial 设置了较高 Loss 权重。

7.2 第一轮结果与问题

同源测试结果很好,但在人工 test2 上出现明显偏移:

  • Unsafe Recall 显著提高。
  • Unsafe 漏放明显减少。
  • 大量 Safe 被预测为 Controversial。
  • 生产二分类把 Unsafe 和 Controversial 都折叠为 Risky,因此 FP 大幅增加。

以 0.6B 第一轮 LoRA 为例:

指标 原模型 LoRA
Accuracy 82.60% 68.05%
Unsafe Recall 80.48% 92.86%
FN 227 83
FP 121 556

问题最终定位为:训练的三分类目标与生产二分类目标不一致,且 Controversial 被强化过度。模型不是没有学到能力,而是学到了过于激进的风险边界。

8. 7 月 27—28 日:从硬三分类转向有方向的边界学习

8.1 727:直接修正 Controversial 的失败尝试

727 尝试把一部分来源于 Safe 的 Controversial 改回 Safe,以降低误杀。

结果虽然减少了部分 Safe 到 Controversial 的错误,但 Unsafe Recall 从 93.29% 降至 72.23%,Unsafe 到 Safe 的漏判增加到 323 条。

由此确认:不能简单删除边界类别或将边界样本全部改成 Safe,否则会损失大量风险召回。

8.2 728:Binary Loss + Soft Three-Class Loss

728 是 Qwen 微调方向的重要转折。边界样本不再使用统一硬标签,而是带有原始方向:

样本类型 Binary 目标 Soft 三分类目标
Clean Safe Safe Safe=1.0
Clean Unsafe Risky Unsafe=1.0
Safe 来源边界 Safe Safe=0.75,Controversial=0.25
Unsafe 来源边界 Risky Unsafe=0.35,Controversial=0.65

训练目标改为:

loss = 1.0 * binary_loss + 0.3 * soft_three_class_loss
Risky logit = logsumexp(Unsafe, Controversial)

这一方法让模型以生产二分类为主要目标,同时保留对边界不确定性的学习。

三 API 版本在旧 test2 上取得:

  • Accuracy:89.35%
  • Unsafe Recall:91.75%
  • F1:90.92%

同时确认 template_last 的训练位置与 SGLang 推理口径更加一致。

9. 7 月 28 日—8 月初:三方审核十桶数据实验

9.1 使用三家安全服务重新组织数据

对原始 8,001 条 Safe 和 16,182 条 Unsafe 分别调用腾讯、阿里和百度安全审核服务。三家服务均返回 Block、Review 或 Pass,根据合规服务数量形成十个数据桶:

原始标签 3 合规 2 合规 其他 1 合规 0 合规
Safe 4,992(桶1) 1,568(桶2) 406(桶3) 727(桶4) 308(桶5)
Unsafe 2,215(桶6) 3,108(桶7) 1,925(桶8) 4,641(桶9) 4,293(桶10)

其中最关键的是标签与三方审核结果冲突的桶 6 和桶 7:

  • 桶 6:原始标签为 Unsafe,但三家服务全部判合规。
  • 桶 7:原始标签为 Unsafe,但两家服务判合规。

9.2 728.1—728.3:验证不同边界桶

  • 728.1:主要使用桶 7 作为边界数据。
  • 728.2:主要使用桶 6。
  • 728.3:联合使用桶 6 和桶 7。

结果表明:

  • 桶 7 是相对稳定、健康的边界数据。
  • 单独使用桶 6 会产生大量误杀。
  • 桶 6+7 可以显著提高 Recall,但需要继续处理桶 6 带来的 Safe 误伤。

728.3 达到:

  • Accuracy:90.10%
  • Unsafe Recall:95.79%
  • F1:91.84%

9.3 729:对冲突数据分层降权

729.1 不再将桶 6 中的所有数据等权使用,而是根据风险和冲突程度分层降权,并对 Safe hard case 加权。

同时完成了:

  • 学习率对比。
  • Soft loss 权重调整。
  • 不同训练 checkpoint 扫描。
  • Unsafe 下采样实验。

代表性结果:

  • 综合 Accuracy 最好:729.1 lr1e-4 soft0.2,Accuracy 90.30%。
  • Recall 最高:729.1 checkpoint step380,Unsafe Recall 96.13%。
  • checkpoint step400 在误杀和漏放之间较均衡。

9.4 730 与 802:继续拆解桶 6、7

后续版本继续从数据角度处理冲突样本:

  • 去除 prompt 重复和标签冲突。
  • 使用 Strict 模型从桶 6、7 中筛选可能为 Safe 的数据。
  • 将剩余数据保留为 Controversial。
  • 单独处理政治敏感和公共议题类内容。
  • 尝试替换边界数据来源和不同 Safe/Unsafe 组合。

802.3 达到:

  • Accuracy:89.60%
  • Unsafe Recall:93.98%
  • F1:91.31%

这一系列实验进一步说明,Qwen 模型优化的关键是判断冲突数据究竟应作为 Safe、Unsafe 还是 Boundary,而不是修改 LoRA 的基本训练方法。

10. 8 月 3—4 日:确定 BGE 高置信分流方案

8 月初开始将 BGE 明确定位为一级高置信分流器,而不是要求它独立覆盖全部数据。

主要工作包括:

  • 在人工数据上扫描极高阈值。
  • 使用 0.9999/0.99999 等双侧阈值划分 block、pass 和 grey。
  • 分析 BGE false block 样本。
  • 对高置信误杀进行模型和规则归因。
  • 准备核心数据、形式扩展数据和内容扩展数据进行专项测试。
  • 测试更长输入长度对长文本的影响。

两组典型结果:

Block Precision Block Recall Block 数量 Pass 数量 Grey 数量
98.46% 43.94% 519 453 1,028
99.50% 34.14% 399 341 1,260

这说明 BGE 可以高精度处理两端样本,将一半以上的不确定请求留给千问模型,从而在效果和推理成本之间取得平衡。

11. 8 月 6—7 日:统一实验口径并训练 807 版本

11.1 汇总历史实验

对 722、727、728、729、730 和 802 系列进行了统一汇总,形成以下结论:

  • 原始三分类会过度强化 Controversial。
  • 直接删除边界数据会导致 Recall 下降。
  • Binary + Soft Three-Class Loss 是更合适的训练目标。
  • 三 API 十桶数据比早期分位数构造更容易解释。
  • 桶 6、7 的处理方式决定了 FP 与 FN 的平衡。

11.2 修正开发集版本

此前部分实验使用旧版 test2,随后统一切换到 test2_20260715:

  • Safe:916
  • Unsafe:1,084
  • 总计:2,000

同时完成:

  • 清理桶 6、7 中的重复和冲突数据。
  • 分析人工开发集中的错误样本。
  • 根据 bad case 对桶 6、7 重新分类和补充。
  • 构建 807.1 和 807.2 两套训练数据。

评测结果:

模型 Accuracy FP FN Unsafe Recall F1
8B 原模型 87.25% 109 146 86.53% 88.03%
807.1 88.45% 185 46 95.76% 89.99%
807.2 88.90% 171 51 95.30% 90.30%

807.1 的 Recall 略高,807.2 的 Accuracy、F1 和误杀表现更加均衡,因此选择 807.2 作为主要候选。

12. 8 月 9—10 日:809 系列目标函数消融

基于 807.2 构建四种版本,系统研究 Controversial 数据的作用:

  • 807.2B:强化三分类目标。
  • 807.2C:提高 Safe binary 权重,降低 Controversial 权重。
  • 809.1:移除 Controversial,只保留 Safe 和 Unsafe。
  • 809.2:保留 Controversial,但降低其训练权重,同时提高 Safe 权重。

结果:

版本 Accuracy FP FN Unsafe Recall F1
807.2A 88.90% 171 51 95.30% 90.30%
807.2B 88.55% 186 43 96.03% 90.09%
807.2C 89.50% 152 58 94.65% 90.72%
809.1 89.05% 129 90 91.70% 90.08%
809.2 89.60% 145 63 94.19% 90.76%

实验结论:

  • 强化三分类可以获得最高 Recall,但误杀最重。
  • 完全删除 Controversial 可以降低 FP,但会明显增加 FN。
  • 保留并降低 Controversial 权重是更好的折中。
  • 809.2 是这一轮综合指标最好的版本。

13. 8 月 11 日:补充 Safe 数据实验

811.1 在 807.2 的基础上补充了 1,079 条 Safe 数据,并明确排除与 test2_20260715 精确重复的 prompt。

训练结果:

  • Accuracy:87.70%
  • Precision:86.88%
  • Recall:91.05%
  • F1:88.92%
  • FP:149
  • FN:97

该版本没有超过 807.2 或 809.2,说明单纯增加 Safe 数据量并不能保证提升效果。补充数据必须精确覆盖当前模型的误杀边界,并保持与实际业务数据一致。

14. 8 月中旬:模型整理、部署和交付

最后将 807.2/807.2A 整理为完整交付包,包括:

  • 训练数据和数据统计。
  • 数据构造脚本。
  • LoRA 训练配置和训练入口。
  • LoRA adapter。
  • Merge 后可直接用于 SGLang 的完整模型。
  • test2 原始推理日志。
  • 二分类与三分类评测报告。
  • 错误样本明细。
  • 模型复现、部署和目录说明。

交付版本主要训练参数:

Base model:Qwen3Guard-Stream-8B
Train mode:query_only
Query position:template_last
Epochs:1
Learning rate:2e-4
Effective batch size:32
Max length:2048
Binary loss weight:1.0
Soft three-class loss weight:0.3
LoRA r / alpha / dropout:16 / 32 / 0.05

同时完成了 SGLang 推理部署、LoRA merge、批量评测、延迟测试和模型交付说明,形成从数据处理、模型训练到上线验证的完整闭环。

15. 项目中主要完成的工作

15.1 数据工作

数据处理是整个项目投入最多、对结果影响最大的部分,主要包括:

  • 整理运营日志、金标数据和可用数据。
  • 使用 Q3、MiniMax 进行双模型一致性筛选。
  • 使用多个模型交叉判断 Safe/Unsafe。
  • 调用腾讯、阿里和百度安全审核服务并形成十桶数据。
  • 构造 Strict/Loose、A/B 四模型交叉预测数据。
  • 构造和修正 Controversial/Boundary 数据。
  • 去重、排查标签冲突和开发集重叠。
  • 分析 false positive、false negative 和高置信误判。
  • 针对越狱、政治敏感、角色扮演、诱导和长文本补充难例。
  • 对冲突桶进行拆分、降权、重标和组合实验。
  • 建立 train、valid、test 和人工开发集的评测体系。

15.2 BGE-M3 模型工作

  • 训练九类 Risk Head。
  • 训练 Safe/Unsafe Safety Head。
  • 比较 Linear、MLP256、MLP512 和更深 MLP。
  • 比较 BCE、CrossEntropy 和 Focal Loss。
  • 引入 scheduler、early stopping 和多 seed 实验。
  • 完成 704、706、708 多轮数据迭代。
  • 完成阈值扫描和高置信双侧分流。
  • 将 BGE 定位为低延迟一级审核模型。

15.3 Qwen3Guard-Stream 模型工作

  • 部署并评测 0.6B、4B 和 8B 原模型。
  • 建立 Qwen3Guard LoRA 微调流程。
  • 训练 User Prompt/Query 安全判断能力。
  • 从硬三分类逐步改为 Binary + Soft Three-Class。
  • 统一训练和 SGLang 推理的 template_last 位置。
  • 完成 722、727、728、729、730、802、807、809、811 等版本实验。
  • 完成 LoRA merge、SGLang 批量评测和结果对比。
  • 形成可直接交付的 adapter 和 merged 模型。

15.4 工程与交付工作

  • 实现安全引擎端到端链路。
  • 建立 YAML 配置化的规则、模型和策略。
  • 编写数据转换、训练、评估和阈值扫描脚本。
  • 建立离线评测和错误样本分析工具。
  • 搭建 Qwen3Guard SGLang 运行环境。
  • 完成模型延迟和吞吐测试。
  • 整理模型、数据、日志、文档和复现脚本。

16. 最终成果与经验总结

项目最终形成了一个分层的 Uni-Guard 文本安全方案:

  • BGE-M3 负责高置信、低延迟的一级分流。
  • Risk Head 提供九类风险归因。
  • Qwen3Guard-Stream-8B 负责处理 BGE 灰区和复杂语义。
  • 规则、模型概率和策略阈值共同决定最终动作。

从 7 月到 8 月,模型优化的主线并不是不断改变训练算法,而是不断提高数据与业务目标的一致性:

  1. 从直接信任原始标签,转向多模型和多 API 交叉审核。
  2. 从简单 Safe/Unsafe 数据,转向重点研究标签冲突的边界样本。
  3. 从硬 Controversial 标签,转向带来源方向的 Soft Boundary。
  4. 从只看同源测试集,转向使用人工开发集分析真实 bad case。
  5. 从追求单模型全覆盖,转向 BGE 高置信分流与 Qwen 灰区审核的级联方案。
  6. 从单纯追求 Recall,转向根据业务成本平衡 FP、FN、模型延迟和灰区比例。

最终的核心经验是:安全审核任务的性能上限很大程度上由数据决定。模型微调方法保持相对稳定时,通过清洗标签、识别冲突样本、构造正确的边界目标、调整不同数据权重和建立可靠评测集,仍然能够持续获得明显提升。

17. 2,000 条人工数据实验结果

以下二分类结果均以 Unsafe 为正类:

  • TP:正确识别的 Unsafe;
  • FP:Safe 被误判为风险,即正常内容误杀;
  • FN:Unsafe 被误判为 Safe,即风险内容漏放;
  • TN:正确识别的 Safe;
  • Precision:模型判为风险的样本中,真正 Unsafe 的比例;
  • Recall:全部 Unsafe 中被成功识别的比例。

项目使用过两版不同的 2,000 条人工数据,结果不能直接混合比较:

数据集 Safe Unsafe 用途
旧版 test2 837 1,163 BGE 704/708、Qwen 早期版本评测
新版 test2_20260715 916 1,084 Qwen 807—811 数据对齐、调权和选模

新版 test2_20260715 参与了错误分析、数据对齐和模型选择,因此相关结果属于人工开发集指标,不是完全独立测试集指标。

17.1 BGE-M3 在旧版人工 test2 上的实验

版本 TP FP FN TN Accuracy Precision Recall F1
704 V1 857 77 306 760 80.85% 91.76% 73.69% 81.74%
704 V2 927 106 236 731 82.90% 89.74% 79.71% 84.43%
704 V2 threshold 0.40 948 128 215 709 82.85% 88.10% 81.51% 84.68%
708 V1 threshold 0.50 927 87 236 750 83.85% 91.42% 79.71% 85.16%
708 V2 threshold 0.08 1,040 137 123 700 87.00% 88.36% 89.42% 88.89%

BGE 高置信分流结果:

运行点 Block Pass Grey TP FP FN Block Precision Block Recall F1
较高覆盖 519 453 1,028 511 8 652 98.46% 43.94% 60.76%
更高精度 399 341 1,260 397 2 766 99.50% 34.14% 50.83%

这里的 FN 表示没有被 BGE 直接 Block 的 Unsafe,不等于系统最终漏放,其中大部分会进入 Grey 区并由 Qwen3Guard 复审。

17.2 Qwen3Guard 在旧版人工 test2 上的实验

版本 TP FP FN TN Accuracy Precision Recall F1
8B 原模型 961 86 202 751 85.60% 91.79% 82.63% 86.97%
722 V2 1,111 342 52 495 80.30% 76.46% 95.53% 84.94%
728 Boundary 1,075 205 88 632 85.35% 83.98% 92.43% 88.01%
728.1 1,067 117 96 720 89.35% 90.12% 91.75% 90.92%
728.3 1,114 149 49 688 90.10% 88.20% 95.79% 91.84%
729.1 lr1e-4 soft0.2 1,082 113 81 724 90.30% 90.54% 93.04% 91.77%
802.3 1,093 138 70 699 89.60% 88.79% 93.98% 91.31%

722 将 FN 从 202 降到 52,但 FP 从 86 增至 342,说明模型过度偏向风险侧。后续版本通过三方 API 分桶、边界数据拆分和权重调整,在误杀与漏放之间取得更好的平衡。

17.3 Qwen3Guard 在新版人工开发集上的实验

版本 TP FP FN TN Accuracy Precision Recall F1
8B 原模型 938 109 146 807 87.25% 89.59% 86.53% 88.03%
807.1 1,038 185 46 731 88.45% 84.87% 95.76% 89.99%
807.2A 1,033 171 51 745 88.90% 85.80% 95.30% 90.30%
807.2B 1,041 186 43 730 88.55% 84.84% 96.03% 90.09%
807.2C 1,026 152 58 764 89.50% 87.10% 94.65% 90.72%
809.1 994 129 90 787 89.05% 88.51% 91.70% 90.08%
809.2 1,021 145 63 771 89.60% 87.56% 94.19% 90.76%
811.1 987 149 97 767 87.70% 86.88% 91.05% 88.92%

主要结论:

  1. 807.2A 相比 807.1 减少 14 条 FP,只增加 5 条 FN,证明第 6、7 桶重新对齐有效;
  2. 807.2B 的 Recall 最高,但 FP 也最高,纯三分类不是最佳方向;
  3. 809.1 删除 Controversial 后 FP 降低,但 FN 增至 90,说明边界数据不能完全删除;
  4. 807.2C/809.2 低权重保留边界数据,在误杀与漏放之间取得较好平衡;
  5. 807.2C 和 809.2 使用相同数据、权重和训练参数,结果差异属于独立训练波动;
  6. 811.1 单纯增加 Safe 数据没有提升,说明需要补充困难 Safe,而不是只增加普通 Safe 数量。

17.4 最终结果对比

以新版人工开发集上的 809.2 单次结果与 8B 原模型比较:

指标 8B 原模型 809.2 变化
Accuracy 87.25% 89.60% +2.35 个百分点
Precision 89.59% 87.56% -2.03 个百分点
Unsafe Recall 86.53% 94.19% +7.66 个百分点
F1 88.03% 90.76% +2.73 个百分点
FP 109 145 +36
FN 146 63 -83
总错误数 255 208 -47

最终模型显著降低了风险漏放,代价是增加部分正常内容误杀。Uni-Guard 通过 BGE 高置信分流、Qwen 灰区复审和 review 路由,对两类错误进行分层控制。