EnhancedReplica Research Repository
这是一个面向 Hugging Face 交付的完整研究资产仓。它不是只放模型权重的模型包,而是把最终模型、内置数据、训练与推理源码、正式结果和研究说明一起整理成了一个可以长期交接和复查的仓库。
At A Glance
- 最终正式系统:
7-voter Logistic Regression Stacking - 最终测试集:
DS13_NLPCC_full_test_v1 - 正式结果:
F1 = 0.986091,Accuracy = 0.986182 - 跨域 bucket ensemble:
DS06: global0.643836-> bucket0.904255DS07: global0.743119-> bucket0.872340
- 仓库同时包含:
- 最终模型资产
- 可直接实验的数据集和原始素材
- 训练与推理脚本
- 研究结论和预测留档
最终系统是什么
最终正式方案是一个 7-voter Logistic Regression Stacking 系统,用于中文机器生成文本检测。
7 个 voter 分别是:
| Voter | 类型 | 作用 |
|---|---|---|
qwen7b_general |
Qwen2.5-7B-Instruct LoRA adapter | 通用文本分支 |
qwen7b_short |
Qwen2.5-7B-Instruct LoRA adapter | 短文本专门化分支 |
qwen7b_extreme_short |
Qwen2.5-7B-Instruct LoRA adapter | 极短文本专门化分支 |
bert |
微调分类模型 | 最终 LR 中权重最高的监督分支 |
roberta |
微调分类模型 | 与 BERT、Qwen 形成互补 |
FastDetectGPT |
零样本检测算法 | 提供生成痕迹分数 |
Binoculars |
零样本检测算法 | 提供另一类生成痕迹分数 |
这里最重要的一点是:FastDetectGPT 和 Binoculars 不是额外训练出来的新分类模型。它们是算法分支,底层都调用同一对 3B 模型:
Qwen2.5-3BQwen2.5-3B-Instruct
因此最终系统本质上是:
- 5 个监督/微调分支特征
- 2 个零样本 detector 特征
- 1 个长度特征
len_norm
共同进入 Logistic Regression stacking。
最终权重如何确定
正式最终系统的权重不是人工拍出来的,也不是探索阶段硬投票脚本里的默认表。正式系统采用以下流程:
- 收集 7 个 voter 在 dev 上的连续分数。
- 追加长度特征
len_norm = length / 1000.0。 - 用
StandardScaler对特征做标准化。 - 用
sklearn.linear_model.LogisticRegression(solver="lbfgs", C=1.0)学出 stacking 系数。 - 在 dev 上搜索最佳 F1 阈值,得到最终二分类阈值。
DS13 正式系统保留的 LR 系数如下:
| Feature | Coefficient |
|---|---|
bert |
2.0188854029 |
qwen7b_general |
1.8788706258 |
roberta |
1.8788624937 |
qwen7b_short |
1.2970493780 |
qwen7b_extreme_short |
0.8596312618 |
FastDetectGPT |
0.2563906985 |
Binoculars |
0.2295749248 |
len_norm |
0.0062348417 |
补充参数:
intercept = 1.6861943699threshold = 0.1307
正式事实来源:
results/final-system/ds13/ensemble_meta.jsonconfigs/ensemble_config.json
分桶策略怎么工作
仓库里同时保留了 global LR 和 bucket LR 两套结果逻辑。分桶定义固定为:
extreme_short = 0-75short = 76-180general = 181+
但要注意,DS13 正式结果虽然保留了 bucket 流程,实际上 3 个桶全部回退到了 global LR,因为 dev 太小:
extreme_short: n_dev = 1short: n_dev = 0general: n_dev = 9
真正体现 bucket 价值的是跨域集:
- DS06:global
F1=0.643836,bucketF1=0.904255 - DS07:global
F1=0.743119,bucketF1=0.872340
这说明 bucket 不是为了展示“复杂方法”而保留的探索残留,而是在 dev 足够时确实能改善跨域表现。
核心结果
DS13 正式最终系统
- 数据集:
DS13_NLPCC_full_test_v1 - 方案:7-voter Logistic Regression Stacking
- 测试集结果:
F1 = 0.986091Accuracy = 0.986182Precision = 0.992448Recall = 0.979815
DS13 子集表现
| Subset | F1 | Accuracy |
|---|---|---|
normal |
0.997505 | 0.997500 |
mixed_attack |
0.962810 | 0.964000 |
paraphrase_attack |
0.979675 | 0.980000 |
perturbation_attack |
0.996000 | 0.996000 |
len_64 |
0.940452 | 0.942000 |
len_128 |
0.982880 | 0.983000 |
len_256 |
0.994995 | 0.995000 |
len_512 |
0.998004 | 0.998000 |
短文本仍然是 hardest case,len_64 是所有正式子集里最弱的一档。这也是为什么仓库里保留了两个长度专门化的 Qwen adapter,而不是只留下一个通用分支。
单模与 detector 参考结果
- Qwen general:DS01 test
F1 = 0.987230 - BERT:DS01 test
F1 = 0.960762 - RoBERTa:DS01 test
F1 = 0.933554 - Qwen short:DS01 test
F1 = 0.926173 - Qwen extreme short:DS01 test
F1 = 0.901213 - FastDetectGPT:DS01 test
F1 = 0.811014 - Binoculars:DS01 test
F1 = 0.742803
这些结果说明零样本 detector 不是最终性能主力,但它们提供的是不同于微调分类器的补充信号,因此最终仍然被纳入 7-voter 方案。
仓库包含什么
.
├── README.md
├── LICENSE
├── requirements.txt
├── data/
├── models/
├── src/
├── scripts/
├── configs/
├── reports/
├── results/
└── docs/
8 个一级部分的定位如下:
data/: 仓库内置数据,包含 5 个可直接实验的数据集和原始素材 / AI 生成文本 / 提示词资产。models/: 最终保留的模型资产,只保留 Qwen adapter,不包含 Qwen 基础模型。src/: 共享 Python 模块,包括voter_registry.py等研究期公共逻辑。scripts/: 训练、评估、推理、集成、跨域实验入口脚本。configs/: 训练、推理和正式集成配置快照。reports/: 训练产物、日志、metrics、manifest、压缩预测文件。results/: 正式研究结果区,专门放最终系统和跨域结论。docs/: 解释文档。主文档面向交接,docs/archive/只做旧材料归档。
先看哪里
正式结果入口
results/final-system/ds13/: DS13 正式 7-voter 结果results/final-system/upstream-voters/ds13/: DS13 七个上游 voter 的逐项输出,用于追溯最终 ensembleresults/final-system/ds01-reference/: DS01 参考 bundle,用来解释 fallback 训练语境results/cross-domain/ds06/: DS06 跨域 bucket ensemble 结果results/cross-domain/ds07/: DS07 跨域 bucket ensemble 结果results/experiment-summaries/: 单模、detector、最终系统的机器可读摘要
快速使用
安装依赖:
pip install -r requirements.txt
查看仓库内置数据清单:
python scripts/train_eval/data_checks/inspect_dataset_distribution.py --dataset_ids DS04,DS06,DS07,DS11,DS12 --smoke
运行 BERT / RoBERTa 推理:
python scripts/inference/infer_bert_roberta.py --dataset DS06_External_core_balanced_v1
运行 Qwen adapter 推理:
export QWEN_BASE_MODEL_PATH=/path/to/Qwen2.5-7B-Instruct
python scripts/inference/infer_qwen_adapters.py --dataset DS06_External_core_balanced_v1
运行零样本 detector:
python scripts/inference/run_zero_shot_detectors.py --dataset DS06_External_core_balanced_v1
外部依赖边界
如果要运行 Qwen adapter 或零样本 detector,需要你自行准备外部基础模型:
- Qwen adapter 需要
Qwen2.5-7B-Instruct - FastDetectGPT / Binoculars 需要
Qwen2.5-3B与Qwen2.5-3B-Instruct
本仓库更强调“研究资产完整交付”和“最终系统可解释”,而不是“把所有外部依赖也一并打包进仓”。
仓库没有什么
- Qwen 基础模型权重
- 公网 benchmark 的原始下载包本体
- 把
voter_registry.py中探索期硬投票默认值当成正式最终权重的理由 - 承诺当前目录下一键重跑全部历史实验的运行环境
License And Use
本仓库采用 EnhancedReplica Research Asset License,见 LICENSE。
这是一个保守的研究资产授权口径,原因很简单:仓库里同时包含代码、模型资产、结果留档和混合来源的数据材料,不适合直接套一个过于宽松的统一开源许可证。
你可以把它理解为:
- 允许:研究、教学、论文复核、内部评测、方法复现、非商业参考
- 不允许:未经许可的商业化使用、对外托管服务部署、将原始数据素材整体镜像再分发、绕过上游许可和来源平台条款使用资产
如果后续你希望把“代码子集”单独拆出来走标准开源许可证,例如 Apache-2.0,我们也可以再额外整理一个 code-only 子仓。
Model tree for LUCIFerace/enhanced-replica-model-pack
Base model
Qwen/Qwen2.5-3B