15 KiB
AreoRAG 实验设计文档
本文档用于指导后续实验执行。论文中的实验数据为估算值,需要通过以下实验流程获取真实数据后回填。每个实验标注了对应论文中的表格/图编号,方便定位回填位置。
一、数据集构建
1.1 MarsRegion-QA(主数据集,对应 Table I)
目标:构建一个多源火星空间问答数据集,覆盖5个科学重点区域。
步骤:
-
数据获取:
- 访问 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 获取
- 访问 NASA Mars ODE (https://ode.rsl.wustl.edu/) 下载以下5个区域的观测数据:
-
元数据解析:
- 用 Python 解析 PDS4 XML labels,提取字段:
product_id→ idinstrument_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(用于时间转换)
- 用 Python 解析 PDS4 XML labels,提取字段:
-
Query 构建:
- 设计 200 个查询,分为以下类别(每类约40个):
- 空间定位查询:如"Jezero Crater 西部三角洲区域有哪些高分辨率影像?"
- 跨源关联查询:如"该区域的CRISM矿物检测结果与原位测量是否一致?"
- 模糊地理查询:如"祝融号着陆后前三个月向南行驶路线上的高分影像"
- 时序推理查询:如"Valles Marineris 北壁在 MY34 沙尘暴前后的地貌变化"
- 跨分辨率推理:如"Olympus Mons 火山口边缘的细节地形与全局地形的关系"
- 每个查询由 1-2 名行星科学方向的研究人员标注 ground truth 答案
- 设计 200 个查询,分为以下类别(每类约40个):
-
实体/关系抽取:
- 使用 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 的冲突分类精度。
步骤:
-
文献检索:从以下期刊/会议中检索记录了轨道-原位观测冲突的论文:
- Journal of Geophysical Research: Planets
- Icarus
- Nature Geoscience(火星相关)
- LPSC (Lunar and Planetary Science Conference) 摘要
- 关键词:
orbital vs in-situ,discrepancy,inconsistency,scale-dependent,mineral heterogeneity
-
冲突对标注:每个冲突对标注以下字段:
- 冲突类型(四分类):
noise/instrument-inherent/scale-dependent/temporal-evolution - 涉及的数据源(如 CRISM vs. PIXL)
- 观测几何参数差异
\|\Omega_i - \Omega_j\| - 时间间隔 $\Delta\mathcal{T}$(以
L_s度为单位) - 科学解释(bridging explanation)
- 冲突类型(四分类):
-
预期分布:约 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)
做法:
- 对每个 baseline 和 AreoRAG,在 5 个数据集上分别计算 F1 和 Recall@5
- 对火星数据集:使用专家标注的 ground truth 答案进行评测
- 对 HotpotQA / 2WikiMultiHopQA:使用原始数据集的标准评测脚本
回填位置:paper_experiments.md 中 Table II 的所有数值
注意事项:
- HotpotQA/2WikiMultiHopQA 的 MultiRAG 数据可直接引用原论文数值
- 火星数据集上的所有数值都需要实际跑出来
- 确保 TruthfulRAG 在火星数据集上的 Recall@5 也要报告(论文中暂标"—")
实验 2:鲁棒性实验(对应 Fig. 5 — Q2)
做法:
(a) 空间稀疏性扰动:
- 在 MarsRegion-QA 的超图上,随机删除 30%/50%/70% 的超边
- 删除时确保每个查询对应的答案至少有一条路径可达
- 在扰动后的超图上运行 AreoRAG、MultiRAG、HyperRAG
- 记录每个扰动级别下的 F1
(b) 冲突强度扰动:
- 向 MarsRegion-QA 注入 30%/50%/70% 的合成冲突三元组
- 合成方法:复制已有观测记录,随机替换矿物名称或坐标值
- 在扰动后的数据上运行 AreoRAG、MultiRAG、TruthfulRAG
- 记录每个扰动级别下的 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)
做法:
- 在 MarsConflict-50 上运行 AreoRAG 和 4 个 baseline
- 对每个方法,记录以下指标:
- 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)
做法:
- 记录每个方法的两类时间:
- QT(查询时间):从接收查询到返回答案的平均时间(秒),取 200 次查询的均值
- PT(预处理时间):知识图谱/超图的离线构建时间(秒),一次性开销
- 在 MarsRegion-QA 和 MarsTemporal-QA 上分别测量
回填位置:paper_experiments.md 中 Table V 的所有数值
注意:确保所有方法都在相同硬件上测量(A100 80GB),避免测量偏差
实验 6:Case Study(对应 Table VI)
做法:
- 选取 Jezero Crater 西部三角洲矿物冲突作为示例(已在论文中写好)
- 实际运行 AreoRAG 和 MultiRAG,记录:
- HySH 模块输出的超边绑定结果和嵌入径向深度
- PICT 模块输出的冲突检测结果、
\mathcal{H}_{inter}值、分类结果 - 最终生成的答案文本
- 用实际输出替换论文中的估算值
回填位置: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+ 个数据点需要回填。
五、实验优先级排序
考虑到时间成本,建议按以下顺序执行:
- P0(必须先做):数据集构建(1.1-1.3),这是所有实验的基础
- P1(核心实验):实验 1 (Table II) + 实验 3 (Table III) — 证明方法有效性
- P2(关键卖点):实验 4 (Table IV) — 这是论文最独特的贡献点
- P3(完善论证):实验 2 (Fig. 5) + 实验 5 (Table V)
- P4(锦上添花):实验 6 (Case Study) + 实验 7 (超参数)
六、关键技术实现提示
6.1 双曲空间嵌入
# 使用 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 交叉源交互熵
# 计算 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 冲突分类器
# 轻量 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 聚合
# 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