首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以最佳方式使用SciBERT?

如何以最佳方式使用SciBERT?
EN

Stack Overflow用户
提问于 2021-10-01 13:44:52
回答 1查看 645关注 0票数 0

我试着用伯特模型来进行文本分类。由于课文是关于科学文本的,我打算使用SicBERT预培训模型:https://github.com/allenai/scibert

我遇到了几个限制,我想知道是否有解决办法:

  1. 当我想要进行标记化和批处理时,它只允许我使用max_length of <=512。有没有办法用更多的代币。难道这个512的限制不意味着我实际上没有在训练中使用所有的文本信息吗?有什么解决办法来使用所有的文本吗?
  2. 我尝试将这个预先训练过的库与其他模型一起使用,比如DeBERTa或RoBERTa。但它不让我。我只和伯特合作过。有我能做到的吗?
  3. 我知道这是一个普遍的问题,但是有什么建议说我可以改进我的微调(从数据到超参数等等)?目前,我得到了75%的准确度。谢谢

码:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-02 14:40:12

当我想要进行标记化和批处理时,它只允许我使用max_length of <=512。有没有办法用更多的代币。难道这个512的限制不意味着我实际上没有在训练中使用所有的文本信息吗?有什么解决办法来使用所有的文本吗?

是的,你没有使用完整的文本。这是BERT和T5模型的局限性之一,它们仅限于使用512和1024个令牌。据我所知。

我可以建议您使用LongformerBigbirdReformer模型,它们可以分别处理16k409664k标记的序列长度。这些对于处理更长的文本,比如科学文件来说,真的很好。

我尝试将这个预先训练过的库与其他模型一起使用,比如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超级参数的不同值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69406937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档