趋近智
可视化注意力模式提供了一种了解模型关注点的方式,但这不能直接告诉我们每个层生成的高维隐藏状态向量 (vector)中编码了哪种语言或语义信息。这些通常具有数千维的向量,是Transformer的内部数据流通形式,将信息从一层传递到下一层。为了理解这些表示捕获了什么,我们采用一种称为探查的技术。
探查涉及训练简单的辅助模型,称为探针,以直接从LLM的内部表示中预测特定的属性。其核心思想是:如果一个简单的探针能够仅使用特定层的隐藏状态向量作为输入,准确预测某个属性(例如词性标签或依存关系),那么该信息可能被明确编码或至少在该表示中是线性可分离的。我们不太关心构建属性本身的最佳预测器;相反,我们将探针的性能用作评估LLM表示质量的诊断工具。
典型的探查流程包括以下几个步骤:
我们考虑探查预训练 (pre-training)的Transformer模型(如BERT或GPT变体)中的词性(POS)信息。
1. 数据: 我们需要一个带有词性标签的语料库(例如,Universal Dependencies English Web Treebank)。 2. 表示: 我们将语料库中的句子输入到我们冻结的LLM中,并从例如第6、12和18层收集每个token的隐藏状态向量 (vector)。 3. 探针: 我们选择一个简单的线性分类器。 4. 训练与评估: 对于每一层,我们训练一个单独的线性探针,仅根据来自该层的隐藏状态向量来预测每个token的词性标签。
这是一个PyTorch代码片段,说明了表示提取和探针定义:
import torch
import torch.nn as nn
from transformers import AutoModel, AutoTokenizer
# 加载预训练模型和分词器
model_name = "bert-base-uncased" # 或任何其他模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
model.eval() # 将模型设置为评估模式
# 冻结模型参数
for param in model.parameters():
param.requires_grad = False
# 示例句子和词性标签(请替换为实际数据集加载)
sentence = "Probing helps analyze model representations."
# 假设标签是 ['名词', '动词', '动词', '名词', '名词', '标点符号']
# 实际操作中,请仔细对齐分词与标签
inputs = tokenizer(sentence, return_tensors="pt")
# 从特定层(例如第8层)提取隐藏状态
target_layer = 8
with torch.no_grad():
outputs = model(**inputs, output_hidden_states=True)
# hidden_states 是一个元组:(嵌入层, 第1层, ..., 第N层)
layer_representations = outputs.hidden_states[target_layer]
# 形状:[批大小, 序列长度, 隐藏大小]
# 假设我们已经提取了表示和相应的
# 许多示例的词性标签ID
# representations_tensor: [示例数量, 隐藏大小]
# labels_tensor: [示例数量]
# 定义一个简单的线性探针
hidden_size = layer_representations.shape[-1]
num_pos_tags = 17 # UD EWT中唯一词性标签的示例数量
probe_classifier = nn.Linear(hidden_size, num_pos_tags)
# --- 训练循环 ---
# 标准的PyTorch训练循环如下:
# - 定义损失函数(例如 CrossEntropyLoss)
# - 定义优化器(例如 AdamW,仅优化
# probe_classifier.parameters())
# - 遍历批次的 (representations_tensor, labels_tensor)
# - 计算损失,反向传播,更新探针权重
# - 在验证集上评估
# --------------------
# 训练完成后,在表示的测试集上评估 probe_classifier。
探查实验的结果可能非常具有启发性:
比较显示,词性标注准确率在模型层中比依存关系准确率更早达到峰值。
探查可应用于广泛的语言和语义现象:
探查是一种有用的分析工具,但注意其局限性很重要:
尽管有这些方面,探查仍为理解大型语言模型学习到的内部知识结构提供了宝贵的看法。通过系统地检视不同类型的信息在各层中是如何表示的,我们能更好地理解这些模型如何处理语言,这能为调试、模型改进以及构建更可靠、更易解释的系统提供依据。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•