Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM Bayesian - Abstract Causal Reasoning (ACR) Framework

基于抽象因果推理 (Abstract Causal Reasoning, ACR) 的 LLM 因果发现框架


📖 项目简介

本项目实现了一个创新的因果发现方法,通过将统计特征翻译为自然语言叙事,让大型语言模型 (LLM) 在完全脱敏的条件下推断变量之间的因果关系。

核心思想

传统的 LLM 因果推断研究常被质疑只是"记住"了训练数据中的共现关系(如"吸烟→癌症")。
我们的方法通过:

  1. 匿名化变量(Var_A, Var_B)
  2. 提取统计行为特征(残差独立性、分布形态、拟合度)
  3. 翻译为自然语言叙事(如"A->B 的误差几乎是随机的,但 B->A 的误差中仍包含 B 的痕迹")

强制 LLM 依靠逻辑推理而非语义知识来判断因果方向。


🎯 核心创新

1. 多维度统计特征提取器 (Multi-Dimensional Stat-to-Lang Translator)

本项目不仅仅是单一的 LiNGAM 或 ANM 实现,而是一个自适应的统计特征提取系统,能够根据数据类型自动选择最优策略:

数据类型 核心理论 关键指标 适用场景
连续变量 LiNGAM 偏度、峰度(非高斯性) 线性因果关系
Non-linear ANM 互信息 (MI)、多项式拟合 R² 非线性因果关系
稳定性分析 异方差性检测 捕捉反向拟合的不稳定性
离散变量 信息论 条件熵、边际熵 真实世界离散数据(bnlearn)
预测能力 逻辑回归准确率 分类变量的因果判断

关键突破:将数值统计特征(如 MI=0.35, H(Y|X)=0.72)转化为自然语言叙事,使 LLM 能够像人类专家一样进行因果推理。

2. LLM 作为"元统计学家" (LLM as Meta-Statistician)

LLM 不再是简单的分类器,而是一个能够:

  • 综合多源证据:权衡来自熵、拟合度、残差独立性等多个维度的证据。
  • 处理矛盾信号:在复杂度不对称与残差独立性冲突时做出合理判断。
  • 输出可解释推理链:提供完整的推理过程,而非黑盒决策。

🚀 快速开始

安装依赖

pip install numpy scipy scikit-learn pandas pydantic openai zhipuai pyyaml

配置模型

编辑 llms/config.yaml,设置默认使用的模型:

used_model: "deepseek-ai/DeepSeek-V3.1"

运行实验

# 使用默认配置
python3 run_experiment.py

# 指定参数
python3 run_experiment.py --model "gpt-4-turbo" --samples 1000 --output results.json

输出

  • 控制台: 实时显示推理进度和准确率
  • JSON 文件: experiment_results.json - 完整的推理结果

📁 项目结构

LLMBayesian/
├── 📂 background/                # 项目背景文档
│   └── task.md                   # 实验计划和进度追踪
├── 📂 results/                   # 实验结果存储
│   ├── experiment_results.json   # 合成数据实验结果
│   └── real_network_results.json # 真实网络测试结果
├── 📂 tests/                     # 测试脚本
│   ├── run_experiment.py         # 运行合成数据实验
│   └── test_real_networks.py     # 测试真实贝叶斯网络
├── 📂 utils_set/                 # 核心功能模块
│   ├── stat_translator.py        # 统计特征 -> 自然语言叙事(支持 HSIC)
│   ├── data_generator.py         # 合成因果数据生成器
│   ├── causal_reasoning_engine.py # 端到端推理引擎
│   ├── prompts.py                # Prompt 模板库(Sherlock Holmes 风格)
│   ├── causal_inference_schema.py # Pydantic 响应模型
│   └── utils.py                  # 配置加载工具
├── 📂 llms/                      # LLM 管理系统
│   ├── manager.py                # LLM 管理器
│   ├── config.yaml               # 模型配置(支持 OpenAI/ZhipuAI/ModelScope)
│   ├── base.py                   # LLM 基类
│   └── providers/                # 各提供商实现
├── README.md                     # 本文件
├── MODIFICATION_SUMMARY.md       # 最新修改总结
└── PROJECT_STRUCTURE.md          # 详细项目结构说明

💡 详细的文件组织说明请参见 PROJECT_STRUCTURE.md


🧪 实验结果 (最新)

