【发布时间】:2021-01-17 05:23:58
【问题描述】:
我想在输出原始隐藏状态的裸 BERT 模型转换器之上添加一个密集层,然后微调生成的模型。具体来说,我使用的是this 基本模型。这是模型应该做的:
- 对句子进行编码(句子的每个标记包含 768 个元素的向量)
- 只保留第一个向量(与第一个标记相关)
- 在该向量顶部添加一个密集层,以获得所需的转换
到目前为止,我已经成功编码了句子:
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)
通过这种方式,我可以通过输入编码句子来训练神经网络。然而,这种方法显然没有微调基础 BERT 模型。有谁能够帮我?如何构建一个可以完全微调的模型(可能在 pytorch 中或使用 Huggingface 库)?
【问题讨论】:
标签: python python-3.x neural-network pytorch huggingface-transformers