SuperAPI AI 工具集

pyvene-interventions

智能体与模型

查看项目

更新于 10-30 06:45

技能介绍

用途

本技能提供使用 pyvene 对 PyTorch 模型进行因果干预的指导。pyvene 是 Stanford NLP 的库,通过声明式、基于字典的框架实现激活修补、因果追踪和交换干预训练,使干预实验可复现和可分享。

主要能力

  • 支持多种干预类型: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 等。
  • 核心类:IntervenableModel(主包装器)、IntervenableConfig(配置容器)、RepresentationConfig(单个干预规格)。
  • 支持保存到本地、从本地加载,以及通过 HuggingFace 保存和加载干预。
  • 支持 LoRA 作为干预(pyvene v0.1.8+)。
  • 已在 GPT-2、LLaMA/LLaMA-2、Pythia、Mistral/Mixtral、OPT、BLIP、ESM、Mamba 等模型上测试,理论上适用于任何 PyTorch 模型。

使用方式

安装:pip install pyvene;导入:import pyvene as pv。 基本流程:加载基础模型 → 定义 IntervenableConfig(指定 layer、component、intervention_type 等)→ 创建 IntervenableModel → 调用时传入 base 和 sources 及可选的 unit_locations 执行干预。

技能资料中给出了四个工作流示例:

  1. 因果追踪(ROME 风格):通过破坏输入并恢复特定层和位置的干净激活,扫描层×位置热图定位事实关联存储位置。
  2. 激活修补用于电路分析:在 IOI 任务中逐层修补 attention_output,计算 logit 差异。
  3. 交换干预训练(IIT):使用 RotatedSpaceIntervention 训练可训练干预,通过低秩旋转发现因果子空间,并包含 DAS(Distributed Alignment Search)示例。
  4. 模型引导(Honest LLaMA):加载预训练干预,在生成时应用引导。

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

适用场景

  • 因果追踪(ROME 风格定位)
  • 激活修补实验
  • 交换干预训练(IIT)
  • 测试关于模型组件的因果假设
  • 通过 HuggingFace 分享/复现干预实验
  • 处理任意 PyTorch 架构(不仅限于 transformers)

限制与替代方案

  • 如需探索性激活分析,建议使用 TransformerLens。
  • 如需训练/分析 SAE,建议使用 SAELens。
  • 如需在超大模型上远程执行或更低层控制,建议使用 nnsight。
  • 常见问题包括干预位置错误(组件名需精确)、维度不匹配(需确保 source 和 base 形状兼容,必要时指定 unit 和 max_number_of_units 及 unit_locations)、大模型内存问题(可使用梯度检查点或减少干预组件)、LoRA 集成需 v0.1.8+。

参考资料

技能资料提及 references/ 文件夹包含 README.md、api.md、tutorials.md,以及外部教程和论文(如 ROME、ITI、IOI 等),但具体内容暂未提供。