LLM驱动的因果发现
概述
因果发现(Causal Discovery)旨在从观测数据中推断变量间的因果关系,是科学发现和决策制定的核心技术。传统方法主要依赖统计检验和机器学习算法,难以利用丰富的领域知识和文本信息。大型语言模型(LLM)的引入为因果发现带来了革命性的变化。1
背景:传统因果发现
主要方法分类
| 方法类型 | 代表算法 | 核心思想 |
|---|---|---|
| 约束基方法 | PC算法 | 条件独立性检验 |
| 评分搜索方法 | GES | 基于评分函数搜索 |
| 函数因果模型 | LiNGAM | 非线性独立成分分析 |
| 混合方法 | FCI | 处理潜在混杂 |
详见:因果发现基础
传统方法的局限
- 数据依赖:需要大量高质量观测数据
- 计算复杂:搜索空间随变量数指数增长
- 领域知识缺失:难以融入专家知识
- 文本信息利用不足:忽略自然语言描述
LLM驱动的因果发现框架
三种整合范式
1. 直接因果提取
直接从文本中提取因果关系:
文本输入 → LLM因果解析 → 因果图结构
↓
"吸烟导致肺癌" → Smoking → Lung Cancer
优点:无需数据,利用LLM知识
缺点:受幻觉影响,可能不准确
2. 知识注入方法
将LLM知识注入传统算法:
传统因果发现 → LLM先验 → 改进的后验
↓
PC算法(数据) + LLM(知识) → 更准确的图
优点:结合数据驱动和知识驱动
缺点:需要设计融合机制
3. 结构改进方法
使用LLM改进因果图的特定组件:
- 边方向判断
- v-结构识别
- 因果强度排序
代表性方法
Causal-LLM:统一一步式框架
Causal-LLM2是EMNLP 2025的工作:
核心贡献
- 一步式发现:直接从数据+元数据推断完整因果图
- 双重模式:Prompt驱动(有时 metadata) + 数据驱动
- 跨域泛化:从医疗到法律的多领域验证
方法架构
┌─────────────────────────────────────────────────┐
│ Causal-LLM │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Prompt驱动 │ │ 数据驱动 │ │
│ │ 模式 │ │ 模式 │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────────────────────────────┐ │
│ │ 一致性融合模块 │ │
│ │ w₁·P(predictions) + w₂·D(pred) │ │
│ └────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 因果DAG输出 │
│ │
└─────────────────────────────────────────────────┘
Prompt驱动模式
PROMPT_TEMPLATE = """
给定以下变量的描述和关系,请推断它们之间的因果结构。
变量列表:
{variable_descriptions}
可能的因果关系:
{candidate_edges}
请判断每对变量之间是否存在因果关系,
以及因果关系的方向(X→Y 或 Y→X)。
输出格式:
1. X → Y: [存在/不存在/不确定]
2. ...
注意:
- 因果关系意味着X的变化会导致Y的变化
- 相关性不等于因果性
- 考虑潜在的混杂因素
"""数据驱动模式
当没有metadata时,使用结构化数据:
def data_driven_causal_llm(data, llm):
"""数据驱动的因果发现"""
# 1. 统计检验
ci_results = perform_ci_tests(data)
# 2. 相关性分析
correlations = compute_correlations(data)
# 3. LLM推理
prompt = f"""
基于以下条件独立性检验结果和相关性矩阵,
推断变量间的因果结构。
条件独立性结果:
{ci_results}
相关性矩阵:
{correlations}
"""
causal_graph = llm.generate(prompt)
return causal_graph实验结果
| 数据集 | 方法 | 边精度 | SHD |
|---|---|---|---|
| Asia | Prompt (Causal-LLM) | 89.2% | 2.3 |
| Asia | GranDAG | 76.5% | 5.1 |
| Alarm | Prompt (Causal-LLM) | 82.7% | 8.2 |
| Alarm | GES | 71.2% | 14.3 |
MosaCD:鲁棒因果发现
MosaCD3解决LLM幻觉问题:
核心思想
利用Shuffled Queries检测和过滤幻觉:
def detect_hallucination(llm, query, variable_pairs):
"""检测LLM输出中的幻觉"""
results = []
for (X, Y) in variable_pairs:
# 原始查询
orig_response = llm.ask(f"Is X → Y?")
# 打乱查询(利用位置偏差)
shuffled_response = llm.ask(f"Is Y → X?")
# 检测不一致
if orig_response.conflicts(shuffled_response):
# 可能是幻觉,标记为低置信度
results.append((X, Y, confidence=0.3))
else:
# 一致,使用原响应
results.append((X, Y, confidence=orig_response.confidence))
return results置信度传播
高置信度种子 → 传播方向 → 低置信度区域
│
▼
置信度低的边获得来自高置信度邻居的信息
MAC:多智能体因果发现
详见:MAC框架详解
Direct LLM Discovery
微软研究院的Causal Inference Using LLM-Guided Discovery4:
关键发现
- 因果顺序(Causal Order) 足以进行因果效应推断
- LLM可以可靠地获取因果顺序
- 因果顺序比完整因果图更易获取
方法流程
1. 获取因果顺序:LLM询问"X和Y,谁更可能是原因?"
↓
2. 验证顺序:使用CI测试验证LLM的判断
↓
3. 构建因果图:基于顺序约束
↓
4. 估计因果效应:do-calculus或后门调整
评估基准
CausalGraphBench
ACL 2025 Student Research Workshop5:
- 35个因果图,涵盖不同规模和复杂度
- 评估LLM构建因果图的能力
- 分析图大小对性能的影响
关键发现:
- 全图上下文方法优于穷举方法
- 性能随图规模增大而下降
CauSciBench
科学因果推理基准:
- 367个评估任务,来自100+真实科研论文
- 覆盖9个学科领域
- 完整因果分析流程评估
CausalBench
OpenReview 20256:
四维度评估框架:
| 维度 | 问题类型 | 示例 |
|---|---|---|
| 因→果 | 干预效果 | X增加会导致Y如何变化? |
| 果→因 | 原因推断 | 观察到Y,可能的原因是什么? |
| 因→果+干预 | 条件因果 | 干预Z后,X→Y关系如何? |
| 果→因+干预 | 反事实 | 如果X不同,Y会怎样? |
挑战与局限
Hallucination问题
LLM可能生成不存在的因果关系:
| 幻觉类型 | 示例 | 影响 |
|---|---|---|
| 虚假因果 | ”月亮导致潮汐”(技术上正确但忽略物理机制) | 误导性 |
| 方向错误 | ”肥胖导致久坐”(实际相反) | 错误因果方向 |
| 强度夸大 | ”咖啡导致心脏病”(统计上显著但效应微弱) | 夸大因果强度 |
上下文依赖性
LLM对输入格式敏感:
查询方式1: "X和Y有因果关系吗?"
查询方式2: "X导致Y吗?"
查询方式3: "如果X变化,Y会变化吗?"
不同表述 → 不同响应(需要Shuffled Queries检测)
知识时效性
- LLM知识截止于训练数据
- 新发现的因果机制可能未知
- 领域特定知识可能缺失
实践指南
方法选择
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 有丰富metadata | Causal-LLM Prompt模式 | 利用结构化信息 |
| 无metadata,有数据 | Causal-LLM Data模式 | 数据驱动发现 |
| 担心幻觉 | MosaCD | 鲁棒性设计 |
| 多领域协作 | MAC | 综合多种方法 |
Prompt设计建议
- 明确因果定义:在prompt中解释因果关系
- 提供领域约束:减少无关搜索空间
- 要求置信度:不仅返回关系,还要求置信度
- 验证一致性:使用Shuffled Queries检测
# 鲁棒Prompt设计示例
ROBUST_CAUSAL_PROMPT = """
分析变量A和B之间的因果关系。
背景:A和B是在{domain}领域观察到的变量。
因果定义:
- 因果关系意味着A的变化会导致B的变化
- 相关性不等于因果性
请判断:
1. A → B 是否存在?置信度:[0-1]
2. B → A 是否存在?置信度:[0-1]
3. 混杂因素可能性:[0-1]
证据摘要:{reasoning}
"""未来方向
多模态因果发现
结合视觉、文本、表格数据:
# 未来可能:多模态因果发现
def multimodal_causal_discovery(image, text, table, llm):
"""利用图像、文本和表格数据进行因果发现"""
# 图像因果
visual_causal = extract_visual_relations(image)
# 文本因果
textual_causal = extract_textual_relations(text)
# 数值因果
numeric_causal = analyze_table(table)
# LLM融合
final_graph = llm.fuse(
visual=visual_causal,
textual=textual_causal,
numeric=numeric_causal
)
return final_graph因果LLM微调
针对因果推理任务微调专用LLM:
- 因果链推理
- 反事实生成
- 干预效果预测
可解释因果AI
LLM生成可解释的因果报告:
分析结论:
基于数据和领域知识,我们推断X→Y存在因果关系。
证据:
1. 统计证据:条件独立性检验p<0.01
2. 领域知识:文献[X]报告了类似机制
3. 一致性:LLM在5个不同表述中保持一致
置信度:0.85
限制:
- 可能存在未观察到的混杂因素
- 线性假设可能过于简化
相关内容
- 因果推断基础 — 因果图、潜在结果框架
- 因果发现算法 — PC、GES、FCI等
- Do-Calculus — 因果效应识别
- 因果LLM评估基准 — 评估方法与数据集
参考文献
Footnotes
-
IJCAI 2025, “Large Language Models for Causal Discovery: Current Landscape and Future” ↩
-
EMNLP 2025 Findings, “Causal-LLM: A Unified One-Shot Framework for Prompt- and Data-Driven Causal Graph Discovery” ↩
-
arXiv:2509.23570, “Improving constraint-based discovery with robust propagation and reliable LLM priors” ↩
-
Microsoft Research, “Causal Inference Using LLM-Guided Discovery” ↩
-
ACL 2025 SRW, “CausalGraphBench: A Benchmark for Evaluating LLM Capabilities of Causal Graph Discovery” ↩
-
OpenReview 2025, “CausalBench: A Comprehensive Benchmark for Evaluating Causal Reasoning Capabilities of LLMs” ↩