|
Download README.md from CISC7402/README: direct link, hf CLI and curl.
- Browser
- Download file 13.3 kB
-
https://huggingface.co/spaces/CISC7402/README/resolve/main/README.md
- Command line
-
hf download hf://spaces/CISC7402/README/README.md
-
curl -L -o README.md https://huggingface.co/spaces/CISC7402/README/resolve/main/README.md
13.3 kB
| title: 自一致性与多数投票的收益边界研究 | |
| emoji: 📊 | |
| colorFrom: blue | |
| colorTo: indigo | |
| sdk: static | |
| pinned: false | |
| # 📊 LLM 自一致性与多数投票的收益边界研究 | |
| > **CISC 7402 — Mathematics for Artificial Intelligence 课程项目** | |
| > **团队规模**:2 人 | **展示截止**:11月18日 | **当前状态**:🟢 实验执行中 | |
| ## 🔍 研究问题 | |
| 大语言模型在单次生成时具有随机性。自一致性(Self-Consistency)通过采样多条推理路径并**多数投票**来提升准确率,但这并非免费的午餐:采样规模扩大带来计算成本的线性增长,而准确率增益可能边际递减;温度升高虽增加多样性,却可能引入更多错误。 | |
| 本项目(基于 GSM8K 数据集与 Qwen2.5-7B 模型)旨在量化回答以下三个核心问题: | |
| 1. **主效应**:多数投票(T=0.6, N=20)相对贪心解码(Greedy)的真实净增益是多少? | |
| 2. **收益边界**:准确率增益随采样次数(N)和温度(T)如何变化? | |
| 3. **置信度代理**:早期投票的一致性(c₅)能否有效预测“是否值得继续采样”? | |
| --- | |
| ## 👥 分阶段双轨并行工作安排 | |
| 为了保证在 11.18 前交付高质量的可演示版本,本项目采用**“双轨并行、阶段推进、交叉验收”**的敏捷协作模式。我们将 2 周时间划分为三个明确的阶段,两人各自负责一条独立产出线,在关键节点进行成果汇总与强制验证。 | |
| ### 🟢 阶段 0:基建与冻结(D1 - D5) | |
| **核心目标**:跑通全链路,锁定实验参数,消除后期返工风险。 | |
| - **管线轨(成员 A)**: | |
| - 搭建环境与加载 Qwen2.5-7B 模型。 | |
| - 完成 dev 30 / test 100 数据抽样,并生成冻结快照 `ids.json`。 | |
| - 跑通 Pilot 实验,验证解析失败率 < 10% 且截断率 < 5%。 | |
| - 编写并测试核心生成脚本 `gen.py`(验证断点续跑机制)。 | |
| - **产出**:`ids.json`、`pilot.parquet`、可运行的 `gen.py`。 | |
| - **分析轨(成员 B)**: | |
| - 梳理文献矩阵,明确对比基线。 | |
| - 编写 `metrics_spec.md`,严格定义 C/D 分解、c₅ 分层、配对 Bootstrap 的数学口径。 | |
| - 使用 Pilot 假数据跑通 `analyze.py` 与 `plots.py` 骨架。 | |
| - **产出**:`metrics_spec.md`、分析脚本骨架。 | |
| - **🔒 阶段交汇(D5 参数冻结)**: | |
| - 双方逐条核对 `config.py` 与 `metrics_spec.md`,确认无误后生成 `frozen.json` 并签字。 | |
| - **纪律要求**:此后 test 集正式开跑,**任何参数(T、N、Prompt)一律不准修改**。 | |
| ### 🟡 阶段 1:全量生成与前置写作(D6 - D9) | |
| **核心目标**:完成 12,100 次全量生成,同时并行推进报告前置章节,确保主结果绝对可验证。 | |
| - **管线轨(成员 A)**: | |
| - 启动正式生成(优先跑 T=0.6 的全部 2 流),监控运行状态。 | |
| - 跑完后合并分片,输出统一的原始数据格式 `raw.parquet` 及管线内部主统计 `main_stats_A.csv`。 | |
| - 生成计算成本统计表 `cost.csv`。 | |
| - **产出**:`raw.parquet`、`cost.csv`、`main_stats_A.csv`。 | |
| - **分析轨(成员 B)**: | |
| - 并行撰写报告 Method、Setup 与 Related Work 草稿。 | |
| - 编写独立复算脚本 `recompute.py`。 | |
| - **产出**:报告前置章节草稿、`recompute.py`。 | |
| - **🔒 阶段交汇(D9 独立复算与数据对齐)**: | |
| - 管线轨交付 `raw.parquet`;分析轨在 24 小时内运行独立脚本复算主结果指标(Greedy Acc, C 数, D 数)。 | |
| - **纪律要求**:双方产出数值必须逐项比对完全一致(容差 `1e-6`)。**验证通过后**,才能解锁后续的统计分析阶段;不一致则必须停下排查解析或合并逻辑。 | |
| ### 🔴 阶段 2:可靠性分析与产出整合(D10 - D14) | |
| **核心目标**:将数据转化为统计结论与可视化图表,并行完成报告组装与最终排练。 | |
| - **分析轨(成员 B)**: | |
| - 运行完整 `analyze.py`,产出主比较区间、增量表、c₅ 分层与敏感性分析。 | |
| - 绘制三张核心主图(准确率曲线、C/D 堆叠、c₅ 分组)。 | |
| - 撰写 Results 与 Discussion 主体。 | |
| - **产出**:`tables/`、`figs/`、报告初稿。 | |
| - **管线轨(成员 A)**: | |
| - 整理失败率与计算成本附表。 | |
| - 审核报告中的实验设置与成本段落。 | |
| - 编写演示文稿中的管线与工程细节页;协助排查错例。 | |
| - **产出**:成本/失败率附表、演示实验页。 | |
| - **🤝 阶段交汇(D13 结论边界)**: | |
| - 两人基于各自的视角,共同撰写“能说/不能说”段落,防止过度推断。 | |
| - **最终定稿(D14)**: | |
| - 两人联合排练 15 分钟展示,**此后不再修改任何内容**,准备 11.18 答辩。 | |
| --- | |
| ## 🛠️ 实验设计锁定 (Scope Lock) | |
| 为了确保 2 周内交付确定性结果,对实验规模进行了如下锁定(暂定): | |
| | 维度 | 设定值 | 说明 | | |
| | :--- | :--- | :--- | | |
| | **模型** | Qwen2.5-7B-Instruct | 仅跑 7B,3B 作为后续扩展 | | |
| | **数据集** | GSM8K (Test 100 题) | dev 30 题用于 Pilot 验证 | | |
| | **温度 (T)** | {0.3, 0.6, 0.9} | 覆盖低、中、高随机性 | | |
| | **采样数 (N)** | {1, 5, 10, 20} | 观测边际递减,去掉 N=3 | | |
| | **独立流** | 2 Streams | 满足配对 Bootstrap 需求 | | |
| | **总生成量** | **12,100 次** | 100×3×2×20 + 100 (Greedy) | | |
| --- | |
| ## 📂 代码结构(按双轨并行划分) | |
| ```text | |
| project/ | |
| ├── config.py # [全局] 唯一真源:参数配置、种子规则 | |
| ├── common.py # [全局] 提示构造 / 答案抽取 / 投票逻辑 | |
| │ | |
| ├── 【管线轨代码】 ────────── | |
| ├── gen.py # [阶段1] 正式生成:网格调度 + 断点续跑 | |
| ├── merge.py # [阶段1] 合并分片 + 生成成本统计 | |
| ├── degrade.py # [应急] 超时/失败降级预案 | |
| │ | |
| └── 【分析轨代码】 ────────── | |
| ├── recompute.py # [阶段1] 独立复算:交叉验证管线数据正确性 | |
| ├── analyze.py # [阶段2] C/D 分解 / c5 分层 / Bootstrap | |
| └── plots.py # [阶段2] 三张核心主图绘制 | |
| --- | |
| ## 📌 交付标准与验收清单 | |
| 本项目不仅追求统计结果,更注重过程的可复现性与工程严谨性。围绕三个阶段的推进,11 月 18 日的最终提交必须包含以下交付物,并逐项完成验收: | |
| ### 1. 阶段 0 产出:基线与冻结规范 | |
| - [ ] **参数冻结快照**:包含 `ids.json`(Data Split)与 `frozen.json`(Prompt、T、N、Seed 等全局参数)。 | |
| - [ ] **统计口径规范**:包含 `metrics_spec.md`(C/D 分解、c₅ 分层边界、Bootstrap 实现口径),且双方已签字确认。 | |
| ### 2. 阶段 1 产出:原始数据与交叉验证 | |
| - [ ] **原始数据仓库**:完整的 `raw.parquet`(约 2400 行),无重复、无遗漏。 | |
| - [ ] **独立复算记录**:包含 `recompute.py` 脚本及 `handoff2.md` 签字,证明分析轨在独立环境下复算的 Greedy Acc、C 数、D 数与管线轨产出**完全一致(容差 1e-6)**。 | |
| - [ ] **成本与失败率**:`cost.csv` 记录了各配置的 Token 消耗与解析失败率。 | |
| ### 3. 阶段 2 产出:统计分析结果 | |
| - [ ] **主比较区间**:提供点估计与 95% 配对 Bootstrap 置信区间(基于 2000 次重采样)。 | |
| - [ ] **增量分析**:展示相邻 N 的增量表(明确标注间距不均),并绘制三温度下的准确率曲线。 | |
| - [ ] **C/D 分解**:清晰报告 \(C_N\)(纠错数)与 \(D_N\)(损害数),并绘制堆叠柱状图。 | |
| - [ ] **一致性分层**:展示 \(c_5\) 三层分组(低/中/高)的组内样本量 \(n\)、N=5→20 的增益与区间(若 \(n<30\) 需标注“不稳定”)。 | |
| - [ ] **敏感性分析**:提供“无效票计入分母”条件下的 \(c_5\) 对比附表。 | |
| ### 4. 最终报告与演示 (Final Report & Presentation) | |
| - [ ] **报告格式**:严格使用 ICLR 2027 MT_E 模板,正文控制在 **≤9 页**(附录不限)。 | |
| - [ ] **差异声明**:包含“与 Proposal 的差异”说明(如:因时间约束,测试集降至 100 题,可检出效应约 ≥7pp)。 | |
| - [ ] **附录规范**:包含核心代码骨架、指标公式汇总、成员贡献声明、AI 工具使用声明。 | |
| - [ ] **演示材料**:15 分钟的高质量展示(含三张核心主图 + 一页“没发现什么”的负结果/边界声明)。 | |
| --- | |
| ## 🛡️ 核心代码示例:跨轨独立复算 (Cross-Track Validation) | |
| 为了打破“一人跑数据、一人写报告”的串行反模式,本项目在**阶段 1 末尾(D9)**设置了强制验证点。**分析轨必须使用独立的 `recompute.py` 从底层原始数据重新计算主结果,与管线轨的产出逐项比对,一致后方可解锁阶段 2 的正式分析。** | |
| ```python | |
| # recompute.py - 由分析轨独立编写与执行(不 import 管线轨的分析代码) | |
| import pandas as pd | |
| import config as C | |
| def verify_main_results(): | |
| # 1. 分析轨独立读取底层数据 | |
| df = pd.read_parquet(C.RAW_PARQUET) | |
| # 2. 独立计算核心指标 | |
| greedy_acc = df.drop_duplicates("qid").greedy_correct.mean() | |
| main_df = df[(df.T == C.MAIN_T) & (df.N == C.MAIN_N)] | |
| main_acc = main_df.correct.mean() | |
| C_count = int(((~main_df.greedy_correct) & main_df.correct).sum()) | |
| D_count = int((main_df.greedy_correct & (~main_df.correct)).sum()) | |
| # 3. 与管线轨的产出一一比对 | |
| ref = pd.read_csv(C.MAIN_STATS_A).iloc[0] | |
| checks = { | |
| "greedy_acc": (greedy_acc, ref.greedy_acc), | |
| "main_acc": (main_acc, ref.main_acc), | |
| "C": (C_count, int(ref.C)), | |
| "D": (D_count, int(ref.D)) | |
| } | |
| # 4. 强制一致性校验(不通过则阻断流水线,进入阶段 2) | |
| for k, (v, r) in checks.items(): | |
| assert abs(float(v) - float(r)) < 1e-6, f"{k} 数值不一致!管线轨={r}, 分析轨={v}" | |
| print("✅ [阶段 1 闸门通过] 独立复算成功,数据一致性校验通过,解锁阶段 2。") | |
| if __name__ == "__main__": | |
| verify_main_results() | |
| ``` | |
| --- | |
| ## 📅 项目时间线 (三阶段冲刺计划) | |
| 为了确保在 11.18 前交付高质量的版本,团队采用“三阶段”并行推进,并在关键节点设立硬闸门: | |
| - **[阶段 0] 基建与冻结 (11.04 - 11.08)**: | |
| - 11.04 - 11.05:环境搭建、数据抽样冻结、文献矩阵梳理。 | |
| - 11.06 - 11.07:Pilot 测试跑通,分析脚本骨架联调。 | |
| - **11.08 (硬闸门 1)**:双方签字确认 `frozen.json` 与 `metrics_spec.md`,**此后 test 集正式开跑,参数一律不准改**。 | |
| - **[阶段 1] 生成与验证 (11.09 - 11.12)**: | |
| - 11.09 - 11.11:管线轨启动全量生成(优先跑 T=0.6),分析轨撰写 Method/Setup 草稿。 | |
| - **11.12 (硬闸门 2)**:管线轨交付 `raw.parquet`;分析轨 24h 内跑通独立复算,**数值不一致不推进**。 | |
| - **[阶段 2] 分析与交付 (11.13 - 11.17)**: | |
| - 11.13 - 11.15:输出四件套(主比较、增量、C/D、c₅),完成三图绘制与报告主体。 | |
| - **11.16 (硬闸门 3)**:共同撰写“能说/不能说”的 Discussion 边界。 | |
| - **11.17 (最终定稿)**:15 分钟展示排练,设备检查。**此后不再修改任何内容**。 | |
| - **[D-Day] 项目展示 (11.18)** 🎯 | |
| --- | |
| ## 📜 学术规范与声明 (Academic Integrity) | |
| 作为课程项目的重要组成部分,本项目严格遵守学术规范,并在最终报告中作如下声明: | |
| ### 成员贡献声明 (CRediT) | |
| 本项目采用三阶段双轨并行模式,两位成员对项目成功做出了同等贡献: | |
| - **成员 A (管线轨)**:负责阶段 0 的环境搭建与参数冻结;负责阶段 1 的 12,100 次生成任务调度、断点续跑与原始数据落盘;负责阶段 2 的工程细节段落撰写;参与结论边界撰写。 | |
| - **成员 B (分析轨)**:负责阶段 0 的评估口径约定;负责阶段 1 的前置章节撰写;负责阶段 2 的 C/D 分解、c₅ 分层、Bootstrap 区间计算与图表绘制。**并在阶段 1 末尾建立独立复算脚本,对管线数据执行强制交叉验证**。 | |
| - **共同承担**:研究问题定义、主比较口径决策、各阶段交汇点签字、结论边界撰写、报告交叉互审与最终排练。 | |
| ### AI 工具使用声明 (AI Usage) | |
| 本项目在以下环节使用了生成式 AI 工具辅助: | |
| 1. **环境与样板代码**:辅助生成数据加载、绘图模板代码,核心实验逻辑(随机种子设置、投票逻辑)由成员独立设计并逐行审查。 | |
| 2. **文本润色**:辅助对报告草稿的段落衔接与英文表述提出修改建议,全部研究结论、实验分析与局限性讨论均由团队成员独立完成。 | |
| 3. **数据完整性**:**未在任何环节使用 AI 工具伪造、生成或改写实验数据**。所有数值结果均可由仓库内代码与公开的原始记录文件复现。 | |
| --- | |
| <div align="center"> | |
| <p><b>CISC 7402 - Mathematics for Artificial Intelligence</b></p> | |
| <p>© 2026 Team Self-Consistency. All Rights Reserved.</p> | |
| </div> |