skip to content
tlj 的工程笔记
← 项目

内容合规质检模型微调(实习)

实习

把 Qwen2.5-14B 微调成按平台规则做内容合规质检、并精确溯源到具体规则的模型,覆盖四平台。从 exp_005 一路折腾到 exp_010,真正的难点是搞清楚溯源率到底该怎么算。

时间
2026-04 ~ 2026-05
角色
独立负责(数据工程 / 训练 / 评估 / 部署)
成果
实习期间独立完成 6+ 次微调实验 + 三阶段推理 + AWQ 量化部署;识破 loss、准确率、溯源率多重假象

实习期间我独立负责的一个内容合规质检模型:输入文案 + 平台规则,输出结构化 JSON——是否违规、违规原文、并精确溯源到具体哪一条规则,覆盖小红书/抖音/视频号/公众号四个平台。基座 Qwen2.5-14B-Instruct,项目的硬指标是溯源率 90%。从数据、训练、评估到部署全程我自己做。数据集分工:公众号在同事版本上改造、视频号原本是同事的但质量不行我推倒重做、小红书和抖音完全自己从头做。

这是我实习里投入最大的一个项目,跨了近两个月。完整复盘我拆成一组深度文章,本页是把它们串起来、再补上过程细节的总览:

模型要解决的真问题

输出结构化 JSON:{is_compliant, violations:[{original_text(≥10字精确子串), title, content, suggestion}]}。推理是三阶段——全量扫描候选 → 逐条复核 → 按引用去重。四平台规则结构差异极大,直接决定方案:小红书 49 条/14 类、抖音 107 条/21 类、视频号 135 条/11 类、公众号 53 条全挤在 1 个类别。后面会看到,这个结构差异比模型能力更决定效果。

方案演进:六轮试错

不是一上来就有答案,是一版版逼出来的(前面 exp_001-003 在从零搭数据集里,exp_003 规则归类已到 97%):

最终生产部署的是 exp_008-AWQ。每次重训前都得先算成本(4096 cutoff 慢 7 倍、一轮近 3 小时),所以养成了”冲新高前先钉死可回退基线”的习惯。

几个真因被挖出来的 bug

环境与运维:一半时间在这上面

这个项目很大一部分精力耗在工具链和部署上,记几个真实的:

评估:1653 条的子 agent 审核 + 跨厂商对照

测试集本身也不可信(GT 由大模型生成)。我用 6 个子 agent 并行把一份 1653 条的测试集逐条审了一遍,发现 GT 硬错率约 25%(平台标错、规则名是编的、什么都往”过度营销”筐里塞)。关键洞见:用一份错的 GT 测出来的低分,衡量的是”被测模型和生成 GT 的那个 LLM 像不像”,不是真实能力——模型更精准,反而和糙 GT 的一致性更低、分数更难看。

溯源率的口径之战

这是整个项目最值钱的认知:同一个 exp_008,溯源率从 28.87%(最严:独立子 agent 看全部 344 条规则当标准答案、按违规条数穷举)到 96%(self-check:拿模型自己的预测当标准答案)——差的全是口径。其中两个尤其要说清:

冲指标的压力下我一度想选最松的口径凑 90%,但那是自欺。最后评估报告写的是”24G 硬件 + 现有数据,工程天花板约 75-78%,到不了 90%“,对外该报的是 88.5%(明显违规子集)/ 单平台最高 92.1% / 严格口径 70-78%,每个数字都标明口径。完整推演见 评估口径之战

留下的判断习惯

异常好的 loss 先查截断和 mask;高准确率先核对评估格式和模型真实输入;“0% 召回”先看是不是训练标签冲突;线上差指标好先比训练分布和推理分布;冲新高前先钉死可回退基线;一个数字低,先用同口径拉个更强的模型一起跑、分清是”模型不行”还是”口径对谁都这么低”;最该警惕的不是低指标,是那个为了好看而悄悄选松的口径——把口径写清楚,比把数字做高更重要。