Сейчас я работаю над задачей прогнозирования замаскированного слова с использованием модели BERT. В отличие от других, ответ должен быть выбран из указанных c вариантов.
Например:
sentence: "In my daily [MASKED], ..."
options: A.word1 B.word2 C.word3 D.word4
the predict word will be chosen from four given words
Я использую BertForMaskedLM с обнимающимся лицом для выполнения этой задачи. Эта модель даст мне матрицу вероятностей, которая представляет вероятность появления каждого слова в [MASK], и мне просто нужно сравнить вероятность слова в опциях, чтобы выбрать ответчик.
# Predict all tokens
with torch.no_grad():
predictions = model(tokens_tensor, segments_tensors)
#predicted_index = torch.argmax(predictions[0, masked_index]).item()
#predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
A = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option1])]
B = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option2])]
C = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option3])]
D = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option4])]
#And then select from ABCD
Но проблема в том, что: если параметры отсутствуют в «bert-vocabulary.txt», описанный выше метод не будет работать, так как выходная матрица не дает их вероятности. Та же проблема появится и в том случае, если в параметре нет ни одного слова.
Должен ли я обновить словарный запас и как это сделать? Или как натренировать модель для добавления новых слов на основе предварительной подготовки?