合成数据集 (Synthetic Data)

  • 准确率: 100% (4/4) 因果案例 🎉
  • LiNGAM (线性非高斯): 正确(HSIC + 偏度信号)
  • Reverse (反向因果): 正确(HSIC + 异方差性)
  • ANM (非线性): 正确(MLP 强拟合 + HSIC)
  • Independent: 正确识别(R²=0, 相关性=0)
  • Confounder: 误判(混淆因子难以区分)

真实世界数据 (Real-World Benchmarks)

扩展基准测试结果(与传统算法对比)

网络 规模 ACR-Hybrid PC HillClimb Random 提升
Asia 8 nodes, 8 edges 5 12 16 16 58%↓
Sprinkler 4 nodes, 4 edges 3 0 2 6 -
Alarm 37 nodes, 46 edges 8 75 85 84 89%↓
Sachs 11 nodes, 17 edges 4 29 24 30 86%↓

SHD (Structural Hamming Distance): 越低越好,0 表示完美复原

关键发现:

  • 复杂网络优势: 在 Alarm 网络上 SHD=8 vs PC=75,提升 89%
  • 中型网络优势: 在 Asia 网络上 SHD=5 vs PC=12,提升 58%
  • ⚠️ 简单网络劣势: Sprinkler 上传统算法达到完美(SHD=0),ACR 略逊(SHD=3)
  • 🎯 核心定位: Blind Causal Discovery(无语义信息场景),隐私保护领域的首个 LLM 方法

关键创新

  1. 客观叙事 (Objective Narrative): 将判决权交给 LLM,仅提供相对差异的客观描述,避免硬编码偏见。
  2. MLP 非线性拟合: 替代多项式回归,彻底解决 ANM 案例的欠拟合问题(准确率 0% → 100%)。
  3. IGCI 原理: 在离散数据中,边缘熵 (Marginal Entropy) 优于条件熵,修正"预测陷阱"。
  4. 量化对比框架: 引入 SHD 指标,与 PC/HillClimb/Random 传统算法同台竞技。

🔧 复现实验

1. 安装依赖

pip install numpy scipy scikit-learn pandas pydantic openai zhipuai pyyaml bnlearn matplotlib seaborn

2. 配置 API Key

编辑 llms/config.yaml,设置你的模型 API:

used_model: "deepseek-ai/DeepSeek-V3.1"

3. 运行合成数据实验

python tests/run_experiment.py --model deepseek-v3 --samples 1000

4. 运行真实网络测试

python tests/test_real_networks.py --network alarm
python tests/test_real_networks.py --network asia
python tests/test_real_networks.py --network sachs

5. 运行混合流水线

python tests/test_hybrid_pipeline.py --network alarm --strategy conservative

6. 生成论文图表

python figures/fig1_mechanism_check.py
python figures/fig2_performance_gap.py

7. 编译论文

cd paper && xelatex main.tex

🔧 代码集成示例

生成数据

from utils_set.data_generator import CausalDataGenerator

generator = CausalDataGenerator(random_seed=42)
datasets = generator.generate_batch(n_samples=500)

分析单个数据对

from utils_set.stat_translator import StatTranslator

translator = StatTranslator()
stats = translator.analyze(X, Y)
narrative = translator.generate_narrative(stats)
print(narrative)

使用 LLM 推理

from utils_set.causal_reasoning_engine import CausalReasoningEngine

engine = CausalReasoningEngine(model_name="gpt-4-turbo")
results = engine.run_experiment(datasets, save_results=True)

📈 下一步工作

已完成 ✅

  • MLP 升级: 引入神经网络回归解决 ANM 欠拟合
  • Prompt 修正: 引入 IGCI 原理解决离散数据误判
  • 量化对比: 实现 SHD 计算和传统算法 baseline(PC, HillClimb)
  • 扩展测试: 在 Asia, Sprinkler, Alarm, Sachs 网络上完成测试
  • 论文写作: 完成全部章节(中文版)
  • 可视化: 完成机制验证图和性能对比图

进行中 🔄

  • 竞品对照: 验证 PromptBN 在 Blind Setting 下的性能崩溃
  • 投稿准备: 整理代码和补充材料

长期 (Long-term)

  • 实现"元认知仲裁"机制(综合多种算法)
  • 在大规模真实数据集上验证
  • 投稿顶级会议 (NeurIPS/ICML/ICLR)

📝 论文进度

当前阶段: 论文初稿已完成 ✅

论文文件位于 paper/ 目录:

  • main.pdf - 编译后的论文 (8页,中文)
  • figures/ - 图表文件

🤝 贡献

欢迎提交 Issue 和 Pull Request!


📄 许可证

MIT License


🙏 致谢

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages