本项目研究视觉语言模型(VLM)的元认知能力,通过拟合多种认知模型和校准分析来研究VLM的置信度生成机制。项目包含Python和MATLAB两种实现方式,支持logits和self-report两种置信度测量方法,并提供完整的校准分析(4种校准指标)。
- 5种认知模型: SDT, PE, WEV, LogN, BCH
- 两种实现: Python (PyBADS) 和 MATLAB (BADS)
- 两种数据: Logits-based 和 Self-report confidence
- 4种校准指标:
- ECE (absolute): 绝对误差版本的期望校准误差
- ECE (squared): 平方误差版本的期望校准误差
- ROC AUC: 标准ROC曲线下面积
- Selective Accuracy AUC: 选择性准确率曲线下面积
- 多维度分析: 按VLM模型、按任务、按VLM-任务组合
- 可视化: 校准曲线和指标图表
- 模型比较: 基于AIC/BIC的模型选择
- 校准分析: 置信度校准曲线和指标
- 统计表格: 模型拟合结果汇总
VLM_MetaCognition/
├── README.md # 项目说明文档
├── requirements.txt # Python依赖
├── data/ # 📂 数据文件
│ ├── logits/ # Logits数据
│ ├── self_report/ # Self-report数据
│ ├── model_fitting_matlab/ # MATLAB拟合数据
│ └── figure_data/ # 图表数据
├── scripts/ # 🔧 分析脚本
│ ├── model_fitting_python/ # Python模型拟合
│ ├── model_fitting_matlab/ # MATLAB模型拟合
│ ├── analysis/ # 校准分析脚本
│ │ ├── calculate_calibration_metrics_full.py
│ │ ├── calculate_calibration_metrics.py
│ │ └── calibration_analysis.py
│ ├── figures/ # 图表生成
│ └── tables/ # 表格生成
├── results/ # 📋 分析结果
│ ├── model_fitting/ # 模型拟合结果
│ │ ├── python/ # Python结果
│ │ └── matlab/ # MATLAB结果
│ ├── calibration_full/ # 完整校准分析结果
│ │ ├── calibration_by_model_full.csv # 按VLM模型分组
│ │ ├── calibration_by_task_full.csv # 按任务分组
│ │ ├── calibration_overall_full.csv # 总体统计
│ │ └── calibration_task_model_full.csv # 按任务-模型组合
│ ├── figures/ # 图表文件
│ │ ├── calibration_full/ # 校准分析图表
│ │ ├── publication/ # 发表级图表
│ │ └── supplementary/ # 补充图表
│ └── tables/ # 表格文件
└── model_comparisons 2/ # 参考实现(MATLAB原始代码)
- Python 3.7+
- MATLAB (可选,用于MATLAB实现)
- 依赖包: numpy, scipy, pandas, matplotlib, pybads
pip install -r requirements.txt# Logits数据
python3 scripts/model_fitting_python/run_fitting.py \
--data_type logits \
--output_dir results/model_fitting/python/align
# Self-report数据
python3 scripts/model_fitting_python/run_fitting.py \
--data_type selfreport \
--output_dir results/model_fitting/python/align# 只拟合SDT和WEV
python3 scripts/model_fitting_python/run_fitting.py \
--data_type logits \
--models SDT WEV \
--output_dir results/model_fitting/python/align结果保存在 results/model_fitting/python/align/ 目录下:
logits/- Logits数据拟合结果SDT.csvWEV.csvBCH.csvPE.csvLogN.csv(如果运行)
self/- Self-report数据拟合结果SDT.csvWEV.csvBCH.csvPE.csvLogN.csv(如果运行)
% 在MATLAB中运行
cd scripts/model_fitting_matlab/matlab
restructureData_logits_vlm % 预处理logits数据
restructureData_vlm % 预处理self-report数据% 拟合SDT模型
runFitting_vlm
% 拟合LogN模型(需要先运行SDT)
runLogN_logits_vlm % logits数据
runLogN_vlm % self-report数据# 计算完整校准指标(4种方法)
python3 scripts/analysis/calculate_calibration_metrics_full.py校准分析结果保存在 results/calibration_full/ 目录下:
calibration_overall_full.csv: 总体校准指标calibration_by_model_full.csv: 按VLM模型分组的校准指标calibration_by_task_full.csv: 按任务分组的校准指标calibration_task_model_full.csv: 按任务-模型组合的校准指标
- ECE (absolute): 绝对误差版本的期望校准误差,衡量置信度与准确率的绝对差异
- ECE (squared): 平方误差版本的期望校准误差(论文方法)
- ROC AUC: 标准ROC曲线下面积,衡量置信度区分正确/错误决策的能力
- Selective Accuracy AUC: 选择性准确率曲线下面积(论文方法),衡量基于置信度的选择性决策性能
- 假设: 决策和置信度基于同一个感觉证据分布
- 特点: 无元认知噪声,最简单的模型
- 参数: 16个 (7个μ + 1个c + 8个置信度标准)
- 假设: 置信度只考虑与决策一致的(正)证据
- 特点: 完全忽略与决策不一致的证据
- 参数: 16个 (7个μ + 1个c + 8个置信度标准)
- 方法: 模拟(100万次试验)
- 假设: 置信度基于SDT证据和刺激可见性的加权和
- 特点: 同时考虑感觉信号和可见性信号
- 参数: 18个 (7个μ + 1个c + 8个置信度标准 + 1个metaNoise + 1个w)
- 假设: 元认知噪声遵循对数正态分布
- 特点: 信号依赖的元认知噪声(远离决策标准的置信度标准有更大的噪声)
- 参数: 17个 (7个μ + 1个c + 8个置信度标准 + 1个metaNoise)
- 方法: 数值积分
- 假设: 置信度是正确选择的后验概率
- 特点: 置信度标准定义在后验概率空间(而非证据空间)
- 参数: 16个 (7个μ + 1个c_threshold + 8个confThresholds)
基于24,192个试验的总体校准指标:
- 平均置信度: 4.304 (1-5量表)
- 平均准确率: 0.567 (56.7%)
- ECE (squared): 0.113 (平方误差版本的期望校准误差)
- ROC AUC: 0.544 (置信度区分正确/错误决策的能力)
- Selective AUC: 0.569 (基于置信度的选择性决策性能)
关键发现:
- Grid任务校准最好 (ECE_squared = 0.019, Selective AUC = 0.946)
- qwen2.5-vl-7b校准表现最好 (ECE_squared = 0.024)
- Brightness和Gabor任务校准较差 (ECE_squared > 0.24)
基于45个(VLM, task)组合的最佳模型统计(MATLAB结果):
- SDT: 71.1% (32/45) - 主导模型
- BCH: 22.2% (10/45)
- PE: 4.4% (2/45)
- LogN: 2.2% (1/45)
- LOGITS数据: SDT占66.7% (12/18),BCH占16.7% (3/18)
- SELF数据: SDT占74.1% (20/27),BCH占25.9% (7/27)
- VLM的元认知机制更简单: 大部分任务符合SDT模型,说明VLM的置信度是决策证据的直接反映,没有额外的元认知噪声
- 与人类行为差异: 人类需要更复杂的模型(LogN、PE等),而VLM更接近"理想观察者"
- 方法依赖性: 不同置信度测量方法(logits vs self-report)可能揭示不同的元认知机制
- Python: PyBADS (Bayesian Adaptive Direct Search)
- MATLAB: BADS (Bayesian Adaptive Direct Search)
- 策略:
- 模拟模型(PE): 自动运行5次,选择最佳结果
- 解析模型(SDT, WEV, LogN, BCH): 运行1次
输入CSV文件格式:
stimulus_type: S1 或 S2difficulty_level: 难度等级 (1-7)choice: S1 或 S2 (响应)confidence: 1-5 (置信度评分)model: VLM模型名称task: 任务名称 (Grid, Gabor, Brightness)qid: 问题ID
- gemma3_27b (Google)
- kimi-vl-a3b (Moonshot)
- ovis2_34b (OpenGVLab)
- qwen2.5-vl-32b (Alibaba)
- qwen2.5-vl-72b (Alibaba)
- qwen2.5-vl-7b (Alibaba)
- claude-sonnet-4-5 (Anthropic)
- gpt-4o (OpenAI)
- gpt-5 (OpenAI)
- Grid: 网格模式识别任务
- Gabor: Gabor滤波器模式任务
- Brightness: 亮度比较任务
每个模型生成一个CSV文件,包含以下列:
task: 任务名称vlm: VLM模型名称model: 认知模型名称nll: 负对数似然度AIC: Akaike信息准则BIC: Bayesian信息准则n_params: 参数数量n_trials: 试验数量delta_AIC: 与最佳模型的AIC差异delta_BIC: 与最佳模型的BIC差异
校准分析结果包含4种校准指标,保存在 results/calibration_full/ 目录下:
calibration_overall_full.csv: 总体校准指标(所有VLM和任务)calibration_by_model_full.csv: 按VLM模型分组的校准指标(9个VLM)calibration_by_task_full.csv: 按任务分组的校准指标(3个任务)calibration_task_model_full.csv: 按任务-模型组合的校准指标(27个组合)
每个文件包含以下指标:
mean_confidence: 平均置信度mean_accuracy: 平均准确率ECE_absolute: 绝对误差版本的期望校准误差ECE_squared: 平方误差版本的期望校准误差ROC_AUC: ROC曲线下面积Selective_AUC: 选择性准确率曲线下面积
本项目基于以下研究:
- Shekhar, M., & Rahnev, D. (2024). How do humans give confidence? A comprehensive comparison of process models of perceptual metacognition. Journal of Experimental Psychology: General.
欢迎提交Issue和Pull Request来改进本项目。
本项目采用MIT许可证。
注意: 本项目提供了完整的模型拟合和分析流程,确保研究的可重现性和透明度。