当前位置: 首页 > news >正文

面向学术初稿的AIGC含量本地检测方案实现与踩坑记录

上周导师甩了我一个37篇的初稿压缩包,要求一周内摸清楚所有稿件的AIGC生成占比区间,赶在中期审核前筛出需要重点复核的内容。最开始我第一反应是找能在线查文章AIGC含量的站点,结果要么单篇超过3000字就强制跳转付费页,要么上传文档要排队半小时以上,37篇全测完少说要耗掉大半天,而且同一片文本间隔两小时两次检测的结果差了32%,根本没法作为内部筛查的依据。

触发需求:实验室内部初稿筛查的实际痛点

我之前帮师哥做过文本相似性检测的相关实验,本来以为AIGC含量检测的逻辑不会太复杂,直到翻了几篇2026年之前的ACL workshop相关论文才发现,通用场景下的AIGC检测泛化性问题到现在都没有完全解决。市面上的公开在线站点大多是直接调用闭源大模型的黑盒接口,不会对外暴露核心特征逻辑,我连它判断维度是哪几个都摸不清,根本没法给导师提交筛查结果的佐证材料。

后来我试了大概七八个公开的在线站点,每个的检测结果偏差都特别大,有一篇我用大模型100%生成的综述片段,不同站点给出的AIGC占比从12%到94%不等,完全没有参考性。而且大部分站点对论文里的公式、代码块支持度极差,传进去之后直接把latex字符当成普通文本计算,结果离谱到完全没法用。

与其耗时间在不同站点之间校准结果,不如直接自己写个本地可运行的轻量脚本,所有特征全部透明,结果出来之后可以直接对应到每一项特征的得分,给导师解释的时候也有依据。而且不需要连外网传涉密的实验室初稿,也不存在单篇字数限制的问题,37篇批量跑最多十分钟就能出全量结果。

核心实现:基于多维度文本特征的检测脚本开发

先说结论,我没有用端到端微调大模型的思路,那样至少要攒上万条标注样本才能拿到可用的效果,一周的时间根本来不及。我选的是多特征融合的统计检测思路,四个核心特征全部来自已公开的AIGC检测相关论文的结论,不需要额外标注大量样本,直接用开源预训练小模型就能跑。

第一个核心特征是字符级困惑度,用参数量1.1B的中文GPT-2小模型来计算。大模型生成文本的原理就是逐字符预测下一个token的概率,所以它生成的内容在同领域预训练模型里的困惑度会远低于人类手写的内容。4-bit量化是能在消费级显卡运行小检测模型的核心前提,一开始我直接加载全精度模型,实验室那台装2060 6G显卡的工作站直接报RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB的错误,折腾了快两个小时才想起用bitsandbytes库的量化功能压缩显存占用。

from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 基于transformers 4.35.2版本开发,Python版本3.10.12 model_name = "uer/gpt2-chinese-cluecorpussmall" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, load_in_4bit=True, device_map="auto" ) def calc_perplexity(text: str) -> float: inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512).to(model.device) with torch.no_grad(): outputs = model(**inputs, labels=inputs["input_ids"]) loss = outputs.loss perplexity = torch.exp(loss).item() return round(perplexity, 2)

第二个核心特征是重复3-gram的占比,人类在连续写作的过程中很容易无意识重复输入相同的三字词组,而大模型在生成的时候会主动规避局部重复的序列,所以纯AI生成的文本重复n-gram的占比会比人类手写的低很多。等等我说反了,纯AI生成的内容的重复n-gram率其实比人类低,我刚才差点说成更高,别记错了。对应的统计逻辑也很简单,遍历所有连续三字组合,统计出现两次及以上的序列占总序列的比例就行。

from collections import defaultdict def calc_dup_ngram(text: str, n: int=3) -> float: ngram_count = defaultdict(int) # 提前过滤掉空格和换行符避免干扰统计 chars = list(text.replace(" ", "").replace("\n", "")) for i in range(len(chars) - n + 1): ngram = "".join(chars[i:i+n]) ngram_count[ngram] += 1 total_ngram = sum(ngram_count.values()) dup_count = sum(v for v in ngram_count.values() if v >= 2) return round(dup_count / total_ngram, 4)

剩下两个特征我加了停用词频率偏移度和特殊标点分布方差,前者是统计文本里的中文停用词出现频率和百万级中文人类语料库的基准频率的差的平方和,后者是统计顿号、破折号、括号的出现间隔的方差,AI生成内容的标点分布会更均匀,方差会远小于人类写作的结果。四个特征最后做归一化加权求和,最终输出0到1之间的AIGC含量预估得分。

实测对比与阈值校准的踩坑过程

我攒了一个小型标注集来校准阈值,里面有20篇纯人类手写的实验室往期初稿,还有20篇分别用3个不同的主流大模型100%生成的同主题文本,另外还有40篇按20%、40%、60%、80%比例人工混合AI和人类内容的文本,总共80条标注样本。所有样本提前导出成纯文本格式,不带任何格式信息,避免引入额外干扰。

第一次跑全量样本的时候准确率只有82%,误判的14个样本里有11篇是包含大量latex公式的摘要或者方法章节,latex的公式字符完全不在中文GPT-2的预训练语料里,算出来的困惑度直接飙到200以上,脚本直接把纯AI生成的带公式文本误判成了人类手写的。我当时盯着结果愣了十分钟,完全找不到哪里出了问题,后来随机抽了三篇误判的文本逐段看,才发现所有误判样本的公式数量都超过8个。

