Bert Встраиваемый элемент # 308 - PullRequest
2 голосов
/ 24 января 2020

Я немного потренировался с 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')

. Я заметил, что практически каждое слово, которое я смотрел на элементе № 308 в векторе, вставляющем вектор длиной 768: Отрицательный выброс со значениями ниже -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][:]
...