Сначала я точно настраиваю модель Берта для задачи классификации текста, а затем я хочу получить вложения точно настроенной модели в TensorFlow. К сожалению, я могу сказать только output_hidden_states=True
в первой строке, где я загружаю предварительно обученную модель Берта, но не на втором этапе, когда я создаю tf.Keras.Model
. Вот код того, как я создаю и обучаю модель:
max_len = 55
from transformers import BertConfig, BertTokenizer, TFBertModel
def build_custome_model():
bert_encoder = TFBertModel.from_pretrained(Base_BERT_Path)
input_word_ids = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_word_ids")
input_mask = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_mask")
input_type_ids = tf.keras.Input(shape=(max_len,), dtype=tf.int32, name="input_type_ids")
embedding = bert_encoder([input_word_ids, input_mask, input_type_ids])[0]
clf_output = embedding[:,0,:]
net = tf.keras.layers.Dropout(0.4)(clf_output)
output = tf.keras.layers.Dense(5, activation='softmax')(net)
model = tf.keras.Model(inputs=[input_word_ids, input_mask, input_type_ids], outputs=output)
model.compile(tf.keras.optimizers.Adam(lr=1e-5), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return model
Затем я тренирую модель на наборе данных с двумя предложениями и в качестве оценки их сходства
#------Training with stratifiedkfold-------
k = 5
kfold = StratifiedKFold(n_splits = k, shuffle = True)
for i, (train_idx, val_idx) in enumerate(kfold.split(first_sentences, labels.score), 1):
epoch_evaluation = {}
train_input = create_input(np.array(first_sentences)[train_idx], np.array(second_sentences)[train_idx], tokenizer, max_len=max_seq_length)
validation_input = create_input(np.array(first_sentences)[val_idx], np.array(second_sentences)[val_idx], tokenizer, max_len=max_seq_length)
history = model.fit(x = train_input, y = labels.loc[train_idx, 'score'],
validation_data= (validation_input, labels.loc[val_idx, 'score']),
epochs = 5,
verbose = 1,
batch_size = 8)
Моя цель - иметь в конце модель, которая обучена на этом наборе данных и может выводить вложения (первый уровень скрытых состояний (output [2] [0])) всякий раз, когда я даю ей предложение, чтобы я мог получить означает всех точно настроенных встраиваний лексем в предложение.