我一直在练习 Bert Embedding。具体来说,我将 BERT-Base Uncased 模型与 PyTorch 库一起使用
import torch
from pytorch_pretrained_bert import BertTokenizer, BertModel, BertForMaskedLM
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
我注意到,对于我查看过的几乎每个单词,bert 嵌入 768 长向量中的元素 #308 都是负异常值,其值低于 -2,可能有一半时间低于 -4。
这真的很奇怪。我试图用谷歌搜索有关“bert embedding 308”的信息,但找不到任何东西。
我想知道这种“现象”是否有任何解释。
这是我提取嵌入的例程:
def bert_embedding(text, bert_model, bert_tokenizer, layer_number = 0):
marked_text = "[CLS] " + text + " [SEP]"
#the default is the last layer: 0-1 = -1
layer_number -= 1
tokenized_text = bert_tokenizer.tokenize(marked_text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
segments_ids = [1] * len(tokenized_text)
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])
with torch.no_grad():
encoded_layers, _ = bert_model(tokens_tensor, segments_tensors)
return encoded_layers[layer_number][0][:]