# 中文文章人机写作分类器 **Repository Path**: az13js/aidetect-zh ## Basic Information - **Project Name**: 中文文章人机写作分类器 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-30 - **Last Updated**: 2026-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 中文文章「人写 / 机器写」分类器 仓库路径 `aidetect-zh`,Python 包名 `aidetect`。 一次完整的实证实验:用中文新闻语料训练一个二分类器,判断一篇文章更可能出自人类作者还是大语言模型;再根据它学到的差异,写一份让 AI 写得更像人写的提示词,并验证这份提示词到底有没有用。 任务与约束来自 [prompt.txt](prompt.txt):只能在本目录内工作、依赖走国内镜像、代码要工程化并有单元测试、术语要规范。 ## 结论速览 - 在同题配对(同一个标题下的人类文章与 AI 文章)且抹平排版的数据集上,测试集(84 篇)准确率 **0.988**,AI 召回 0.979,假阳性率 **0.000**;独立留出的同题配对全集(187 篇)准确率 0.979。 - 同一个分类器换到 HC3-Chinese(问答体裁、ChatGPT 生成)上,准确率跌到 **0.487**,AI 召回 0.063。跨体裁、跨生成器基本失效。 - 只用手工特征(不含任何 n-gram)也能到 0.952。1.000 与 0.988 之间的差距,几乎全部来自排版(见 [docs/experiment-log.md](docs/experiment-log.md) 第 5 节)。 - 差异最大的特征不是「高级词汇」,而是句号密度、超长句比例、括号密度、数字密度和虚词习惯——见 [reports/feature_analysis.md](reports/feature_analysis.md)。 - 按这些证据写成的提示词把分类器判定从「100% 机器」压到「3.3% 机器」,但特征层面的对比显示它并没有让文本更像人写:详见 [docs/prompt-evaluation.md](docs/prompt-evaluation.md)。 - 完整文章:[article/final.md](article/final.md);提示词:[prompts/human-like-writing-prompt.md](prompts/human-like-writing-prompt.md)。 ## 目录结构 src/aidetect/ Python 包 normalize.py 文本规范化(只清格式噪声,不动风格;含抹平排版) segmentation.py 段落/句子/词切分 features/ 八个特征块:字 n-gram、词 n-gram、功能词、标点、 句长、段落、词汇丰富度、话语标记与具体性 corpus.py 语料读取、去重、分层切分、整组切分 model.py 特征管道组装、模型持久化 evaluate.py 指标、自助法置信区间、分组交叉验证 analysis.py 效应量、模型系数、带先验的对数几率比 cli.py 命令行入口 scripts/ 数据采集与生成脚本(Node + Python) tools/ 依赖引导下载器、HTTP 工具、OpenCode 相关探针 tests/ 58 个自动化测试(其中 1 个是端到端测试) docs/ 调研笔记、实验日志、提示词评测 reports/ 评估、消融、特征分析结果(由命令生成) article/ 文章初稿与终稿 prompts/ 提示词与基线模板 data/ 语料(不入库,可由脚本重建) models/ 训练产物 AGENTS.md 给编码代理的仓库约定(命令、测试要求、实验设计约束、已知坑) ## 复现步骤 make env # 安装依赖(清华镜像) make test # 单元测试 node scripts/fetch_data.mjs <名称>= ... # 下载语料(见 docs/experiment-log.md) node scripts/generate_ai_articles_api.mjs --concurrency 6 # 生成 AI 语料 make data && make train && make evaluate && make explain && make ablation node scripts/generate_prompt_eval.mjs --arm baseline --prompt-file prompts/baseline.md node scripts/generate_prompt_eval.mjs --arm optimized --prompt-file prompts/human-like-writing-prompt.md .venv/bin/python scripts/analyze_prompt_eval.py 推理服务的连接参数从环境变量(AIGC_BASE_URL、AIGC_API_KEY、AIGC_MODEL)或 opencode 配置文件读取,仓库里不含任何凭据。 ## 环境 Python 3.10 + scikit-learn 1.7.2 + jieba 0.42.1;Node 24 负责数据采集与调用推理服务生成文本。本机没有系统 pip,仓库内提供了不依赖 pip 的引导下载器 tools/fetch_wheels.mjs。 ## 语料的标签依据 THUCNews 采集于 2005-2011 年,按「2021 年及以前发表的文章由人类撰写」这一前提作为人类文本;AI 文本由 deepseek-v4.1-flash 生成(398 篇),另有 30 篇经 OpenCode 路径生成作对照;HC3-Chinese 用作跨体裁、跨生成器的外部检验集。详细记录见 [docs/experiment-log.md](docs/experiment-log.md)。 ## 许可 代码以 [MIT 许可证](LICENSE) 发布。文章与文档(`article/`、`docs/`)建议按 CC BY 4.0 引用。 `data/`、`models/` 下的语料与模型不随仓库分发:THUCNews 与 HC3 的版权归各自出处,需要时请按 `docs/experiment-log.md` 里的地址自行下载后重跑流水线。