Qwen-Scope Gradio可视化工具详解:实时特征激活热力图教程

【免费下载链接】SAE-Res-Qwen3.5-9B-Base-W64K-L0_50 【免费下载链接】SAE-Res-Qwen3.5-9B-Base-W64K-L0_50 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/SAE-Res-Qwen3.5-9B-Base-W64K-L0_50

Qwen-Scope Gradio可视化工具是一款专为Qwen3.5系列模型打造的强大解释性工具,通过稀疏自编码器(SAE)技术,帮助用户直观分析模型内部特征激活情况,轻松生成实时特征激活热力图。无论是模型行为分析还是优化探索,这款工具都能为新手和普通用户提供便捷的操作体验。

🌟 Qwen-Scope工具核心功能解析

Qwen-Scope作为Qwen3.5系列模型的解释性模块,其核心在于将稀疏自编码器(SAE)集成并训练在模型的隐藏层中。通过实施稀疏性约束,能够自动提取高度解耦、低冗余且可解释性强的数据特征。该工具不仅可用于分析Qwen模型行为的内部机制,还在可控推理、评估样本分布分析、数据分类与合成以及模型训练优化等场景中展现出巨大潜力。

🔑 关键技术特性

  • TopK SAE架构:在每次前向传播中,精确保留50个非零特征
  • 全面覆盖:涵盖0-31层共32个Transformer层
  • 高扩展性:SAE宽度达65536,隐藏层大小4096,扩展因子16倍
  • 直观可视化:通过热力图清晰展示特征激活情况

🚀 快速安装与启动指南

一键安装步骤

  1. 首先克隆仓库:
git clone https://gitcode.com/hf_mirrors/Qwen/SAE-Res-Qwen3.5-9B-Base-W64K-L0_50
cd SAE-Res-Qwen3.5-9B-Base-W64K-L0_50
  1. 安装所需依赖(确保已安装Python 3.8+):
pip install -r requirements.txt

最快配置方法

使用以下命令启动Gradio demo:

python app.py \
    --model Qwen/Qwen3.5-9B-Base \
    --model-name-sae-trained-from qwen3.5-9b-base \
    --model-name-analyzing-now qwen3.5-9b \
    --sae-path . \
    --top-k 50 \
    --num-layers 32 \
    --sae-width 65536 \
    --d-model 4096 \
    --server-port 7860

启动成功后,在浏览器中访问 http://localhost:7860 即可使用Qwen-Scope可视化工具。

📊 实时特征激活热力图生成教程

基本操作流程

  1. 选择分析层:在界面中通过滑块选择要分析的Transformer层(0-31)
  2. 输入文本:在文本框中输入想要分析的文本提示
  3. 运行分析:点击"分析特征"按钮,工具将自动提取特征并生成热力图
  4. 调整参数:可通过"Top-K"参数控制显示的特征数量,建议保持默认值50

热力图解读指南

热力图以二维表格形式展示:

  • 行:按所有位置平均激活值排序的Top-K特征
  • 列:标记位置
  • 颜色:激活值(白色→红色,按每行最大值归一化)

热力图右侧提供了颜色图例,从左到右表示激活值从0到峰值的变化。每个单元格悬停时会显示详细信息,包括特征编号、位置和激活值。

💡 高级功能:特征比较与控制

特征比较功能

Qwen-Scope提供了强大的特征比较功能,可帮助用户分析两个不同文本示例之间的特征激活差异:

  1. 在"Feature Comparison"标签页中,输入两个文本示例
  2. 设置比较参数,包括层范围和Top-K结果数量
  3. 点击"Compare Features"按钮,系统将生成比较结果

比较结果将显示每个层中激活率差异最大的特征,通过直观的条形图展示差异程度,并支持悬停查看具体token的激活情况。

特征控制功能

通过"Feature Steering"标签页,用户可以尝试控制模型输出:

  1. 输入生成提示
  2. 设置要控制的层和特征索引
  3. 选择要控制的token位置和控制强度
  4. 点击"Generate Both Outputs"按钮,比较原始输出和受控输出

这一功能允许用户探索特征对模型输出的影响,为模型行为控制提供了直观的操作界面。

📝 特征激活提取代码示例

以下是一个简单的Python代码示例,展示如何提取Qwen模型的特征激活:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载基础模型
model_name = "Qwen/Qwen3.5-9B-Base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float32)
model.eval()

# 加载目标层的SAE
LAYER = 0  # 选择0-31中的任何层
sae = torch.load(f"layer{LAYER}.sae.pt", map_location="cpu")
W_enc = sae["W_enc"]  # (65536, 4096)
b_enc = sae["b_enc"]  # (65536,)

def get_feature_acts(residual: torch.Tensor) -> torch.Tensor:
    """residual: (..., 4096) → 稀疏特征激活 (..., 65536)"""
    pre_acts = residual @ W_enc.T + b_enc
    topk_vals, topk_idx = pre_acts.topk(50, dim=-1)
    acts = torch.zeros_like(pre_acts)
    acts.scatter_(-1, topk_idx, topk_vals)
    return acts

# 注册钩子捕获目标Transformer层后的残差流
captured = {}
def _hook(module, input, output):
    hidden = output[0] if isinstance(output, tuple) else output
    captured["residual"] = hidden.detach().cpu()

hook = model.model.layers[LAYER].register_forward_hook(_hook)

# 前向传播
text = "The capital of France is"
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
    model(**inputs)
hook.remove()

# 提取特征激活
residual = captured["residual"]               # (1, seq_len, 4096)
feature_acts = get_feature_acts(residual)     # (1, seq_len, 65536)

# 检查最后一个token的活跃特征
last_token_acts = feature_acts[0, -1]         # (65536,)
active_idx = last_token_acts.nonzero(as_tuple=True)[0]
print(f"活跃特征 : {active_idx.tolist()}")
print(f"特征值  : {last_token_acts[active_idx].tolist()}")

⚠️ 使用注意事项

  • 严禁将解释性工具用于非科学研究目的,以干扰模型能力或生成有害信息
  • 建议在GPU环境下运行,以获得最佳性能
  • 首次加载模型可能需要较长时间,请耐心等待
  • 对于大型文本,特征提取和热力图生成可能需要一定时间

📚 更多资源

通过Qwen-Scope Gradio可视化工具,即使是新手用户也能轻松探索大型语言模型的内部工作机制。无论是学术研究还是工程应用,这款工具都能为您提供深入的模型洞察和直观的操作体验。

【免费下载链接】SAE-Res-Qwen3.5-9B-Base-W64K-L0_50 【免费下载链接】SAE-Res-Qwen3.5-9B-Base-W64K-L0_50 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/SAE-Res-Qwen3.5-9B-Base-W64K-L0_50

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