You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装BERT,如何获取Non-contextual Word Embeddings(非上下文词嵌入)?

获取BERT的非上下文词嵌入

BERT本质是上下文依赖的语言模型,但要获取非上下文词嵌入,直接调用它的词嵌入层(Word Embedding Layer)即可——这一层的输出是未经过Transformer编码器处理的原始token嵌入,完全脱离上下文影响。

实现步骤(基于Hugging Face Transformers库)

  • 加载预训练BERT模型与分词器
  • 对目标词进行分词转换
  • 提取词嵌入层的输出或权重矩阵中对应token的向量

代码示例

from transformers import BertTokenizer, BertModel
import torch

# 加载预训练模型(以bert-base-uncased为例,可替换为其他BERT变体)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

# 目标词
target_word = "Apple"
# 分词并转为模型可接受的张量格式
inputs = tokenizer(target_word, return_tensors="pt")
token_ids = inputs['input_ids']

# 方法1:直接从词嵌入层权重中提取向量
word_embedding_layer = model.embeddings.word_embeddings
non_contextual_emb = word_embedding_layer(token_ids).squeeze().detach().numpy()

# 方法2:通过模型前向传播,取最底层的隐藏状态(即词嵌入层输出)
with torch.no_grad():
    outputs = model(**inputs, output_hidden_states=True)
    # hidden_states[0]对应未经过编码器处理的原始词嵌入
    non_contextual_emb = outputs.hidden_states[0].squeeze().detach().numpy()

print(f"#embedding of '{target_word}':")
print(non_contextual_emb)

注意事项

  • 若目标词被分词器拆分为多个subtoken(如罕见词或复合词),可选择取首个subtoken的嵌入,或对所有subtoken的嵌入做平均/求和来代表整个词的非上下文嵌入
  • 不同BERT模型的嵌入维度不同:base系列为768维,large系列为1024维
  • 使用detach().numpy()可将PyTorch张量转换为numpy数组,便于后续计算或存储

内容的提问来源于stack exchange,提问作者edamame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:01:23