社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  aigc

我们开源了一个可以降低 AIGC 率的模型

特工宇宙 • 1 月前 • 155 次点击  

模型作者丨特工鲸鱼

内容编辑丨特工鲸鱼 特工小师

最近到了毕业季,好多朋友来找我聊一件事:有什么办法帮他降 AIGC。

他们在做毕设,学校今年开始查 AI 率了:知网的,维普的,要求一般压到  30% 以下。有个朋友被打回来两次,急得不行,问我有没有什么办法。

我当时第一反应是:这个检测到底靠不靠谱?是不是存在很简单的方式就能绕过去?

然后我想起两年前,我用知乎的回答数据训过一个非常口语化的模型。但那个东西在这完全没法用,因为论文里的改写要求非常微妙:太口语化,导师一眼就看出不对劲。改动太小,检测系统照样标红。

我研究了下,发现比较麻烦的是,各家平台的 AI 检测模型,训练数据不公开,特征设计不公开,阈值策略也不公开,更别说提供稳定的 API 了。如果你想直接用 PPO 或者 GRPO 去对抗某一个检测器,reward 都没法设计,因为你连检测模型都拿不到。

所以我换了个思路:五一闲着也没事,能不能训一个模型,让文本在保持学术规范的前提下,把 AI 疑似占比明显降下来?

结果还真做出来了。

下面记录一些试错过程和最终可用的方案。

模型和数据都已经开源,链接在文末。

不训练行不行?

动手之前,我先试了两条最省力的路径。

第一条:找一个现成的 Prompt 或者 Skill 来改写。

我翻了一圈 GitHub,英文方向有个仓库看起来可用(github.com/blader/humanizer),但中文方向基本是空白。

有一个自动改写中文的项目用了传统 NLP 手段检测 AI 率(github.com/voidborne-d/humanize-chinese),但改写方式是规则替换,检测手段也比较粗糙,参考价值有限。

第二条:换一个冷门模型。

逻辑很简单,检测模型本质上是在判断文本的统计分布是否接近常见模型的分布。

如果用一个极其冷门的模型,它的输出分布天生远离被检测的那些模型,是不是能天然绕过?

想法很美好,但很快排除了:太冷门的模型对中文支持一般很弱,效果上不去。

而且没有做过针对性的 Post Train 调整,底层分布和主流模型的差异其实也没那么大。

两条路都走不通,只能老老实实训练了。

我的训练数据和过程

Step1:SFT,第一个可用但不够好的版本

数据构造上,直觉是用反向构造:

找一批人类写的文本,用 AI 改写成「AI 味」很重的版本,然后训练模型学会反向操作。

关键问题在于,原始文本用哪一类。

前期我找了互联网网页数据,踩了两个坑。一个是数据清洗很繁琐,XML 标签、网页跳转链接之类的噪音要处理掉。另一个更致命,训出来的模型太口语化了,根本没法用在学术场景。

那就得把数据范围限制在学术类文本上。

我的第一个想法是用 Wikipedia,但 Wiki 数据在 pre-train 阶段占比通常很高,效果存疑。直接从 arxiv 下载论文切分?主要是理工科英文论文,文社科和中文覆盖少,泛化能力会受限。

最后找到一个比较合适的数据集:CSL(github.com/ydli-ai/CSL),收集的是中文论文摘要。

虽然只是摘要,但和正文段落在语言分布上差异不算太大。

最终我构造了约 18000 条训练样本,格式是 instruction + input + output。指令统一为「将文本改写得更像自然人写作,保持原意与事实」,输入是 AI 改写后的摘要,输出是原始论文摘要。

基座选了 Qwen3.5-9B,收敛效果不错,Loss 曲线比较平滑,我做了提前停止。

看个案例,原文类似这样:

今天没什么特别的,和平常一样。早上起床玩了会手机,中午随便吃了点东西,下午出去买了杯咖啡。桂花开了,闻着挺香的。在公园坐了十来分钟,看了一会儿狗和小孩。然后就回家了。这一天就这么过去了,不坏也不好,就是普通的一天。

处理后就变成这样:

今日平平淡淡,与往日无异。晨起时翻阅了些许手机资讯,午间随意进食,午后外出购得一杯咖啡。恰逢桂子飘香,漫步公园约莫十分钟,观览孩童嬉戏与犬只闲逛,随后便归家。一日就此落幕,并无甚波澜,既非佳日亦非恶日,不过寻常时日罢了。

这个 SFT 版本能完成改写任务,学术术语保留得也不错。

但问题在于学术场景改写太保守,毕竟改写前后的文案差异本身就小,学术类文本又天然偏严肃,而日常场景又太过文邹邹。

这直接导致两个问题:改写程度不够,检测系统还是能抓到;模型只能用在学术场景,通用性很差。

Step2:DPO 第一阶段,一个关键错误和修正

SFT 之后,我想用 DPO 来增强效果。

