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: global 0.643836 -> bucket 0.904255
    • DS07: global 0.743119 -> bucket 0.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 零样本检测算法 提供另一类生成痕迹分数

这里最重要的一点是:FastDetectGPTBinoculars 不是额外训练出来的新分类模型。它们是算法分支,底层都调用同一对 3B 模型:

  • Qwen2.5-3B
  • Qwen2.5-3B-Instruct

因此最终系统本质上是:

  • 5 个监督/微调分支特征
  • 2 个零样本 detector 特征
  • 1 个长度特征 len_norm

共同进入 Logistic Regression stacking。

最终权重如何确定

正式最终系统的权重不是人工拍出来的,也不是探索阶段硬投票脚本里的默认表。正式系统采用以下流程:

  1. 收集 7 个 voter 在 dev 上的连续分数。
  2. 追加长度特征 len_norm = length / 1000.0
  3. StandardScaler 对特征做标准化。
  4. sklearn.linear_model.LogisticRegression(solver="lbfgs", C=1.0) 学出 stacking 系数。
  5. 在 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.6861943699
  • threshold = 0.1307

正式事实来源:

  • results/final-system/ds13/ensemble_meta.json
  • configs/ensemble_config.json

分桶策略怎么工作

仓库里同时保留了 global LR 和 bucket LR 两套结果逻辑。分桶定义固定为:

  • extreme_short = 0-75
  • short = 76-180
  • general = 181+

但要注意,DS13 正式结果虽然保留了 bucket 流程,实际上 3 个桶全部回退到了 global LR,因为 dev 太小:

  • extreme_short: n_dev = 1
  • short: n_dev = 0
  • general: n_dev = 9

真正体现 bucket 价值的是跨域集:

  • DS06:global F1=0.643836,bucket F1=0.904255
  • DS07:global F1=0.743119,bucket F1=0.872340

这说明 bucket 不是为了展示“复杂方法”而保留的探索残留,而是在 dev 足够时确实能改善跨域表现。

核心结果

DS13 正式最终系统

  • 数据集:DS13_NLPCC_full_test_v1
  • 方案:7-voter Logistic Regression Stacking
  • 测试集结果:
    • F1 = 0.986091
    • Accuracy = 0.986182
    • Precision = 0.992448
    • Recall = 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 的逐项输出,用于追溯最终 ensemble
  • results/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-3BQwen2.5-3B-Instruct

本仓库更强调“研究资产完整交付”和“最终系统可解释”,而不是“把所有外部依赖也一并打包进仓”。

仓库没有什么

  • Qwen 基础模型权重
  • 公网 benchmark 的原始下载包本体
  • voter_registry.py 中探索期硬投票默认值当成正式最终权重的理由
  • 承诺当前目录下一键重跑全部历史实验的运行环境

License And Use

本仓库采用 EnhancedReplica Research Asset License,见 LICENSE

这是一个保守的研究资产授权口径,原因很简单:仓库里同时包含代码、模型资产、结果留档和混合来源的数据材料,不适合直接套一个过于宽松的统一开源许可证。

你可以把它理解为:

  • 允许:研究、教学、论文复核、内部评测、方法复现、非商业参考
  • 不允许:未经许可的商业化使用、对外托管服务部署、将原始数据素材整体镜像再分发、绕过上游许可和来源平台条款使用资产

如果后续你希望把“代码子集”单独拆出来走标准开源许可证,例如 Apache-2.0,我们也可以再额外整理一个 code-only 子仓。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for LUCIFerace/enhanced-replica-model-pack

Base model

Qwen/Qwen2.5-3B
Finetuned
(383)
this model