SuperAPI AI 工具集

pyvene-interventions

智能体与模型

查看项目

更新于 10-15 13:06

技能介绍

用途

pyvene 是斯坦福 NLP 团队开发的库,用于在 PyTorch 模型上执行因果干预。它提供声明式、基于字典的框架,支持激活修补(activation patching)、因果追踪(causal tracing)和交换干预训练(interchange intervention training),使干预实验可复现、可分享。

适用场景包括:执行因果追踪(ROME 风格定位)、运行激活修补实验、进行交换干预训练(IIT)、测试关于模型组件的因果假设、通过 HuggingFace 分享/复现干预实验,以及处理任意 PyTorch 架构(不限于 Transformer)。

若需要探索性激活分析,可考虑 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。

支持的工作流包括:因果追踪(ROME 风格,通过破坏输入并恢复激活来定位事实关联存储位置)、激活修补用于电路分析(测试哪些组件对特定行为是必要的)、交换干预训练(IIT,训练干预以发现因果结构)、模型引导(如 Honest LLaMA,在生成过程中引导模型行为)。

支持将干预保存到本地、从本地加载、分享至 HuggingFace 以及从 HuggingFace 加载。pyvene v0.1.8+ 支持将 LoRA 作为干预。

使用方式

安装:pip install pyvene

标准导入:import pyvene as pv

基本流程:加载基础模型(如通过 transformers 的 AutoModelForCausalLM),定义 IntervenableConfig 与 RepresentationConfig(指定 layer、component、intervention_type 等),创建 IntervenableModel,然后调用时传入 base 与 sources 并可通过 unit_locations 指定位置。

因果追踪示例中,先准备干净提示与损坏提示,获取干净激活,定义恢复干预,然后遍历层与位置进行扫描,最后可视化层×位置热力图以识别因果热点。

激活修补示例中,设置干净与损坏提示,定义 logit 差值函数,逐层修补注意力输出并记录结果。

IIT 示例中,使用 RotatedSpaceIntervention 并设置 low_rank_dimension,通过 intervenable.get_trainable_parameters() 获取可训练参数并用优化器训练,训练后可分析学到的旋转矩阵。

DAS 使用 LowRankRotatedSpaceIntervention 并设置 low_rank_dimension 以寻找可解释子空间。

模型引导示例中,可通过 pv.IntervenableModel.load 加载预训练干预(如 zhengxuanzenwu/intervenable_honest_llama2_chat_7B),并在 intervenable.generate 中应用干预。

保存与分享:intervenable.save("./my_intervention")、pv.IntervenableModel.load("./my_intervention", model=model)、intervenable.save_intervention("username/my-intervention")、pv.IntervenableModel.load("username/my-intervention", model=model)。

适用场景

适用于模型可解释性研究,包括定位事实关联、分析电路、发现因果结构、引导模型行为等。支持任意 PyTorch 模型,已在 GPT-2(各尺寸)、LLaMA / LLaMA-2、Pythia、Mistral / Mixtral、OPT、BLIP(视觉语言)、ESM(蛋白质模型)、Mamba(状态空间)上测试。

限制

不支持远程执行(远程执行可考虑 nnsight)。大模型可能面临内存问题,可使用梯度检查点或减少干预组件。需注意组件名称必须精确(如 mlp_output 而非 mlp),并确保源与基础形状兼容。

参考文档

references/README.md(概览与快速开始)、references/api.md(完整 API 参考)、references/tutorials.md(因果追踪、激活修补、DAS 的分步教程)。

外部资源包括 pyvene 101、Causal Tracing Tutorial、IOI Circuit Replication、DAS Introduction 等教程,以及相关论文与官方文档。

GitHub:stanfordnlp/pyvene(840+ stars)。论文:pyvene: A Library for Understanding and Improving PyTorch Models via Interventions(NAACL 2024)。