[ PROMPT_NODE_22628 ]
pyvene-interventions
[ SKILL_DOCUMENTATION ]
# pyvene: 神经网络的因果干预
pyvene 是斯坦福 NLP 开发的库,用于对 PyTorch 模型进行因果干预。它提供了一个声明式的、基于字典的框架,用于激活修补、因果追踪和交换干预训练,使干预实验具有可重复性和可共享性。
**GitHub**: [stanfordnlp/pyvene](https://github.com/stanfordnlp/pyvene) (840+ stars)
**论文**: [pyvene: A Library for Understanding and Improving PyTorch Models via Interventions](https://aclanthology.org/2024.naacl-demo.16) (NAACL 2024)
## 何时使用 pyvene
**当你需要以下操作时使用 pyvene:**
- 执行因果追踪 (ROME 风格定位)
- 运行激活修补实验
- 进行交换干预训练 (IIT)
- 测试关于模型组件的因果假设
- 通过 HuggingFace 分享/复现干预实验
- 使用任何 PyTorch 架构(不仅限于 Transformer)
**在以下情况考虑替代方案:**
- 需要探索性激活分析 → 使用 **TransformerLens**
- 想要训练/分析 SAE → 使用 **SAELens**
- 需要在大模型上进行远程执行 → 使用 **nnsight**
- 需要更底层的控制 → 使用 **nnsight**
## 安装
bash
pip install pyvene
标准导入:
python
import pyvene as pv
## 核心概念
### IntervenableModel
包装任何具有干预能力的 PyTorch 模型的主类:
python
import pyvene as pv
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 定义干预配置
config = pv.IntervenableConfig(
representations=[
pv.RepresentationConfig(
layer=8,
component="block_output",
intervention_type=pv.VanillaIntervention,
)
]
)
# 创建可干预模型
intervenable = pv.IntervenableModel(config, model)
### 干预类型
| 类型 | 描述 | 使用场景 |
|------|-------------|----------|
| `VanillaIntervention` | 在运行之间交换激活值 | 激活修补 |
| `AdditionIntervention` | 将激活值添加到基础运行 | 引导、消融 |
| `SubtractionIntervention` | 减去激活值 | 消融 |
| `ZeroIntervention` | 将激活值置零 | 组件剔除 |
| `RotatedSpaceIntervention` | DAS 可训练干预 | 因果发现 |
| `CollectIntervention` | 收集激活值 | 探测、分析 |