为什么不用 PPO?还是之前提到的问题。每家检测模型不一样,且拿不到 API。与其去 hack 某一个具体的检测器,不如找到一种让文本更接近人类分布的通用方法,这样更可能具备跨检测器的泛化性。

但 DPO 的第一次实验,我犯了个错误。

我按 SFT 的思路构造数据:chosen 是人类原文,rejected 是 AI 改写。听起来很合理对吧?但实际跑起来问题很大。因为 AI 改写后的文本通常更书面、更严谨,而人类原文相比之下反而更口语化一些。模型学到的信号变成了「越口语化越好」,而不是「越接近人类分布越好」。

这个版本直接不可用。

意识到问题之后,我把数据构造改成了双向的:

一边是 2000 条 formal-rejected,AI 改写保持正式书面的语气不变。另一边是 2000 条 casual-rejected,AI 改写加入各种口语化变体,改长改短,增减信息。

这个构造方式让模型真正学到了什么叫「人类文本」的感觉。

这次处理后的效果是这样的:

今天平平淡淡,和往常一样。早晨醒来玩了一会儿手机,中午胡乱塞了几口食物,下午出门买杯咖啡。桂花开了,闻起来很香。在公园里坐十几分钟,看了看狗和小孩。然后便回家。这一天就这样过去了,不糟糕也不出色,就是平凡的一天。

它不再简单地认为口语化就是好的,也不再认为书面化就是坏的,而是学会了一种更像人的风格。

Step3:DPO 第二阶段:自博弈与信号纯度的教训

有了更稳固的 DPO 版本,我尝试用自博弈来进一步提升。

这里又犯了一个错误:我把自博弈数据和一部分口语化 rejected 数据混在一起训练,本来想法是给模型加一道「围栏」,防止它跑偏,但自博弈产生的学习信号很弱,口语化 rejected 的区分信号太强。模型很快就能分辨出哪些是口语化的数据,如果一个 batch 里采样到的口语化数据多,梯度就暴涨,整个训练过程抖动得厉害。

于是,我果断放弃这个版本。

然后重新来过:去掉所有口语化数据,保证信号单一。

没有了「围栏」,我就把学习率调到之前的一半,用更慢的速度防止跑偏,然后自博弈数据扩展到 2000 条,重新开始训。

这个版本训完之后,终于接近可用状态了。

这次处理后的文本效果是这样的:

一切如常,今天没有什么特别之处。起床后玩了一会儿手机,中午胡乱吃了一些东西,下午去外面买咖啡喝。桂花开了,闻着很香。在公园里坐了一刻钟左右,看了会儿狗和小孩子。随后就回家。就这样,一天过去了,不好也不差,就是普通的一天。

我拿两篇论文做了批量改写测试:

第一篇 AI 率从 50%降到 24%,第二篇从 30%降到 8.9%。

我也人工抽查了几十段,语义和事实信息基本保留无误。

当然这个模型远谈不上完美,但作为一个可行性验证,这个已经很可以了。我相信扩展数据量和数据类型之后,效果还能进一步提升。

我的一些思考

整个实验在一个五一假期内完成。

我用的是单张 5090,思路说清楚之后,实现本身已经不是难点了。

然后我把模型和合成数据都一起开源出来了:https://github.com/XiangJinyu/humanize-zh

模型训练完,我看了下不同版本模型的改写对比案例,发现有个现象挺有意思的:

SFT 版本在学术场景还行,但你给它一段日常文字,它会把随便一段话改成了文言文既视感。

比如「今天没什么特别的,和平常一样,早上起床玩了会手机」这种,它会改成「今日平平淡淡,与往日无异,晨起时翻阅了些许手机资讯」。

但 DPO Stage-2 的版本,即使训练数据全部来自学术论文,在日常场景里也展现出了相当好的可用性。

同一段话它会改成「一切如常,今天没有什么特别之处。起床后玩了一会儿手机」,非常自然。

这说明 DPO 阶段学到的东西,确实更接近底层的「人类分布对齐」,而不只是学术文本的表面特征。

通过学术论文上的训练,模型泛化出了一部分通用的改写能力。

这个发现让我觉得整条技术路径是值得继续投入的。

在做这个项目的过程中,我有一些感触:检测系统拦住的是谁?是那些懒得折腾的人。真正想绕过的人,花一个假期就能做出可用的方案。而随着这类工具越来越多,反检测的产业只会越来越成熟。

也许,其实更值得追问的是:教育系统到底在检测什么?

工作之后,从来没有人问过你的文档 AI 率是多少。大家只关心你能不能解决问题,能不能交付结果。

在一个 AI 工具已经无处不在的时代,与其把精力放在检测学生有没有用 AI,不如想想怎么教学生把 AI 用好。

AI 时代来了,怎么让学生在 AI 的帮助下学到更多东西,怎么设计一套新的评估体系来衡量真实的学习效果。

这也许才是,真正值得高校花时间做的事。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/196909