File size: 13,278 Bytes
8305a48 a601c68 8305a48 a601c68 fa8ce53 5aaaf05 fa8ce53 5aaaf05 fa8ce53 5aaaf05 fa8ce53 a601c68 7bd5b3a a601c68 fa8ce53 a601c68 fa8ce53 5aaaf05 fa8ce53 5aaaf05 fa8ce53 a601c68 5aaaf05 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 fa8ce53 a601c68 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 | ---
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> |