SuperAPI AI 工具集

mechanistic-interpretability-pyvene

智能体与模型

查看项目

更新于 11-04 01:42

技能介绍

pyvene 是 Stanford NLP 开发的用于在 PyTorch 模型上执行因果干预的库,提供声明式、基于字典的框架,支持激活替换、因果追踪和交换干预训练,使干预实验可复现、可分享。官方 GitHub 为 stanfordnlp/pyvene,相关论文发表于 NAACL 2024。

用途:当需要执行因果追踪(ROME 式定位)、激活替换实验、交换干预训练(IIT)、检验关于模型组件的因果假设、通过 HuggingFace 分享或复现干预实验,或对任意 PyTorch 架构(不限于 Transformer)开展干预时,可使用 pyvene。若需要探索性激活分析,可考虑 TransformerLens;若需训练或分析 SAE,可考虑 SAELens;若需在超大模型上远程执行或更低层控制,可考虑 nnsight。

主要能力:核心类 IntervenableModel 可为任意 PyTorch 模型添加干预能力;IntervenableConfig 与 RepresentationConfig 用于声明干预层、组件与类型。干预类型包括 VanillaIntervention(在运行间交换激活,用于激活替换)、AdditionIntervention(叠加激活,用于引导或消融)、SubtractionIntervention(减去激活,用于消融)、ZeroIntervention(置零激活,用于组件剔除)、RotatedSpaceIntervention(可训练的 DAS 干预,用于因果发现)、CollectIntervention(收集激活,用于探测与分析)。可干预组件包括 block_input、block_output、mlp_input、mlp_output、mlp_activation、attention_input、attention_output、attention_value_output、query_output、key_output、value_output、head_attention_value_output 等。

使用方式:通过 pip install pyvene 安装,使用 import pyvene as pv 导入。典型流程为加载基础模型,定义 IntervenableConfig 与 RepresentationConfig,构建 IntervenableModel,然后以 base 与 sources 调用模型执行干预。文档给出四类工作流:因果追踪(构造干净与损坏输入,按层与位置恢复干净激活并扫描生成热力图)、激活替换用于电路分析(在 IOI 任务上逐层替换注意力输出并比较 logit 差异)、交换干预训练(使用 RotatedSpaceIntervention 或 LowRankRotatedSpaceIntervention 训练可学习低秩旋转,发现因果子空间)、模型引导(加载预训练干预如 Honest LLaMA 并在生成时应用)。干预可通过 save/load 本地保存加载,也可通过 save_intervention 与 load 在 HuggingFace 分享与复用。

适用场景:机制可解释性研究中的事实知识定位、电路分析、因果结构发现、模型行为引导与干预实验复现。已测试模型包括 GPT-2 全尺寸、LLaMA/LLaMA-2、Pythia、Mistral/Mixtral、OPT、BLIP(视觉语言)、ESM(蛋白质模型)、Mamba(状态空间模型)。

限制与注意事项:pyvene 不提供远程执行;探索性激活分析与 SAE 分析有更合适的工具;大模型可能面临显存问题,可启用梯度检查点或减少干预组件;组件名必须精确(如 mlp_output 而非 mlp);位置级干预需设置 unit=pos 与 max_number_of_units,并显式指定 unit_locations;pyvene v0.1.8+ 支持将 LoRA 作为干预(LoRAIntervention)。文档还提供 references/ 下的 API、教程与快速开始资料。