前不久帮一位教写作的老师看期末论文,他指着一篇作业问我:“这篇是不是AI写的?我闻着像,但说不出哪儿不对。”这大概就是所有在做AI生成文本检测的人最常听到的一句话。宏智树AI是我上一段项目经历里参与的一个检测专项,目标很直接:在学术界这场“猫鼠游戏”里,帮老师把AI代写的文本从真实写作里筛出来。这个项目解决的不只是“查重”问题,而是更隐蔽的“查AI”问题——今天的学生用生成式工具写作业,已经不是秘密,真正难的是怎么在证据层面做出判断。
这篇文章会完整拆解宏智树AI的检测思路:从语言模型生成文本的底层破绽,到我们用的特征体系、模型架构和判定流程,再到真实教学环境里踩过的坑、误报处理和伦理边界。适合三类人看:正在头疼作业AI化的高校老师、想做文本检测产品的开发者,以及好奇“AI文本到底能不能被可靠识别”的写作者。
1. 为什么AI写的论文“像人”却又处处露馅:检测的底层逻辑
很多人以为AI检测是拿两个文本比相似度,其实不对。宏智树AI的核心逻辑是:检测的不是“抄没抄”,而是“像不像人写的”。这背后依赖一个观察——语言模型生成文本和人类写作,在统计分布上有系统性差异。
1.1 生成机制决定了AI文本“过度流畅”
要理解检测原理,得先理解生成式AI是怎么写东西的。大语言模型本质上是一个“逐词猜谜器”:给定前面所有词,它预测下一个最可能的词是什么,然后从这个概率分布里采样一个词,再把这个词接进去,继续预测下一个。它的目标函数是“让整体文本看起来合理”,而不是“表达一个有血有肉的意图”。
这个机制带来了一个直接后果:AI生成文本的“困惑度”(perplexity)普遍偏低。困惑度是语言模型对一段文本的惊讶程度——如果模型预测的词和实际出现的词高度吻合,困惑度就低,反之就高。人类写作不是这样的。一个人写句子时会犹豫、会转折、会先写一个长句再打碎重组,甚至会有语法不完美但有语义张力的句子。这些都会让困惑度升高。所以当你用同一个语言模型去算一段AI生成文本的困惑度,数值通常低得吓人;而人类写作计算出来的数值分布宽得多。
另一个明显特征是“burstiness”——突现性。这个指标衡量一段文本里“不常见表达扎堆出现”的程度。人写文章有明显的节奏:短句之后接长句,平淡之后接高潮,一段里偶尔出现一个很尖銳的想法。AI没有这种内在节奏,它的生成是“均匀地按概率滑行”,所以句与句之间的风格波动很小。套用检测圈里常说的一句话:AI文本像是被熨斗熨过的衬衫,平整,但没有人的形状。
1.2 系统性破绽:个性化消失、用词均匀、结构模板化
除了困惑度和突现性,AI文本还有一组肉眼可见的“统计学指纹”。
第一,用词分布过于均匀。人类写作者有强烈的词汇偏好,有人爱用“然而”,有人爱用“值得注意的是”,有人几乎不用形容词。但AI生成的文本里,高频词和低频词的分布非常稳定,像一条被刻意平滑过的曲线。换句话说,AI文本缺少“个人方言”。第二,句子长度方差小。人写段落时句子长短起伏很大,AI生成的句子虽然单个读起来通顺,但排在一起长度相似,结构像复制粘贴。第三,段落衔接处过度顺滑。人类写作经常在段落之间出现跳跃、留白甚至逻辑断裂——这不是坏事,而是思维的真实痕迹。AI则会用大量过渡句把每个段落“焊死”,读起来流畅到不自然。
这里我拿同一主题的两段文字做个对比,一段是真人写的,一段是AI生成的,主题是“技术对教育的影响”:
真人版:我一开始觉得线上教学就是个临时方案。后来发现,它真能改变一些东西——比如一个在课堂上从不举手的学生,居然会在讨论区写很长的回复。问题是,评价体系没跟上。我们还是用期末论文那一套去衡量,结果学生花了更多时间在监控自己的“在线活跃度”上,而不是真正学东西。
AI版:随着信息技术的飞速发展,传统教学模式正在经历深刻的变革。在线教育打破了时空的限制,为学习者提供了更加灵活和个性化的学习体验。然而,这一变革也带来了新的挑战,如何科学地评价在线学习的效果,成为教育工作者面临的重要课题。
第二个版本所有句子都成立,所有词都在“正确的位置”上,但你读不出任何人味。检测系统要捕捉的就是这种“没有人味”的信号——只不过我们把它量化成了几十个特征。
2. 宏智树AI的检测架构:从困惑度到句长方差,我们这样搭起特征体系
宏智树AI整体走的是“多特征融合 + 轻量分类模型 + 句级定位”的路线。一开始就两个原则:不能只用一个指标下结论,不能只给一个总分不告诉老师哪里可疑。下面逐步拆解这个架构。
2.1 特征工程:把一个文本变成几十个数
检测的第一步是清洗和分句。别看这一步简单,实际坑很多——要去掉参考文献、重复标题、页眉页脚,因为这些内容本身就高度模板化,会把特征分布拉偏。分句也尽量不要用简单的标点符号切,AI生成文本的分号、破折号使用习惯和人不一样,建议用成熟的句子分割工具(比如spaCy或NLTK)。
分句之后是特征提取。我们的核心特征大概分四组:
第一组是概率特征,核心就是困惑度。我们用一个中等规模的语言模型(类似GPT-2大小的开源模型)对每个句子计算困惑度,并统计句子困惑度的均值、方差、最大值、最小值。这里面有个经验:如果整篇文本的困惑度都很低,且方差很小,大概率是AI生成的;如果大部分句子困惑度低但偶尔冒出一个超高分值——比如某个句子里有个专有名词或引文——反而更可能是人写的,因为人类会在某个点上突然“卡壳”。
第二组是多样性特征,包括句长变异系数(即句子长度的标准差除以均值)、词频熵(用词分布的均匀程度)、n-gram重复率。AI文本的句长变异系数通常在0.3以下,而人类写作经常能到0.5以上。这个指标简单有效,计算成本也低。
第三组是语义特征。把每句话用预训练模型编码成向量,然后算相邻句子之间的余弦相似度。人类写作的相邻句子虽然连贯,但语句向量的相似度不会特别高;而AI为了确保“流畅”,生成的相邻句子在语义向量空间里往往高度聚拢。我们还额外计算“全篇句子向量聚类数量”——AI文本通常两三个簇就把所有句子装完了,人类文本则散得多。
第四组是风格特征。包括连接词密度、句首词多样性、引号使用频率、被动语态比例等。AI文本特别爱用“此外”“然而”“综上所述”“随着……的发展”这类承上启下词,密度会显著高于平均水平。这个特征在中文场景里尤其管用,因为中文AI生成文本的过渡句套路非常明显。
2.2 模型选择与判定流程:为什么用随机森林而不是只用深度学习
特征提完之后,下一步是分类。宏智树AI早期尝试过直接微调BERT做二分类,效果不差,但有两个问题:一是解释性差,老师问“为什么这篇判成AI”,我们没法给出直观理由;二是容易过拟合到数据集里的表达习惯,换个写作风格的AI能力就明显掉点。
所以最终我们采用了一个组合策略:先用一个由特征工程驱动的可解释模型(随机森林XGB分类器)做初判,再用一个微调过的文本分类模型做二次校验。随机森林的好处是能输出每个特征的重要度,比如系统发现某篇文本的“句长变异系数”极端偏低,我们可以把这个信号直接呈现在报告上,让老师知道“这篇为什么被标记”。二次校验则用来兜底——有些AI文本经过改写工具处理,统计特征已经接近人写水平,这时候文本分类模型依靠语义层面的细微模式反而能抓到证据。
判定流程设计成了三级:
- 句级打分:每个句子送入模型,输出一个0到1的“AI风险分”;
- 段落聚合:把句子风险分按段落做加权平均,并计算段落内“高可疑句子占比”;
- 全局判定:整篇文章输出一个综合风险分,同时标记出风险最高的3到5个句子区域,供老师人工复核。
这一步非常重要。我们从不建议老师直接看整篇文章风险分就下结论,因为整篇均值会稀释局部特征——比如学生前1500字自己写,后面500字全是AI补的,拉通统计可能只显示30%可疑,但按段落切片以后,最后两段的特征值会非常扎眼。后来很多老师反馈说,最有用的功能不是那个总分,而是系统标出来的“重点怀疑句段”。
这里贴一段我们当时做特征提取的核心伪代码,思路比代码本身更值得参考:
def extract_text_features(text): sents = split_sentences(text) per_sent_perplexity = [] sent_lengths = [] sent_vectors = [] for s in sents: per_sent_perplexity.append(compute_perplexity(s, lm_model)) sent_lengths.append(len(s)) sent_vectors.append(encode_sentence(s, semantic_model)) features = { "mean_perplexity": mean(per_sent_perplexity), "std_perplexity": std(per_sent_perplexity), "len_cv": std(sent_lengths) / mean(sent_lengths), # 句长变异系数 "token_entropy": compute_token_entropy(text), # 用词均匀度 "adj_sim_mean": mean(cosine_similarity(sent_vectors[1:], sent_vectors[:-1])), "connective_density": count_transition_words(text) / len(sents), "quote_freq": count_quotes(text) / len(text), } return features这段流程跑完之后,每篇文本就变成一个特征向量,喂给分类器。后续在做批量测试的时候,我们还会对同一篇文本做多次清洗和分句对比,防止因为格式问题导致特征失真。这些细节等讲到部署实战时再说。
3. 猫鼠游戏的攻防演化:改写、混合写作、以及我们怎么被逼着迭代
做检测系统最难的不是第一版,而是后面的持续对抗。宏智树AI上线后大概三个月,我们就发现同一批检测模型的效果明显下降——不是模型坏了,而是“对面”升级了。
3.1 三种常见对抗手段及其对检测率的影响
第一种是提示词改写。用户让AI生成文本后,再输入“用更简单的语言改写”“加入一些个人经历”“删掉所有连接词”之类的指令。这种做法会让困惑度稍微升高、过渡词密度下降,整体分布向人类写作靠拢。我们做过的消融测试里,直接生成文本的检测率能到95%以上,但经过一轮“口语化改写”后,检测率就会掉到70%左右。
第二种是混合写作。学生先自己写三四百字,然后让AI补一两段,最后自己再改一遍拼起来。这种文本最难检测,因为真实人写内容会拉高全局困惑度,特征分布落在中间地带。我们用段落级切片之后,检测率大约在55%到65%之间波动,而且误报率明显上升。
第三种是手动加噪声。有人会在AI生成后故意加入几个错别字、口语词、奇怪的标点,甚至插入一个子虚乌有的个人信息,目的是让“困惑度”和“突现性”回到人类范围。这种对抗手段虽然不复杂,但确实会干扰早期的单一指标检测器——如果我们只靠困惑度判断,这些人造噪声几乎可以骗过系统。
下面这个表记录了宏智树AI在不同对抗条件下的实测表现,用的是某个高校课程里200篇真实作业做样本,另加200篇人工模拟的“作弊样本”,数据是我们内部评测集上的结果:
| 输入类型 | 综合检测率 | 段落级定位能力 | 误报率 |
|---|---|---|---|
| 直接AI生成 | 95.6% | 强,能标出大面积连续可疑区 | 3.1% |
| 一句话提示改写后 | 78.2% | 中,能标出改写不彻底的段落 | 5.4% |
| AI初稿+人工润色 | 61.7% | 中弱,只能标出若干孤立的句子 | 8.2% |
| 人工初稿+AI补写 | 57.4% | 较强,AI补写的段落特征突出 | 6.9% |
| 手动加噪声的AI文本 | 68.3% | 中,噪声段干扰定位 | 7.6% |
| 真人正常写作 | 2.8%误报为高可疑 | — | 2.8% |
这张表至少说明两件事:检测系统必须保留“人工复核”这个环节,再高的自动检测率也不能直接给学生定罪;同时,段落级定位比全局判定有意义得多——混合写作的场景里,光看总分等于什么都没说,但把可疑句段标出来,老师拿到的就是可操作的证据线索。
3.2 我们应对的思路:连续窗口扫描和创作过程溯源
被“改写流”和“混合流”逼过一轮后,宏智树AI做了两个重要改动。
第一个改动是引入连续窗口扫描。不再只按自然段落切块,而是用固定长度的滑动窗口(比如每256个字一个窗口,每次滑动128个字)对全文做重叠扫描。这样做的原因是:AI补写的段落和学生自己写的段落往往在边界处有“缝合痕迹”,自然段落切块容易漏掉边界区域。连续窗口扫描配合相邻窗口的风险分突变检测,可以更精确地定位“哪里开始不对劲”。
第二个改动是尝试接入创作过程数据。我们和几个课程团队合作,在获得学生知情同意的前提下,记录文档的编辑历史、输入时间分布、粘贴操作频率。结果很有意思:真人独立写作时,输入节奏是断断续续的,写一句停一会儿,反复删改;而AI代写的人在文档里表现为“长时间停顿,然后一次性粘贴大段文本”。单看这个信号不够定罪,但结合文本检测风险分,它能让判断走向变成“很可疑”而非“完全不透明”。
这里要特别声明:创作过程溯源涉及隐私,必须严格遵守知情同意原则,而且不能作为强制要求。我们只在学生事先知晓的在线写作场景里试过,正规立场是它能作为参考信号,绝不能成为监控工具。
4. 部署进真实教学环境后,踩过的坑与误报处理
宏智树AI在实验室里跑得很好,一放到真实教学环境就开始“露怯”。这不是模型带不动,而是真实写作场景的复杂度远超评测集。我挑几个印象最深的坑讲。
4.1 误报重灾区:外语翻译腔、模板写作、短文本
第一种典型误报是翻译风格文本。有学生用中文写了英文论文再翻译回中文,或者反过来,中文学术写作里带着明显欧化长句——这种“翻译腔”的句长变异系数很低、句子结构规整,特别像AI生成的文本特征。我们实测过一批翻译腔作业,误报率飙到了25%以上。后来加了一条规则:先跑一个“是否翻译腔”的辅助分类器,如果概率高就降低AI风险分的权重。
第二种是模板化写作。某些专业(尤其公共管理、法律、教育类)的学生从小就被训练成一种固定论文结构:背景、现状、问题、对策,每段开头必是“当前……存在以下问题”。这些文本的困惑度和句子相似度天然接近AI特征。说实话,遇到这类文章我都很同情——是教育模式先把学生教成了“类AI”。
第三种是短文本。我们规定少于100个字符的文本不出报告,因为特征太少,任何结论都可能是噪声。但总有人想拿一小段话去测“是不是AI写的”,然后得到一个不靠谱的结论。后来我们在前端直接做了拦截提示:短文本请提供完整上下文,否则系统无法判断。
4.2 阈值怎么设才不冤枉人:两级风险区间和人工复核流程
我们初始把“风险分大于等于0.8”设为AI,“0.5到0.8”设为可疑,低于0.5判为正常。这套阈值在评测集上F1值最好看,但一上线就挨骂——某课程老师拿着0.76分的报告去约谈学生,结果那名学生是手工逐字写了两周才写完的,只是文风偏机械。从那以后我们改了原则:阈值只是排序工具,不是裁决工具。
调整后的流程是:
- 系统输出风险分和可疑句段,但报告首页明确加一句话:“该分数仅为初步筛查参考,不构成学术不端结论。”
- 风险分大于等于0.9,且可疑句段连续覆盖全文超过50%时,才建议老师“优先关注”;
- 其余所有“可疑”和部分“高风险”文本,都建议老师先让学生解释写作思路,或者要求提交写作过程草稿,再来判断。
- 低风险文本不再标记,避免给学生贴标签。
这个流程的核心是把机器判断限制在“初筛”这层,把最终判断权交还给教学现场。我们也在报告里加入了“要素解释”,老师点开可疑句段就能看到:这一句困惑度低于全文均值20%、这句与后一句的向量相似度超过0.85、这一段连接词密度超标等等。让老师能自己判断这些特征是否合理,而不是面对一个黑盒结果。
4.3 实践中最重要的提醒:AI工具使用并不等于学术不端
部署期间另一个教训是,我们不能把“用了AI”和“学术不端”直接划等号。现在很多教学场景里,老师允许学生用AI做头脑风暴、修改语法、整理参考文献——这些都是合规的辅助使用。一刀切禁止会逼着学生偷偷摸摸,反而不利于诚信教育。
宏智树AI的报告因此专门加了一个“AI使用类型”标注区分:完全代写(全篇高风险且无人工痕迹)、局部补写(部分段落高风险)、辅助润色(句子层面低危但带有一定AI痕迹)。这个功能虽然不完美,但它把问题从“是不是用了AI”转化为“AI用在了哪个环节”,后者在教学管理层面有用得多。
5. 检测的边界与使用伦理:它应该是起点,不是终点
最后想聊聊宏智树AI留给我的几个反思,这些比技术本身更值钱。
5.1 检测结果不能成为唯一证据
AI文本检测的每一步都建立在概率之上,不是“确定”而是“倾向”。即便目前最好的检测模型,也只能说“这段文本的特征与AI生成文本高度相似”,但“高度相似”不等于“必然由AI生成”。所以拿检测报告直接处罚学生,一定会误伤。合规的用法是把它当作启动对话的线索:老师带着怀疑去和学生交流,学生有机会解释自己的思考和写作过程,即便最终确认是代写,也比单方面定罪要站得住。
我自己最担心的一种趋势是检测系统被当作“学术AI警察”——学生每交一篇作业就过一次系统,风险分过高就零分处理。这不是检测工具的初衷,也会让学生把精力花在“怎么改写才能骗过检测器”上,而不是真正理解学术诚信。宏智树AI项目组内部有一条不成文规定:任何风险分都不能直接转化成处分依据,必须经过教师复核和与学生对话。
5.2 可解释性和知情权是工具信任的地基
老师和学生对检测系统的信任,完全取决于它能不能解释自己的判断。宏智树AI每次给学生出报告前,都会附上一段说明:系统基于统计学特征给出初步筛查结果,所有判断均存在误差,且系统无法区分“AI辅助”与“完全代写”的界限,最终判断权归课程负责老师。我们还在界面里保留了“打印报告给被检测者”的功能,让被怀疑的学生也能看懂——不是“机器说我用了AI”,而是“这五个句子被标记,理由是句长过于均匀、语义相似度过高”。
有一个小细节我觉得值得所有人借鉴:所有高风险判断都要求二次人工确认。系统弹出风险报告后,页面会强制停留至少15秒,提醒老师查看可疑句段并确认后再决定是否约谈学生。这十几秒的停顿虽然微不足道,但它是给“冲动判断”设置的一道缓冲。
5.3 学术诚信教育可能比检测更重要
宏智树AI做了一年多,最大的感受是:检测工具再准,也只能拦住一部分人,拦不住所有意图。真正有效的防线其实是向学生说清楚边界——哪些AI使用是允许的,哪些是禁止的,代写和辅助的边界在哪里。我见过好些次,学生根本不知道自己用AI扩写了一段作业已经越过了课程的红线,因为老师从来没在课堂上讲过AI使用规范。检测工具的效果不应该是让学生害怕,而应该是让规则变得更清晰、更可执行。
我也越来越认同一个判断:未来学术诚信评估不会只靠文本检测,会更倾向于综合写作过程证据——初稿轨迹、资料检索记录、小组讨论记录、学生自己写的反思材料等等。这些“行为证据”比任何统计特征都更能反映真实。宏智树AI更像是一个过渡方案:用自动检测帮老师快速标注风险,再依靠人的沟通与判断做最终决定。
6. 收个尾:做AI检测项目以来,我最想分享的几个教训
写到这里,我想把项目里踩过最深的几个坑浓缩成几句话。
第一,别迷信公开数据集上的准确率。评测集里95%的准确率,到了真实作业文本上很可能只有65%。原因是真实写作的不可控因素太多:方言、翻译腔、写作者的独特习惯、甚至是文档排版都会干扰特征提取。每换一批新的使用对象,必须重采数据、重新校准阈值。
第二,AI检测永远需要一条“人工复核”的兜底路径。系统不能也不需要做到100%,但流程可以做到100%不误伤——只要把人工复核嵌进设计里,把最终判断权留给人类,工具就是帮手而非审判者。
第三,工具做出来是给用户用的,不是给算法炫技的。宏智树AI最后留下的最有用的功能,不是准确的分类模型,而是那套“可疑句段解释系统”。老师不需要知道什么是困惑度,他只需要知道“这里为什么可疑,我要不要去找学生谈谈”。把技术翻译成教学者能理解的判断依据,这东西才真的落地。
最后再分享一个很实际的操作技巧:如果哪位老师想快速评估一篇文本,强烈建议从三件事入手——看句子长度有没有大起大落、看全文有没有过度使用“值得注意的是/此外/综上所述”这类桥接词、看段落与段落之间是自然断裂还是被强行缝合。这三条肉眼就能判断,不需要任何工具。但如果你需要批量筛查、需要留下可比对的记录,那宏智树AI这套“特征提取+段落定位+人工复核”的组合思路,是我目前验证下来最稳健的一套做法。