Files
Mars-RAG-paper/实验设计文档.md

350 lines
15 KiB
Markdown
Raw Permalink Normal View History

2026-04-02 10:24:22 +08:00
# 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
```