【问题标题】:How to change parameters of pre-trained longformer model from huggingface如何从拥抱脸更改预训练长形模型的参数
【发布时间】:2021-10-07 12:28:51
【问题描述】:

我正在使用 Hugging-face 预训练的 LongformerModel 模型。我用来提取句子的嵌入。我想更改token lengthmax sentence length 参数,但我无法这样做。这是代码。

model = LongformerModel.from_pretrained('allenai/longformer-base-4096',output_hidden_states = True)
tokenizer = LongformerTokenizer.from_pretrained('allenai/longformer-base-4096')

model.eval()

text=[" I like to play cricket"]

input_ids = torch.tensor(tokenizer.encode(text,max_length=20,padding=True,add_special_tokens=True)).unsqueeze(0)

print(tokenizer.encode(text,max_length=20,padding=True,add_special_tokens=True))

# [0, 38, 101, 7, 310, 5630, 2]

我希望编码器给我一个大小为 20 的列表,因为我传递了一个参数 max_length=20.,但它只返回了大小为 7 的列表?

attention_mask = torch.ones(input_ids.shape, dtype=torch.long, device=input_ids.device)
attention_mask[:, [0,-1]] = 2
outputs = model(input_ids, attention_mask=attention_mask, return_dict=True)

hidden_states = outputs[2]

print ("Number of layers:", len(hidden_states), "  (initial embeddings + 12 BERT layers)")
        layer_i = 0

print ("Number of batches:", len(hidden_states[layer_i]))
        batch_i = 0

print ("Number of tokens:", len(hidden_states[layer_i][batch_i]))
        token_i = 0

print ("Number of hidden units:", len(hidden_states[layer_i][batch_i][token_i]))

输出:

Number of layers: 13   (initial embeddings + 12 BERT layers)
Number of batches: 1
Number of tokens: 512 # How can I change this parameter to pick up my sentence length during run-time
Number of hidden units: 768

如何将标记的数量减少到句子长度而不是 512 ?每次我输入一个新句子时,它都应该增加那个长度。

【问题讨论】:

    标签: python-3.x deep-learning huggingface-transformers huggingface-tokenizers


    【解决方案1】:

    关于填充的问题

    padding=True 将您的输入填充到最长的序列。 padding=max_length 将您的输入填充到指定的 max_length (documentation):

    from transformers import LongformerTokenizer
    
    tokenizer = LongformerTokenizer.from_pretrained('allenai/longformer-base-4096')
    text=[" I like to play cricket"]
    print(tokenizer.encode(text[0],max_length=20,padding='max_length',add_special_tokens=True))
    

    输出:

    [0, 38, 101, 7, 310, 5630, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    

    关于隐藏状态token数量的问题

    Longformer 实现将填充应用于您的序列以匹配注意力窗口大小。您可以在模型配置中看到注意力窗口的大小:

    model.config.attention_window
    

    输出:

    [512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512]
    

    这是对应的代码行:link

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2021-08-16
      • 2021-12-21
      • 1970-01-01
      • 2023-01-31
      • 2021-08-10
      • 2021-12-17
      • 2021-08-08
      • 2021-12-06
      相关资源
      最近更新 更多