350 lines
15 KiB
Markdown
350 lines
15 KiB
Markdown
# 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. **实体/关系抽取**:
|
||
- 使用 LLM(Llama3-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)上跑完
|
||
|
||
---
|
||
|
||
## 三、实验执行计划
|
||
|
||
### 实验 1:Overall 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),避免测量偏差
|
||
|
||
### 实验 6:Case 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
|
||
```
|