README / README.md
tccc1's picture
Update README.md
d7bad7f verified
|
Raw History Blame Contribute Delete
10.2 kB
metadata
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 个文件):

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 张):

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 只在固定子集上比