我想在输出原始隐藏状态的裸BERT模型转换器的顶部添加一个密集层,然后微调生成的模型。具体来说,我使用的是this基本模型。这就是模型应该做的:
到目前为止,我已经成功地对以下句子进行了编码:
from sklearn.neural_network import MLPRegressor
import torch
from transformers import AutoModel, AutoTokenizer
# List of strings
sentences = [...]
# List of numbers
labels = [...]
tokenizer = AutoTokenizer.from_pretrained("dbmdz/bert-base-italian-xxl-cased")
model = AutoModel.from_pretrained("dbmdz/bert-base-italian-xxl-cased")
# 2D array, one line per sentence containing the embedding of the first token
encoded_sentences = torch.stack([model(**tokenizer(s, return_tensors='pt'))[0][0][0]
for s in sentences]).detach().numpy()
regr = MLPRegressor()
regr.fit(encoded_sentences, labels)
通过这种方式,我可以通过输入编码的句子来训练神经网络。然而,这种方法显然不能微调基本的伯特模型。有人能帮我吗?我如何构建一个可以完全微调的模型(可能在pytorch中或使用Huggingface库)
有两种方法:由于您希望为类似于分类的下游任务微调模型,因此可以直接使用:
BertForSequenceClassification
类。在768的输出维度上执行逻辑回归层的微调或者,您可以定义一个自定义模块,该模块基于预先训练的权重创建一个bert模型,并在其上添加层
如果你想调整伯特模型本身,你需要修改模型的参数。要做到这一点,您很可能希望使用PyTorch完成您的工作。下面是一些粗略的psuedo代码来说明:
我省略了所有相关的细节,因为它们非常乏味,而且对于您的具体任务都是特定的。Huggingface有一篇很好的文章介绍了这是一篇更详细的文章here,当您使用任何pytorch内容时,您肯定会想参考一些pytorch文档。我强烈推荐pytorch blitz,然后再尝试做任何严肃的事情
相关问题 更多 >
编程相关推荐