我试着用伯特模型来进行文本分类。由于课文是关于科学文本的,我打算使用SicBERT预培训模型:https://github.com/allenai/scibert。
我遇到了几个限制,我想知道是否有解决办法:
max_length of <=512。有没有办法用更多的代币。难道这个512的限制不意味着我实际上没有在训练中使用所有的文本信息吗?有什么解决办法来使用所有的文本吗?码:
tokenizer = BertTokenizer.from_pretrained('allenai/scibert_scivocab_uncased')
encoded_data_train = tokenizer.batch_encode_plus(
df_train.text.values,
add_special_tokens=True,
return_attention_mask=True,
padding=True,
max_length=256
)
input_ids_train = encoded_data_train['input_ids']
attention_masks_train = encoded_data_train['attention_mask']
labels_train = torch.tensor(df_train.label.values)
dataset_train = TensorDataset(input_ids_train, attention_masks_train, labels_train)
dataloader_train = DataLoader(dataset_train,
sampler=RandomSampler(dataset_train),
batch_size=batch_size)
model = BertForSequenceClassification.from_pretrained('allenai/scibert_scivocab_uncased',
num_labels=len(labels),
output_attentions=False,
output_hidden_states=False)
epochs = 1
optimizer = AdamW(model.parameters(), lr=1e-5, eps=1e-8)
scheduler = get_linear_schedule_with_warmup(optimizer,
num_training_steps=len(dataloader_train)*epochs)发布于 2021-10-02 14:40:12
当我想要进行标记化和批处理时,它只允许我使用max_length of <=512。有没有办法用更多的代币。难道这个512的限制不意味着我实际上没有在训练中使用所有的文本信息吗?有什么解决办法来使用所有的文本吗?
是的,你没有使用完整的文本。这是BERT和T5模型的局限性之一,它们仅限于使用512和1024个令牌。据我所知。
我可以建议您使用Longformer、Bigbird或Reformer模型,它们可以分别处理16k、4096和64k标记的序列长度。这些对于处理更长的文本,比如科学文件来说,真的很好。
我尝试将这个预先训练过的库与其他模型一起使用,比如DeBERTa或RoBERTa。但它不让我。我只和伯特合作过。有我能做到的吗?
SciBERT实际上是一个训练有素的伯特模型。有关更多细节,请参见此问题,其中提到将伯特转换为ROBERTa的可行性:
Since you're working with a BERT model that was pre-trained, you unfortunately won't be able to change the tokenizer now from a WordPiece (BERT) to a Byte-level BPE (RoBERTa).
我知道这是一个普遍的问题,但是有什么建议说我可以改进我的微调(从数据到超参数等等)?目前,我得到了79%的准确度。
首先,我将尝试调优最重要的超参数learning_rate。然后,我将探讨调度器的AdamW优化器和num_warmup_steps超级参数的不同值。
https://stackoverflow.com/questions/69406937
复制相似问题