我已经开始使用bert Embedding进行一些练习。具体来说,我在PyTorch库中使用了基于berT的Uncased模型
import torch
from pytorch_pretrained_bert import bertTokenizer,bertModel,bertForMaskedLM
tokenizer = bertTokenizer.from_pretrained('bert-base-uncased')
model = bertModel.from_pretrained('bert-base-uncased')
我注意到,对于我看过的几乎每个词,在768位bert嵌入的bert元素中,元素#308都是负负离群值,其值小于-2,可能有一半时间小于-4。>
这真的很奇怪。我试图在Google上搜索有关“伯特嵌入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][:]