上周帮合作的自媒体工作室排查内容审核故障的时候翻到后台近一个月的申诉记录127条误判里有41条是小编自己蹲在电脑前敲了三四个小时的原创干货平白被系统标成AI生成直接限制分发。工作室的负责人说本来读者就爱读小编带个人感受的内容结果系统乱判搞的他们最近推送打开率掉了快8个点找过来想让我帮忙改改这个AI筛查的逻辑。原有筛查方案的核心问题排查我第一次拉取后台的筛查日志的时候一开始还以为是第三方检测接口的调用频率超限返回了默认的AI生成高置信度结果翻了整整三天的接口返回报文才发现根本不是外部服务的问题问题全出在他们自己写的预处理逻辑上。他们当时图省事直接拿了网上找的预训练AI检测模型连文本输入的处理都没改套了个通用的512token硬截断规则就上线跑了。跑测试集的时候我直接调出了控制台的告警明明白白弹了一句UserWarning: Token indices sequence length is longer than the specified maximum sequence length for this model (723 512)我把告警对应的那篇公众号文案拉出来看小编在前面400多token都在铺垫最近踩的行业坑核心的个人总结观点全在后面200多token的位置硬截断直接把这部分内容全丢了。用的transformers版本是4.28.1当时写的旧截断代码粗陋到离谱我贴出来给大家避坑# 原有旧代码的文本截断逻辑当时写得非常粗暴 def truncate_text(raw_text, max_len512): tokens tokenizer.encode(raw_text) if len(tokens) max_len: return tokenizer.decode(tokens[:max_len]) return raw_text更离谱的是他们还额外加了一个n-gram重复率的硬规则连续三个词在公开AI生成文本库里出现占比超过30%就直接标为AI生成。公众号文案很多小编爱用的网络梗、行业常用词本来就重合度高比如“踩坑避指南”“亲测有效”这类的高频短语直接就被规则抓成AI生成难怪误判率高得离谱。我测了50条全人工写的历史爆款文案有21条直接被这个规则误判占比超过40%。优化方案的分步实现逻辑我没有直接换掉原来的预训练检测模型毕竟训一个专属的AI文本检测模型要标上万条数据时间成本扛不住导师给的实验机还占着跑我的NLP相关的毕业实验我只能在原来的基础逻辑上做分层优化尽量在不重新训练大模型的前提下把误判率打下来。等等我说反了不是完全不碰模型后面我给检测模型的输出层加了一个非常小的二元分类头只针对公众号场景的专属特征做微调参数量还不到原模型的百分之一在我自己的16G消费级显卡上就能跑。第一层优化先把硬截断逻辑彻底换掉改成带重叠区域的滑动窗口提取策略不用丢任何长文本内容同时给窗口里出现第一人称主观表述的片段额外加权重偏移毕竟纯AI生成的批量文案很少会出现高密度的第一人称主观感受词。一开始我把overlap重叠参数设成64跑出来的结果准确率反而掉了2个点后来翻了之前读的ACL2023里的AI检测相关论文才想起重叠度至少要设为窗口大小的三分之一才能保证相邻窗口的上下文特征不会断片。对应的实现代码如下def sliding_window_extract(raw_text, tokenizer, window_size384, overlap128): full_tokens tokenizer.encode(raw_text, add_special_tokensFalse) windows [] start 0 while start len(full_tokens): end min(start window_size, len(full_tokens)) windows.append(full_tokens[start:end]) if end len(full_tokens): break start (window_size - overlap) # 给包含第一人称代词的窗口额外加权 weighted_windows [] first_person_tokens set([tokenizer.encode(我)[0], tokenizer.encode(咱)[0], tokenizer.encode(笔者)[0]]) for idx, window in enumerate(windows): weight 1.0 if any(t in first_person_tokens for t in window): weight 0.2 weighted_windows.append((window, weight)) return weighted_windows关于第一人称词的权重偏移量设为0.2是不是最优值我目前只在手上标注好的1200条公众号专属数据集上测出来效果最好换别的垂直领域比如学术论文、电商文案的话阈值大概率要重新调这个我目前还没做跨域验证存疑待后续补实验。第二层优化我把之前那个拍脑袋写的n-gram硬规则直接删掉换成了前置的非AI特征快速初筛模块把公众号文案里常见的人工独有特征整理成了规则集合比如全文存在手动插入的修改标注、口语化语气词占比超过1.5%、第一人称代词频次大于每千字8次满足任一条件的直接把模型输出的AI置信度往下拉20个百分点不会直接判定为AI生成内容。划重点任何拿通用AI检测模型不加修改直接套垂直场景的操作最后一定会跑出离谱的误判结果。实测效果验证与遗留问题我拿工作室提供的标注完成的1420条历史文案做最终测试集其中纯人工原创的892条AI全量生成的267条AI生成初稿后人工修改的261条。原来的老方案整体误判率是32.1%其中人工原创内容的误判率高达41.7%优化之后整体误判率直接降到7.3%纯人工内容的误判率压到了5%以内已经完全满足工作室的分发审核要求。中间还踩了个挺蠢的坑当时我看到通用AI生成的文案很多有规整的三段式排比结构脑壳一热想加个规整句式识别层把连续三个以上结构相似的陈述句标记为AI特征结果测的时候把小编写的美食探店分点文案全部误判了足足127条内容里有72条被打了高AI置信分我没熬住直接把这部分逻辑全部回滚了。后来才想明白垂直场景的特征根本不能直接套通用场景的规律真要做这部分特征还得自己重新标注几百条样本训个tiny的小分类器。目前这套优化后的筛查逻辑已经在工作室的后台跑了快两周他们申诉的误判记录从之前每天四五条降到了三四天一条效果比预期的还要好一点。我本来想把这个逻辑整理成一个通用的轻量筛查工具给身边做自媒体的朋友用结果上周把初版结果给导师看他说我做的场景太碎不够学术让我把数据集整理一下投个会议短文我现在还在补标注额外的样本ddl已经堆到下个月了头大。现在还有个没解决的问题就是那些小编用AI生成初稿之后逐句改写改写比例在60%左右的半人工半AI内容目前的筛查模型还是没法给出准确的分类结果之前我试过把这类内容单独划成第三类标签分类准确率只能到62%。我到现在还没想清楚这类内容到底应该归到人工原创类别还是单独做一个新的筛查分类后续打算再收集300条这类的标注样本重新调小分类头的阈值看看能不能提上来。
自媒体公众号文案AI筛查逻辑优化:从误判率32%降到7%的实践
发布时间:2026/6/6 23:50:34
上周帮合作的自媒体工作室排查内容审核故障的时候翻到后台近一个月的申诉记录127条误判里有41条是小编自己蹲在电脑前敲了三四个小时的原创干货平白被系统标成AI生成直接限制分发。工作室的负责人说本来读者就爱读小编带个人感受的内容结果系统乱判搞的他们最近推送打开率掉了快8个点找过来想让我帮忙改改这个AI筛查的逻辑。原有筛查方案的核心问题排查我第一次拉取后台的筛查日志的时候一开始还以为是第三方检测接口的调用频率超限返回了默认的AI生成高置信度结果翻了整整三天的接口返回报文才发现根本不是外部服务的问题问题全出在他们自己写的预处理逻辑上。他们当时图省事直接拿了网上找的预训练AI检测模型连文本输入的处理都没改套了个通用的512token硬截断规则就上线跑了。跑测试集的时候我直接调出了控制台的告警明明白白弹了一句UserWarning: Token indices sequence length is longer than the specified maximum sequence length for this model (723 512)我把告警对应的那篇公众号文案拉出来看小编在前面400多token都在铺垫最近踩的行业坑核心的个人总结观点全在后面200多token的位置硬截断直接把这部分内容全丢了。用的transformers版本是4.28.1当时写的旧截断代码粗陋到离谱我贴出来给大家避坑# 原有旧代码的文本截断逻辑当时写得非常粗暴 def truncate_text(raw_text, max_len512): tokens tokenizer.encode(raw_text) if len(tokens) max_len: return tokenizer.decode(tokens[:max_len]) return raw_text更离谱的是他们还额外加了一个n-gram重复率的硬规则连续三个词在公开AI生成文本库里出现占比超过30%就直接标为AI生成。公众号文案很多小编爱用的网络梗、行业常用词本来就重合度高比如“踩坑避指南”“亲测有效”这类的高频短语直接就被规则抓成AI生成难怪误判率高得离谱。我测了50条全人工写的历史爆款文案有21条直接被这个规则误判占比超过40%。优化方案的分步实现逻辑我没有直接换掉原来的预训练检测模型毕竟训一个专属的AI文本检测模型要标上万条数据时间成本扛不住导师给的实验机还占着跑我的NLP相关的毕业实验我只能在原来的基础逻辑上做分层优化尽量在不重新训练大模型的前提下把误判率打下来。等等我说反了不是完全不碰模型后面我给检测模型的输出层加了一个非常小的二元分类头只针对公众号场景的专属特征做微调参数量还不到原模型的百分之一在我自己的16G消费级显卡上就能跑。第一层优化先把硬截断逻辑彻底换掉改成带重叠区域的滑动窗口提取策略不用丢任何长文本内容同时给窗口里出现第一人称主观表述的片段额外加权重偏移毕竟纯AI生成的批量文案很少会出现高密度的第一人称主观感受词。一开始我把overlap重叠参数设成64跑出来的结果准确率反而掉了2个点后来翻了之前读的ACL2023里的AI检测相关论文才想起重叠度至少要设为窗口大小的三分之一才能保证相邻窗口的上下文特征不会断片。对应的实现代码如下def sliding_window_extract(raw_text, tokenizer, window_size384, overlap128): full_tokens tokenizer.encode(raw_text, add_special_tokensFalse) windows [] start 0 while start len(full_tokens): end min(start window_size, len(full_tokens)) windows.append(full_tokens[start:end]) if end len(full_tokens): break start (window_size - overlap) # 给包含第一人称代词的窗口额外加权 weighted_windows [] first_person_tokens set([tokenizer.encode(我)[0], tokenizer.encode(咱)[0], tokenizer.encode(笔者)[0]]) for idx, window in enumerate(windows): weight 1.0 if any(t in first_person_tokens for t in window): weight 0.2 weighted_windows.append((window, weight)) return weighted_windows关于第一人称词的权重偏移量设为0.2是不是最优值我目前只在手上标注好的1200条公众号专属数据集上测出来效果最好换别的垂直领域比如学术论文、电商文案的话阈值大概率要重新调这个我目前还没做跨域验证存疑待后续补实验。第二层优化我把之前那个拍脑袋写的n-gram硬规则直接删掉换成了前置的非AI特征快速初筛模块把公众号文案里常见的人工独有特征整理成了规则集合比如全文存在手动插入的修改标注、口语化语气词占比超过1.5%、第一人称代词频次大于每千字8次满足任一条件的直接把模型输出的AI置信度往下拉20个百分点不会直接判定为AI生成内容。划重点任何拿通用AI检测模型不加修改直接套垂直场景的操作最后一定会跑出离谱的误判结果。实测效果验证与遗留问题我拿工作室提供的标注完成的1420条历史文案做最终测试集其中纯人工原创的892条AI全量生成的267条AI生成初稿后人工修改的261条。原来的老方案整体误判率是32.1%其中人工原创内容的误判率高达41.7%优化之后整体误判率直接降到7.3%纯人工内容的误判率压到了5%以内已经完全满足工作室的分发审核要求。中间还踩了个挺蠢的坑当时我看到通用AI生成的文案很多有规整的三段式排比结构脑壳一热想加个规整句式识别层把连续三个以上结构相似的陈述句标记为AI特征结果测的时候把小编写的美食探店分点文案全部误判了足足127条内容里有72条被打了高AI置信分我没熬住直接把这部分逻辑全部回滚了。后来才想明白垂直场景的特征根本不能直接套通用场景的规律真要做这部分特征还得自己重新标注几百条样本训个tiny的小分类器。目前这套优化后的筛查逻辑已经在工作室的后台跑了快两周他们申诉的误判记录从之前每天四五条降到了三四天一条效果比预期的还要好一点。我本来想把这个逻辑整理成一个通用的轻量筛查工具给身边做自媒体的朋友用结果上周把初版结果给导师看他说我做的场景太碎不够学术让我把数据集整理一下投个会议短文我现在还在补标注额外的样本ddl已经堆到下个月了头大。现在还有个没解决的问题就是那些小编用AI生成初稿之后逐句改写改写比例在60%左右的半人工半AI内容目前的筛查模型还是没法给出准确的分类结果之前我试过把这类内容单独划成第三类标签分类准确率只能到62%。我到现在还没想清楚这类内容到底应该归到人工原创类别还是单独做一个新的筛查分类后续打算再收集300条这类的标注样本重新调小分类头的阈值看看能不能提上来。