Как получить вероятность конкретного токена (слова) в предложении с учетом контекста

Я пытаюсь вычислить вероятность или любой тип оценки слов в предложении с помощью НЛП. Я пробовал этот подход с моделью GPT2, используя библиотеку Huggingface Transformers, но я не смог получить удовлетворительных результатов из-за однонаправленного характера модели, который для меня, казалось, не предсказывался в контексте. Поэтому мне было интересно, есть ли способ вычислить вышесказанное с помощью BERT, поскольку он двунаправленный.

Я нашел этот пост, который я случайно увидел другим день, но не нашел ответа, который был бы полезен и для меня.

Надеюсь, я смогу получить идеи или решение для этого. Любая помощь приветствуется. Спасибо.


person D.Perera    schedule 14.05.2020    source источник


Ответы (1)


BERT обучен как модель языка с масками, то есть он обучен предсказывать токены, которые были заменены токеном [MASK].

from transformers import AutoTokenizer, BertForMaskedLM

tok = AutoTokenizer.from_pretrained("bert-base-cased")
bert = BertForMaskedLM.from_pretrained("bert-base-cased")

input_idx = tok.encode(f"The {tok.mask_token} were the best rock band ever.")
logits = bert(torch.tensor([input_idx]))[0]
prediction = logits[0].argmax(dim=1)
print(tok.ids_to_tokens[prediction[2].numpy().tolist()])

Он печатает номер токена. 11581, который:

Битлз

Сложность в том, что слова могут быть разбиты на несколько подслов. Вы можете смоделировать это, добавив несколько [MASK] токенов, но тогда у вас возникнет проблема, как надежно сравнить оценки предсказания с разной длиной. Вероятно, я бы усреднил вероятности, но, возможно, есть способ получше.

person Jindřich    schedule 14.05.2020
comment
Спасибо за ответ. Мне было интересно, могу ли я предсказать позиции для размещения токенов [MASK] в искаженном предложении в зависимости от вероятности слов, чтобы токены [MASK] можно было предсказать, используя моделирование замаскированного языка, чтобы получить надлежащее чистое грамматически правильное предложение. - person D.Perera; 21.05.2020
comment
@ D.Perera, вы можете найти эту работу интересной. Вам просто нужно иметь обширное пространство для альтернативных правок, а затем использовать модель с учетом вероятностей с жадным поиском, чтобы выбрать лучшее редактирование. - person Lukas; 05.05.2021