必须先完成文本的公式、代码块预处理再计算核心特征,我加了一个简单的正则规则,把所有被美元符号包裹的latex内容,还有被反引号包裹的代码块全部替换成统一的占位符,预处理完之后再扔进特征计算模块,重新跑80条样本的准确率直接升到94%。剩下的5条误判样本都是人类写的极度通顺没有任何冗余表达的综述片段,被误判成了高比例AIGC内容,这种情况本来就是检测领域的共性难题,我暂时找不到特别好的优化方案。

后来我把自己手写的硕士开题报告拆成1000字的片段去跑,算出来的AIGC预估占比是17%,刚好对应我用大模型润色了部分过渡段落的实际情况,和我预期的结果几乎完全一致。我没敢把这个结果给导师看,怕他问我开题报告是不是大部分都是AI写的。

我之前还试过用某公开的预训练检测大模型直接跑全量样本,准确率还不到70%,比我自己写的四个简单特征融合出来的结果差很多,而且那个模型要占12G以上显存,我那台6G的工作站根本跑不动,还不如我自己写的轻量脚本实用。

后续优化的待验证方向

目前这个脚本的泛化性还没经过大规模样本的验证,我手里的标注样本都是计算机领域的学术文本,不确定放到文科的论文里会不会出现阈值漂移的问题。我本来想找别的实验室的同学要几份不同领域的标注样本做跨领域测试,结果他们都怕初稿内容泄露不愿意给,这事暂时就搁置了。

我查过几篇新出的相关论文,提到人类写的非结构化文本的情感极性方差是大模型生成内容的2倍以上,但是我还没来得及把这个特征加进去,不确定实际效果会不会提升。另外我还打算攒够500条标注样本之后,用轻量的分类器把四个特征做加权融合,现在我是手动凭经验给四个特征设的权重,理论上用逻辑回归拟合之后准确率应该还能往上走几个百分点。

现在37篇初稿已经全部跑完,筛出了7篇AIGC占比预估超过40%的稿件送导师二次复核,导师没说结果准不准,只是扔给我另一批30多份往届的答辩记录让我做相似性匹配。下周就要交NLP课程的实验报告,我本来计划的优化AIGC检测脚本的任务,大概率又要拖到下个月才能动手,谁知道下周导师又会甩过来什么新的杂活。

http://www.rkmt.cn/news/1461112.html

相关文章:

  • 星辰变手游官网下载:星辰变归来最新官方下载渠道
  • Arduino 10秒倒计时器:从电路设计到代码实现的完整DIY指南
  • 基于快马与miniconda打造标准化开发环境,提升团队协作效率
  • 树莓派Geany配置GTK开发环境:解决gtk/gtk.h找不到问题
  • Topit:3步让Mac窗口置顶,开启高效多任务处理新时代
  • 基于ESP8266与PIR传感器的智能安防系统:从硬件连接到Blynk通知
  • 短剧出海译制全流程:翻译、配音、对口型怎么做
  • 2026年嘉兴高强度紧固件快速交期供应商选购完全指南 - 优质企业观察收录
  • UnityLive2DExtractor完整指南:如何轻松提取Unity中的Live2D角色资源
  • 小米智能穿戴表盘终极定制指南:零代码打造你的专属风格
  • 2026宁夏小程序定制开发实力厂商技术硬核优选
  • PDF/PPT/网页 全搞定:RAG 文档解析的 5 个难点与解法
  • 2026年万太医舒小高儿童奶粉深度测评:脾肽+发酵乳酸菌+新四神汤配方实测
  • 南宁市2026年黄金回收白银回收铂金回收放心选真心推荐 靠谱门店排行 + 联系电话整理 - 中业金奢再生回收中心
  • 爆款文案的底层逻辑,新手也能快速上手
  • Arduino智能小车:双模控制与超声波避障的嵌入式实践
  • 深度测评2026年长沙小程序开发高口碑推荐榜单,你选对了吗?
  • 基于LPJ模型的植被NPP模拟、驱动力分析及其气候变化响应预测
  • 2026年梅州市口碑首选!黄金回收铂金回收白银回收权威门店 TOP5 附咨询电话 - 信誉隆金银铂奢回收
  • Qwen3.6-27B本地部署262K上下文:软硬件配置全解析
  • 终极Windows内核级硬件指纹伪装工具:EASY-HWID-SPOOFER完整指南
  • 上海租车合规选型全解析 资深从业者硬核经验分享 - 奔跑123
  • 辽源市2026年黄金回收白银回收铂金回收权威门店 TOP5+正规可靠机构电话与地址汇总 - 中安检金银铂钻回收
  • 别只画图了!深度挖掘VOSviewer三大视图(网络/覆盖/密度)背后的科研故事与隐藏信息
  • 3分钟解锁插画编辑新维度:layerdivider智能分层工具完全指南
  • 5分钟终极指南:免费快速实现网盘直链下载的完整教程
  • 2026年楚雄州黄金回收白银回收铂金回收门店 TOP5榜单无套路:实体店铺地址电话一览 - 诚金汇钻回收公司
  • 2026年红河州黄金回收白银回收铂金回收门店 TOP5榜单无套路:实体店铺地址电话一览 - 诚金汇钻回收公司
  • 出手西安闲置翡翠,为何优先选正规连锁实体店 - 奢侈品回收测评
  • Arduino Uno音乐播放器DIY:从硬件连接到状态机编程全解析