本项目用于区分中文文本是否由 AI 生成,覆盖了句子级和文档级两条任务线,并同时提供了机器学习、深度学习、大模型 LoRA 微调以及多个 baseline 评测脚本。
- 句子级 AI/Human 二分类
- 文档级 AI/Human 二分类
- 支持传统机器学习、RoBERTa、LLM LoRA 微调和零样本 baseline
- 支持本地模型缓存,适合 Windows / AutoDL / 离线环境
- 机器学习基线:TF-IDF + Naive Bayes / 决策树 / 随机森林 / 逻辑回归 / Linear SVM / XGBoost / MLP
- 深度学习分类:中文 RoBERTa 句子或文档分类
- LoRA 微调:文档级与句子级的大模型参数高效微调
- Baseline 评测:Fast-DetectGPT、MPU、DetectLLM-LRR
- 数据处理:句子拆分、分类格式转换、标签修正、数据去重与重平衡
常见格式为 JSONL,每行一个样本:
{"instruction": "你突然发现肚子变大,你父母会作何感想?", "label": "AI"}其中:
instruction:输入文本label:AI或Human
文档级脚本也主要使用同样的 instruction / label 格式,测试集通常放在文档级训练集、域内测试集或域外新闻测试集中。
- Python 3.10+
- CUDA GPU(训练和大模型评测强烈建议)
- PyTorch、Transformers、Datasets、PEFT、scikit-learn 等依赖
pip install torch transformers datasets peft accelerate sentencepiece scikit-learn pandas numpy xgboost joblib tqdm如果你已经在 AutoDL 或 Conda 环境中安装好依赖,只要保证这些核心库可用即可。
BYR/
├─ baseline_eval/ # Fast-DetectGPT / MPU / DetectLLM 等 baseline
├─ doc_ML.py # 文档级机器学习训练脚本
├─ doc_DL.py # 文档级 RoBERTa 训练脚本
├─ doc_level_llm_lora_finetuning.py # 文档级 LLM LoRA 微调脚本
├─ sent_ML.py # 句子级机器学习训练脚本
├─ sent_DL.py # 句子级 RoBERTa / 深度学习脚本
├─ sent_level_llm_lora_finetuning.py # 句子级 LLM LoRA 微调脚本
├─ eval_lora_on_dataset.py # 评测微调后的 LLM
├─ eval_roberta_on_dataset.py # 评测保存好的 RoBERTa 模型
├─ LLM/ # 本地 LLM 缓存目录
├─ RoBERTa/ # 本地 RoBERTa 缓存目录
├─ 句子级数据集/ # 句子级训练 / 测试数据
├─ 文档级训练集/ # 文档级训练数据
├─ 文档级域内测试集/ # 文档级域内测试集
└─ 文档级域外测试集—新闻/ # 文档级域外测试集
项目默认会优先读取仓库里的数据文件。如果你的文件名不同,可以在脚本顶部修改路径。
常见数据路径包括:
句子级数据集/训练集/分类格式_训练集_单句_更多_去重后_更多model.jsonl句子级数据集/测试集/分类格式_测试集_单句_多一点_去重后.jsonl文档级域外测试集—新闻/human-ai-news-pairs.jsonl
python doc_ML.py功能:
- 读取文档级训练 / 验证 / 测试数据
- 训练多个传统机器学习模型
- 保存最佳模型为
model_best.joblib - 保存 TF-IDF 向量器为
tfidf_vectorizer.joblib - 保存各模型训练耗时为
doc_ml_training_times.json
python sent_ML.py功能:
- 从句子级分类格式数据中解析训练 / 测试样本
- 训练多个传统机器学习模型
- 输出验证集与测试集表现
- 保存最佳模型到
sent_ml_output/
python doc_DL.py功能:
- 使用中文 RoBERTa 进行文档级分类
- 自动划分训练 / 验证 / 外部测试集
- 模型和输出保存在本地
roberta_*目录
python sent_DL.py功能:
- 使用深度学习模型完成句子级分类
- 与句子级数据格式兼容
python doc_level_llm_lora_finetuning.py默认会使用本地或缓存中的 OpenBMB/MiniCPM3-4B,并自动适配它的 chat template 和 LoRA 注入层。
python sent_level_llm_lora_finetuning.py适合句子级 AI/Human 分类任务,支持 LoRA、早停和本地缓存。
python eval_lora_on_dataset.py
python eval_roberta_on_dataset.py这两个脚本分别用于评测微调后的 LLM 和保存好的 RoBERTa 分类器。
baseline 统一放在 baseline_eval/ 目录下,配置入口是 baseline_eval/baseline_config.py。
如果你要换测试集、模型缓存位置或输出文件,只需要改这里:
baseline_eval/baseline_config.py
python baseline_eval/eval_fast_detectgpt.py
python baseline_eval/eval_mpu.py
python baseline_eval/eval_detectllm_lrr.py三个 baseline 都会输出:
- 评测指标
- 阈值信息
- 模型来源
- 推理耗时统计
结果会保存到 baseline_eval/results/ 下对应的 JSON 文件。
项目默认会把模型缓存到本地目录,避免写入系统盘:
LLM/:大模型缓存RoBERTa/:RoBERTa 缓存
如果你已经下载好模型,建议直接使用本地路径或缓存 snapshot。
OpenBMB/MiniCPM3-4BQwen/Qwen1.5-0.5B-Chathfl/chinese-roberta-wwm-extyuchuantian/AIGC_detector_zhv3short
项目中比较常见的输出包括:
model_best.joblibtfidf_vectorizer.joblibdoc_ml_training_times.jsonsent_ml_output/roberta_output_local/output/baseline_eval/results/*.json
如果你在别的机器上运行,通常需要检查以下配置:
- 数据路径是否和当前仓库一致
baseline_eval/baseline_config.py里的测试集路径- 本地模型缓存目录
LLM/和RoBERTa/ - GPU 显存是否足够
- 是否需要改成离线模式或指定镜像源
doc_ML.py和doc_DL.py更适合做传统训练 / 对比实验doc_level_llm_lora_finetuning.py更适合做大模型迁移实验baseline_eval/适合做零样本或弱监督基线对比- 如果你只想快速验证流程,建议先跑机器学习脚本和 baseline,再跑 LoRA 微调
本仓库内容主要用于中文 AI 文本检测研究与实验复现。模型权重和第三方数据集请遵循各自的许可证与使用条款。