# 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 ```