|
Download README.md from cisc7021/README: direct link, hf CLI and curl.
- Browser
- Download file 10.2 kB
-
https://huggingface.co/spaces/cisc7021/README/resolve/main/README.md
- Command line
-
hf download hf://spaces/cisc7021/README/README.md
-
curl -L -o README.md https://huggingface.co/spaces/cisc7021/README/resolve/main/README.md
10.2 kB
| title: README | |
| emoji: 🚀 | |
| colorFrom: yellow | |
| colorTo: purple | |
| sdk: static | |
| pinned: false | |
| # stage2 各任务说明 | |
| ## 任务一:RoBERTa 校准(成员 2) | |
| **输入什么** | |
| 1. `/pred_roberta_{val,test_id,test_ood}.csv`(三列`id,label,p_ai`,只读) | |
| 2. `/metrics.py` + 校准 notebook(`/calibrater.ipynb`)流程 | |
| **要做什么** | |
| 1. `RUN="fit"`:只用 val → 拟合温度 T → 在校准 val 上选 tau_fpr5 / tau_f1 → 选 t → 冻结 | |
| 2. `RUN="apply"`:冻结参数应用到三个 split,绝不重选 | |
| 3. AUROC 校准前后必须一致(单调变换) | |
| **输出什么**(= 本目录现有 7 个文件) | |
| - `thresholds.json`(roberta 条目)、3 份 `pred_roberta_*_calibrated.csv`(新增 `p_ai_calibrated` 列,原始列不覆盖)、`metrics_roberta_binary.csv`(9 行)、`metrics_roberta_three_way.csv`(3 行)、`middle/diagnostics_roberta_abstention.csv`(51 行扫描,自查不交付) | |
| --- | |
| ## 任务二:TF-IDF 校准(成员 1,复用calibrate.ipynb) | |
| **输入什么** | |
| 1. `pred_tfidf_{val,test_id,test_ood}.csv`(三列 `id,label,p_ai`) | |
| 2. 校准流程代码(`calibrate.ipynb`)+ `metrics.py` | |
| **要做什么** | |
| 1. `RUN="fit"`:只用 val → 拟合 TF-IDF 自己的 T → 在校准 val 上选自己的 tau_fpr5/tau_f1 → 选自己的 t | |
| 2. `RUN="apply"`:把冻结参数应用到三个 split,绝不重选 | |
| 3. AUROC 校准前后必须一致;ECE/Brier 记录变化 | |
| **输出什么** | |
| - `pred_tfidf_{val,test_id,test_ood}_calibrated.csv` | |
| - `metrics_tfidf_binary.csv`(9 行)、`metrics_tfidf_three_way.csv`(3 行) | |
| - `thresholds.json` 新增 `tfidf` 条目(TF-IDF 自己的 T/tau/t,不共用 RoBERTa 的参数) | |
| --- | |
| ## 任务三:Qwen 零样本/少样本校准(成员 3,复用calibrate.ipynb) | |
| **输入什么** | |
| 1. Qwen 在 val/test 上的预测(零样本、少样本**两个版本分开**,各一套 `id,label,p_ai`) | |
| 2. 校准流程代码 + `../metrics.py` | |
| 3. 固定 200 条平衡子集(成员 1 已产出) | |
| **要做什么** | |
| 1. 两个版本各自走一遍与任务一相同的 fit → apply 流程,参数不能共用、结果不能混 | |
| 2. 零样本/少样本分别记录到 thresholds.json 的 `qwen_zeroshot` / `qwen_fewshot` 条目 | |
| 3. 所有指标结论注明"固定 200 条人工平衡子集,小样本限定" | |
| **输出什么** | |
| - `pred_qwen_zeroshot/` 和 `pred_qwen_fewshot/` 两个版本的 calibrated 预测与两张 metrics 表 | |
| - thresholds.json 新增 `qwen_zeroshot`、`qwen_fewshot` 两个条目 | |
| **已知卡点**:目前成员 1 的子集只从 test_id 抽,**Qwen 没有 val 预测,fit 没原料**——需先确认是否补跑一份 val 预测(可同为固定子集),并同步全组口径。 | |
| --- | |
| ## 任务四:FP/FN 错误分析(成员 2) | |
| **输入什么** | |
| 1. `pred_roberta_test_id_calibrated.csv`、`pred_roberta_test_ood_calibrated.csv` → 取 `p_ai_calibrated` 列 | |
| 2. `thresholds.json` → 取 `tau_fpr5`(本条目 = 0.994) | |
| 3. `/dataset/test_id.csv`、`test_ood.csv` → 取 `text_hash, text, label, source`(按 `id = text_hash` join) | |
| 4. `metrics_roberta_binary.csv` → `calibrated + tau_fpr5` 行的 tn/fp/fn/tp(test_id 5170/6/2/2513,test_ood 1172/74/4/1301),用于对账 | |
| **要做什么** | |
| 1. 对两个 split 各自:join dataset → 用 `tau_fpr5` 标误判 → 与 metrics 表逐格核对(不一致直接报错,不准继续算) | |
| 2. 按三个维度汇总:`source`(领域)、`len(text)`(字符长度桶)、以及全部 FP 明细 | |
| 3. FP 并非只挑典型,全部收录(共 80 条) | |
| **输出什么** | |
| - 同目录三张表:`fp_by_domain.csv`(各领域样本数/FPR/FNR)、`fp_by_length.csv`(各长度桶样本数/human-FPR)、`fp_cases.csv`(全部 FP,待人工填归因) | |
| --- | |
| ## 任务五:三分类 Demo(成员 2) | |
| **输入什么** | |
| 1. RoBERTa 训练产出的 checkpoint 目录(含模型权重) | |
| 2. `thresholds.json` → 取 `T`(=1.81834)和 `t`(=0.5) | |
| 3. 一段或多段待检测文本 | |
| **要做什么** | |
| 1. 文本 → tokenizer(`distilroberta-base`,截断 256 token)→ 模型 → 原始 `p_ai` | |
| 2. 用 `T` 温度校准:`q = sigmoid(logit(p_ai)/T)` | |
| 3. 三分判定:`q < 0.5` → Human;`q > 0.5` → AI;`q == 0.5` → Uncertain(与 metrics.py 边界规则一致) | |
| 4. 不重新拟合任何参数 | |
| **输出什么** | |
| - `stage2/demo.py` 的 `detect(text)` 返回 `(Human/AI/Uncertain, 校准后的 p_ai)` | |
| - 已知现状:`t=0.5` 区间退化,实际上永远不输出 Uncertain(README/报告须如实说明) | |
| --- | |
| ## 任务六:跨模型汇总与 id 对齐(成员 1) | |
| **输入什么** | |
| 1. 各模型的 `pred_*_calibrated.csv`(RoBERTa 由任务一、TF-IDF 由任务二、Qwen 由任务三产出) | |
| 2. 各模型两张 metrics 表 | |
| 3. thresholds.json(四模型条目齐后) | |
| **要做什么** | |
| 1. 按 `id` 把三个模型在同一批样本上的预测对齐;标签不一致/缺 id 直接报错 | |
| 2. 合并 `thresholds.json` 为统一参数文件 | |
| 3. 汇总各模型指标成对比表;对齐后的数据交给成员 3 画图、交给成员 2 做跨模型错误对照(任务七) | |
| **输出什么** | |
| - 统一的 `thresholds.json`(四模型参数全齐) | |
| - 汇总指标对比表 | |
| - 跨模型对齐数据(供错误对照与画图) | |
| --- | |
| ## 任务七:跨模型错误对照(成员 1) | |
| **输入什么** | |
| 1. 任务六产出的按 id 对齐数据(RoBERTa / TF-IDF 在同一批样本上的预测) | |
| 2. 各模型自己的冻结 tau_fpr5(RoBERTa 0.994、TF-IDF 用它 fit 出的值,不得混用) | |
| **要做什么** | |
| 1. 校准口径下各自标出 FP/FN,比较两模型在同一批 id 上的误判异同 | |
| 2. 注意区分:成员 1 的预研 csv(raw 口径、经验阈值 0.8/0.2、只 test_id 10 FP + 9 FN)是早期素材,不作为对照口径 | |
| **输出什么** | |
| - 错误对比补充表/段落(归属阶段三报告) | |
| --- | |
| ## 任务八:终版绘图(成员 3) | |
| **输入什么** | |
| 1. 各模型 `pred_*_calibrated.csv`(raw 与 calibrated 两列概率都要用) | |
| 2. 各模型两张 metrics 表(混淆矩阵直接取 tn/fp/fn/tp,不重算) | |
| 3. thresholds.json(图上标注所用参数) | |
| 4. Qwen 固定 200 条子集 id | |
| **要做什么** | |
| 1. 混淆矩阵:2×2 二分类 + 2×3 三分类,数据直接取 metrics 表 | |
| 2. 校准图:按概率分桶画 raw 与 calibrated 对比曲线,每桶标注样本数 n | |
| 3. 风险—覆盖率曲线:用 three_way 表(或续算)画 coverage 与 decided_acc,标出参考点 | |
| 4. Qwen 所有图基于 200 条人工平衡子集,图注写明小样本限定 | |
| **输出什么** | |
| - `figures/confusion_*.png`(2×2 与 2×3) | |
| - `figures/calibration_*.png`(对角线 + raw/calibrated 对比 + 每 bin n) | |
| - `figures/risk_coverage.png`(模型对比与参考点) | |
| - 绘图代码:`stage2/plots.py` 或 notebook | |
| --- | |
| ## 任务九:交付目录对齐 | |
| `stage2/`(共 24 个文件): | |
| ```text | |
| runs/stage2/ | |
| ├── thresholds.json # 四模型参数齐全 | |
| ├── pred_roberta_val_calibrated.csv # 成员 2:RoBERTa 校准预测 | |
| ├── pred_roberta_test_id_calibrated.csv | |
| ├── pred_roberta_test_ood_calibrated.csv | |
| ├── metrics_roberta_binary.csv # 9 行 | |
| ├── metrics_roberta_three_way.csv # 3 行 | |
| ├── pred_tfidf_val_calibrated.csv # 成员 1:TF-IDF 校准预测 | |
| ├── pred_tfidf_test_id_calibrated.csv | |
| ├── pred_tfidf_test_ood_calibrated.csv | |
| ├── metrics_tfidf_binary.csv | |
| ├── metrics_tfidf_three_way.csv | |
| ├── pred_qwen_zeroshot_val_calibrated.csv # 成员 3:Qwen 零样本 | |
| ├── pred_qwen_zeroshot_test_id_calibrated.csv | |
| ├── pred_qwen_zeroshot_test_ood_calibrated.csv | |
| ├── metrics_qwen_zeroshot_binary.csv | |
| ├── metrics_qwen_zeroshot_three_way.csv | |
| ├── pred_qwen_fewshot_val_calibrated.csv # 成员 3:Qwen 少样本 | |
| ├── pred_qwen_fewshot_test_id_calibrated.csv | |
| ├── pred_qwen_fewshot_test_ood_calibrated.csv | |
| ├── metrics_qwen_fewshot_binary.csv | |
| ├── metrics_qwen_fewshot_three_way.csv | |
| ├── fp_by_domain.csv # 成员 2:错误分析三张表 | |
| ├── fp_by_length.csv | |
| ├── fp_cases.csv | |
| └── code/ # 代码交付(源文件仍在 src/ 相应位置,此处为镜像) | |
| ├── demo.py # 成员 2:三分类 Demo,detect(text) 判定+校准概率 | |
| ├── test_demo.py # 成员 2:Demo 纯逻辑测试(pytest) | |
| ├── README_demo.md # 成员 2:Demo 用法/参数/已知限制 | |
| ├── plots.py # 成员 3:绘图代码(或画图 notebook) | |
| ├── calibrate.ipynb # 成员 2:共享校准流程(成员 1/3 复用的那份) | |
| └── metrics.py # 全组唯一指标入口(复现指标所必需) | |
| ``` | |
| `figures/`(共 13 张): | |
| ```text | |
| figures/ | |
| ├── confusion_binary_roberta.png # 2×2 混淆矩阵,每模型一张 | |
| ├── confusion_binary_tfidf.png | |
| ├── confusion_binary_qwen_zeroshot.png | |
| ├── confusion_binary_qwen_fewshot.png | |
| ├── confusion_threeway_roberta.png # 2×3 混淆矩阵(含 Uncertain 列) | |
| ├── confusion_threeway_tfidf.png | |
| ├── confusion_threeway_qwen_zeroshot.png | |
| ├── confusion_threeway_qwen_fewshot.png | |
| ├── calibration_roberta.png # 校准图:raw vs calibrated + 每桶 n | |
| ├── calibration_tfidf.png | |
| ├── calibration_qwen_zeroshot.png | |
| ├── calibration_qwen_fewshot.png | |
| └── risk_coverage.png # 风险—覆盖率曲线(模型对比 + 参考点) | |
| ``` | |
| --- | |
| ## 附:通用红线 | |
| 1. 一切判定只用 `p_ai_calibrated`,不用 `p_ai` | |
| 2. 一切阈值/温度只从 thresholds.json 读,val 定参数,test 只应用 | |
| 3. 指标只调 `../metrics.py`,任何人不得自算另写口径 | |
| 4. 各模型参数独立(各自的 T/tau/t),跨模型比较按 id 对齐,Qwen 只在固定子集上比 | |