Я хочу добавить плотный слой поверх простого преобразователя модели BERT, выводящего необработанные скрытые состояния, а затем точно настроить полученную модель. В частности, я использую эту базовую модель. Вот что должна делать модель:
- Закодируйте предложение (вектор с 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), которую можно полностью настроить?