Как обновить словарный запас предварительно обученной модели Берта, выполняя мое собственное тренировочное задание? - PullRequest
3 голосов
/ 17 февраля 2020

Сейчас я работаю над задачей прогнозирования замаскированного слова с использованием модели 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», описанный выше метод не будет работать, так как выходная матрица не дает их вероятности. Та же проблема появится и в том случае, если в параметре нет ни одного слова.

Должен ли я обновить словарный запас и как это сделать? Или как натренировать модель для добавления новых слов на основе предварительной подготовки?

...