生の隠れた状態を出力するベアバートモデルトランスの上に密なレイヤーを追加し、結果として得られるモデルを微調整したいです。具体的には、 この ベースモデルを使用しています。これがモデルがするものです。
これまでのところ、私は文章を首尾よく符号化しました:
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ライブラリを使用して)モデルを構築することができますか。
BERTモデル自体を調整したい場合は、モデルのパラメータを変更する必要があります。これを行うには、おそらくPytorchであなたの仕事をしたいと思うでしょう。これを説明するためのいくつかの大まかなPSUEDOコードがあります。
from torch.optim import SGD
model = ... # whatever model you are using
parameters = model.parameters() # or some more specific set of parameters
optimizer = SGD(parameters,lr=.01) # or whatever optimizer you want
optimizer.zero_grad() # boiler-platy pytorch function
input = ... # whatever the appropriate input for your task is
label = ... # whatever the appropriate label for your task is
loss = model(**input, label) # usuall loss is the first item returned
loss.backward() # calculates gradient
optim.step() # runs optimization algorithm
_
私はあなたの特定のタスクが何であれであれ、非常に面倒で具体的であるため、私はすべての関連する詳細を省きました。 HuggingFaceにはこれを歩く素敵な記事があります ここでは 、あなたが任意のPytorchのものを使用するときにいくつかのPytorchの資料を参照したいと思うでしょう。私はそれを真剣にしようとする前に、 Pytorch Blitz を強くお勧めします。