Files
Mars-RAG-paper/实验设计文档.md
2026-04-02 10:24:22 +08:00

350 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AreoRAG 实验设计文档
> 本文档用于指导后续实验执行。论文中的实验数据为估算值,需要通过以下实验流程获取真实数据后回填。每个实验标注了对应论文中的表格/图编号,方便定位回填位置。
---
## 一、数据集构建
### 1.1 MarsRegion-QA主数据集对应 Table I
**目标**构建一个多源火星空间问答数据集覆盖5个科学重点区域。
**步骤**
1. **数据获取**
- 访问 NASA Mars ODE (https://ode.rsl.wustl.edu/) 下载以下5个区域的观测数据
- Jezero Crater (18.38°N, 77.58°E)
- Gale Crater (5.4°S, 137.8°E)
- Utopia Planitia / 祝融着陆区 (25.1°N, 109.9°E)
- Valles Marineris (中心约 14°S, 294°E)
- Olympus Mons (18.65°N, 226.2°E)
- 每个区域下载HiRISE影像元数据、CTX影像元数据、CRISM光谱立方体元数据、MOLA地形数据
- 祝融号数据从 CNSA 月球与深空探测科学数据与样品管理系统获取
- Curiosity/Perseverance 数据从 PDS Geosciences Node 获取
2. **元数据解析**
- 用 Python 解析 PDS4 XML labels提取字段
- `product_id` → id
- `instrument_id` → $\mathcal{I}$
- `footprint_geometry` (GML) → $\mathcal{P}_{foot}$
- `start_date_time` / `stop_date_time` → $\mathcal{T}_{win}$(再通过 SPICE 转为 $L_s$
- `map_scale` / `pixel_resolution` → $\ell_{res}$
- `spectral_range` → $\mathcal{S}_{band}$
- 工具:`pds4_tools`, `spiceypy`(用于时间转换)
3. **Query 构建**
- 设计 200 个查询分为以下类别每类约40个
- **空间定位查询**:如"Jezero Crater 西部三角洲区域有哪些高分辨率影像?"
- **跨源关联查询**:如"该区域的CRISM矿物检测结果与原位测量是否一致"
- **模糊地理查询**:如"祝融号着陆后前三个月向南行驶路线上的高分影像"
- **时序推理查询**:如"Valles Marineris 北壁在 MY34 沙尘暴前后的地貌变化"
- **跨分辨率推理**:如"Olympus Mons 火山口边缘的细节地形与全局地形的关系"
- 每个查询由 1-2 名行星科学方向的研究人员标注 ground truth 答案
4. **实体/关系抽取**
- 使用 LLMLlama3-8B-Instruct+ 行星科学 schema 进行实体识别
- Schema 中定义的实体类型:`Crater`, `Region`, `MineralSignature`, `Instrument`, `ObservationProduct`, `GeologicFeature`, `RoverWaypoint`
- 关系类型:`spatially_contains`, `temporally_precedes`, `spectrally_detects`, `compositionally_associated`, `cross_references`
**预期规模**:约 96,000 个实体、53,000 条超边(回填到 Table I
### 1.2 MarsConflict-50冲突评测集对应 Table I、Table IV
**目标**:构建 50 个具有已知科学冲突的观测对,用于评测 PICT 的冲突分类精度。
**步骤**
1. **文献检索**:从以下期刊/会议中检索记录了轨道-原位观测冲突的论文:
- *Journal of Geophysical Research: Planets*
- *Icarus*
- *Nature Geoscience*(火星相关)
- LPSC (Lunar and Planetary Science Conference) 摘要
- 关键词:`orbital vs in-situ`, `discrepancy`, `inconsistency`, `scale-dependent`, `mineral heterogeneity`
2. **冲突对标注**:每个冲突对标注以下字段:
- 冲突类型(四分类):`noise` / `instrument-inherent` / `scale-dependent` / `temporal-evolution`
- 涉及的数据源(如 CRISM vs. PIXL
- 观测几何参数差异 $\|\Omega_i - \Omega_j\|$
- 时间间隔 $\Delta\mathcal{T}$(以 $L_s$ 度为单位)
- 科学解释bridging explanation
3. **预期分布**:约 14 个 noise、12 个 instrument-inherent、15 个 scale-dependent、9 个 temporal-evolution即约 72% 为非噪声科学冲突)
### 1.3 MarsTemporal-QA时序数据集对应 Table I
**目标**150 个需要时序推理的查询。
**步骤**
- 选取已知存在时序变化的火星现象RSL季节性斜坡条纹、沙尘暴覆盖、极冠消退、尘卷风轨迹
- 每个查询涉及至少两个不同 $L_s$ 时相的观测
- Ground truth 标注表面变化的类型和方向
---
## 二、Baseline 实现
### 2.1 需要运行的 Baseline共 8 个)
| 方法 | 代码来源 | 说明 |
|------|----------|------|
| Standard RAG | LangChain / LlamaIndex | 标准 dense retrieval + generation |
| IRCoT | https://github.com/stonybrooknlp/ircot | 迭代检索+CoT |
| RQ-RAG | https://github.com/chanchimin/RQ-RAG | 查询优化RAG |
| MultiRAG | https://github.com/wuwenlong123/MultiRAG | 主要对比对象 |
| HyperGraphRAG | https://github.com/... (查找最新开源版本) | $n$-ary超图RAG |
| HyperRAG | https://github.com/Vincent-Lien/HyperRAG | 超图+MLP检索 |
| TruthfulRAG | 根据论文复现 (AAAI 2026) | 熵冲突解决 |
| MetaRAG | 根据论文复现 | 元认知策略 |
### 2.2 统一配置
- **Base LLM**: Llama3-8B-Instruct所有方法统一
- **Embedding Model**: gte-large-en-v1.5(统一文本嵌入)
- **硬件**: NVIDIA A100 80GB
- **每个方法**都需要在全部 5 个数据集3 个火星 + 2 个通用QA上跑完
---
## 三、实验执行计划
### 实验 1Overall Performance对应 Table II — Q1
**做法**
1. 对每个 baseline 和 AreoRAG在 5 个数据集上分别计算 F1 和 Recall@5
2. 对火星数据集:使用专家标注的 ground truth 答案进行评测
3. 对 HotpotQA / 2WikiMultiHopQA使用原始数据集的标准评测脚本
**回填位置**`paper_experiments.md` 中 Table II 的所有数值
**注意事项**
- HotpotQA/2WikiMultiHopQA 的 MultiRAG 数据可直接引用原论文数值
- 火星数据集上的所有数值都需要实际跑出来
- 确保 TruthfulRAG 在火星数据集上的 Recall@5 也要报告(论文中暂标"—"
### 实验 2鲁棒性实验对应 Fig. 5 — Q2
**做法**
**(a) 空间稀疏性扰动**
1. 在 MarsRegion-QA 的超图上,随机删除 30%/50%/70% 的超边
2. 删除时确保每个查询对应的答案至少有一条路径可达
3. 在扰动后的超图上运行 AreoRAG、MultiRAG、HyperRAG
4. 记录每个扰动级别下的 F1
**(b) 冲突强度扰动**
1. 向 MarsRegion-QA 注入 30%/50%/70% 的合成冲突三元组
2. 合成方法:复制已有观测记录,随机替换矿物名称或坐标值
3. 在扰动后的数据上运行 AreoRAG、MultiRAG、TruthfulRAG
4. 记录每个扰动级别下的 F1
**回填位置**`paper_experiments.md` 中 Fig. 5(a-d) 的描述文字中的所有数值
**画图**4 个子图x 轴为扰动比例 (0%, 30%, 50%, 70%)y 轴为 F1
- Fig 5(a): MarsRegion-QA 空间稀疏性,对比 AreoRAG vs MultiRAG vs HyperRAG
- Fig 5(b): MarsTemporal-QA 空间稀疏性
- Fig 5(c): MarsRegion-QA 冲突注入,对比 AreoRAG vs MultiRAG vs TruthfulRAG
- Fig 5(d): MarsTemporal-QA 冲突注入
### 实验 3消融实验对应 Table III — Q3
**做法**:在 MarsRegion-QA 和 MarsTemporal-QA 上,运行以下 8 个配置:
| 配置 | HySH | 双曲嵌入 | Spatial OEM | PICT | 冲突分类 | 交互熵 |
|------|------|----------|------------|------|----------|--------|
| Full | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| w/o HySH | ✗用MLG | ✗ | ✗ | ✓ | ✓ | ✓ |
| w/o Hyperbolic | ✓(欧氏超图) | ✗ | ✗ | ✓ | ✓ | ✓ |
| w/o Spatial OEM | ✓ | ✓ | ✗标准Einstein | ✓ | ✓ | ✓ |
| w/o PICT | ✓ | ✓ | ✓ | ✗用MCC | ✗ | ✗ |
| w/o 冲突分类 | ✓ | ✓ | ✓ | ✓(统一过滤) | ✗ | ✓ |
| w/o 交互熵 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗用ΔH_p |
| w/o Both | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
每个配置记录 F1、QT在线查询时间、PT离线预处理时间
**回填位置**`paper_experiments.md` 中 Table III 的所有数值
**关键实现细节**
- "w/o HySH (use MLG)":将超图替换为 MultiRAG 的线图构建方式
- "w/o Hyperbolic":保持超图拓扑不变,但在欧氏空间中做嵌入(用标准 TransE 类方法)
- "w/o Spatial OEM":用标准 Einstein midpoint即 Eq.13 中令 $p=0$
- "w/o PICT (use MCC)":用 MultiRAG 的互信息熵一致性检查 + 多级置信度
- "w/o 冲突分类":检测到冲突后统一降低置信度,不区分四类
- "w/o 交互熵":用 TruthfulRAG 的 $\Delta H_p$(参数知识 vs 检索知识的熵差)
### 实验 4冲突保留评测对应 Table IV — Q4
**做法**
1. 在 MarsConflict-50 上运行 AreoRAG 和 4 个 baseline
2. 对每个方法,记录以下指标:
- **CCA冲突分类准确率**:只有 AreoRAG 能报告此指标(其他方法不做分类)
- **CPR科学冲突保留率**:在 36 个非噪声冲突中,有多少被保留在最终 context 里
- **NRR噪声拒绝率**:在 14 个噪声冲突中,有多少被正确过滤
- **F1**:在含冲突的查询上的问答准确率
**CCA 的计算方法**(仅 AreoRAG
- 对 50 个冲突对PICT 输出四分类标签 $\hat{c}$
- 与专家标注的 ground truth 标签对比,计算 4-class accuracy
- 同时绘制混淆矩阵(用于论文分析段落中描述 inst vs scale 混淆)
**CPR 的计算方法**(所有方法):
- 检查最终传入 LLM 的 context 中,标注为 `inst/scale/temp` 类型的冲突观测对是否 **两端** 都被保留
- 如果冲突中有一端被过滤(如 MultiRAG 的 MCC 因置信度低而剔除),则该冲突对算未保留
**回填位置**`paper_experiments.md` 中 Table IV 的所有数值
### 实验 5效率分析对应 Table V — Q5
**做法**
1. 记录每个方法的两类时间:
- **QT查询时间**:从接收查询到返回答案的平均时间(秒),取 200 次查询的均值
- **PT预处理时间**:知识图谱/超图的离线构建时间(秒),一次性开销
2. 在 MarsRegion-QA 和 MarsTemporal-QA 上分别测量
**回填位置**`paper_experiments.md` 中 Table V 的所有数值
**注意**确保所有方法都在相同硬件上测量A100 80GB避免测量偏差
### 实验 6Case Study对应 Table VI
**做法**
1. 选取 Jezero Crater 西部三角洲矿物冲突作为示例(已在论文中写好)
2. 实际运行 AreoRAG 和 MultiRAG记录
- HySH 模块输出的超边绑定结果和嵌入径向深度
- PICT 模块输出的冲突检测结果、$\mathcal{H}_{inter}$ 值、分类结果
- 最终生成的答案文本
3. 用实际输出替换论文中的估算值
**回填位置**`paper_experiments.md` 中 Table VI 的具体数值(如 $\mathcal{H}_{inter}$、$C_{triage}$、径向深度等)
### 实验 7超参数敏感性分析论文中未单独列表但在分析中提及
**做法**:在 MarsRegion-QA 上扫描以下关键超参数:
| 超参数 | 扫描范围 | 说明 |
|--------|----------|------|
| $K$(双曲曲率) | $\{-0.5, -1.0, -2.0, -5.0\}$ | 影响尺度层级的分辨能力 |
| $p$OEM 幂次) | $\{0, 1, 2, 3, 5\}$ | 0=标准Einstein, 越大越偏向高分辨率 |
| $\epsilon$(冲突检测阈值) | $\{0.1, 0.2, 0.3, 0.5, 0.8\}$ | 越小则检测越敏感 |
| $\beta$(科学冲突提升系数) | $\{0.05, 0.1, 0.2, 0.5\}$ | 过大可能引入噪声 |
| $\alpha$(权威性权重) | $\{0.0, 0.25, 0.5, 0.75, 1.0\}$ | 同 MultiRAG 的 Fig. 7 |
**输出**:对每组超参数记录 F1绘制折线图。选取最佳值写入论文的超参数设置段落。
---
## 四、回填清单
完成实验后,按以下清单逐项回填 `paper_experiments.md` 中的估算数据:
- [ ] **Table I**6 个数据集的 Entities / Hyperedges / Queries 精确数值
- [ ] **Table II**5×9 = 45 个 F1 和 Recall@5 数值5个数据集 × 8个baseline + AreoRAG
- [ ] **Fig. 5(a-d)**4×4×3 = 48 个 F1 数值4 个扰动级别 × 4 个子图 × 3 个方法)
- [ ] **Table III**8×6 = 48 个数值8 个消融配置 × 2 个数据集 × 3 个指标)
- [ ] **Table IV**5×4 = 20 个数值5 个方法 × 4 个指标)
- [ ] **Table V**5×4 = 20 个数值5 个方法 × 2 个数据集 × 2 个时间指标)
- [ ] **Table VI**Case Study 中的精确 $\mathcal{H}_{inter}$、$C_{triage}$、$r$ 等值
- [ ] **超参数分析**:约 25 个 F1 值 + 对应的最优超参数确认
**总计约 200+ 个数据点需要回填。**
---
## 五、实验优先级排序
考虑到时间成本,建议按以下顺序执行:
1. **P0必须先做**数据集构建1.1-1.3),这是所有实验的基础
2. **P1核心实验**:实验 1 (Table II) + 实验 3 (Table III) — 证明方法有效性
3. **P2关键卖点**:实验 4 (Table IV) — 这是论文最独特的贡献点
4. **P3完善论证**:实验 2 (Fig. 5) + 实验 5 (Table V)
5. **P4锦上添花**:实验 6 (Case Study) + 实验 7 (超参数)
---
## 六、关键技术实现提示
### 6.1 双曲空间嵌入
```python
# 使用 geoopt 库实现 Lorentz 模型
import geoopt
# 创建 Lorentz 流形
manifold = geoopt.Lorentz(k=-1.0)
# 根据分辨率计算径向深度 (Eq. 6)
import torch
def resolution_to_radial_depth(ell_res, ell_max, K=-1.0):
g = -torch.log(ell_res / ell_max)
r = (1.0 / (-K)**0.5) * torch.cosh((-K)**0.5 * g)
return r
# 平行传输对齐 (Eq. 8)
# geoopt 提供 manifold.transp(x, y, v) 方法
```
### 6.2 交叉源交互熵
```python
# 计算 H_inter (Eq. 14)
def cross_source_interaction_entropy(model, tokenizer, query, path_i, path_j, top_k=10):
# 分别计算三个熵
H_joint = compute_token_entropy(model, tokenizer, query, path_i + path_j, top_k)
H_i = compute_token_entropy(model, tokenizer, query, path_i, top_k)
H_j = compute_token_entropy(model, tokenizer, query, path_j, top_k)
H_inter = H_joint - 0.5 * (H_i + H_j)
return H_inter
def compute_token_entropy(model, tokenizer, query, context, top_k):
# 拼接 query + context, forward pass, 取 top_k logits
# 对每个 token 位置计算 -sum(p * log2(p))
# 返回 token 平均熵
...
```
### 6.3 冲突分类器
```python
# 轻量 MLP 分类器 (Eq. 19)
import torch.nn as nn
class ConflictClassifier(nn.Module):
def __init__(self, input_dim):
super().__init__()
# input_dim = 1 (H_inter) + 1 (||Omega_i - Omega_j||) + 1 (log_res_ratio)
# + 1 (Delta_T) + 1 (rho_auth) + hidden_dim (h_conf)
self.mlp = nn.Sequential(
nn.Linear(input_dim, 256),
nn.ReLU(),
nn.Linear(256, 128),
nn.ReLU(),
nn.Linear(128, 4) # 4 classes: noise, inst, scale, temp
)
def forward(self, z_conf):
return self.mlp(z_conf)
```
### 6.4 Spatial OEM 聚合
```python
# Spatial OEM (Eq. 13)
def spatial_oem(embeddings, weights, p=2, K=-1.0):
# embeddings: [n, d+1] on Lorentz manifold
# weights: [n] query-relevance weights
radial_depth = embeddings[:, 0] # x_0 component
phi_res = radial_depth ** p
lorentz_factor = embeddings[:, 0] # lambda_i = x_{i,0}
combined_weights = weights * phi_res * lorentz_factor
numerator = (combined_weights.unsqueeze(-1) * embeddings).sum(dim=0)
denominator = combined_weights.sum()
pre_proj = numerator / denominator
# Reproject onto H_K^d
result = lorentz_project(pre_proj, K)
return result
```