또한 @ noob333이 설명 한 이유로 첫 번째 대답이 잘못되었다고 생각합니다.
그러나 Bert는 언어 모델로 즉시 사용할 수 없습니다. Bert는 당신 p(word|context(both left and right) )
에게 원하는 것을 계산하는 것 p(word|previous tokens(only left contex))
입니다. 저자는 여기에 설명합니다 : https://github.com/google-research/bert/issues/35 왜 영화로 사용할 수 없는지.
그러나 https://arxiv.org/pdf/1902.04094.pdf에 설명 된대로 Bert를 적용하여 언어 모델로 사용할 수 있습니다.
그러나 동일한 repo ( https://github.com/huggingface/pytorch-pretrained-BERT ) 에서 열린 ai gpt 또는 gpt-2 사전 포함 모델을 사용할 수 있습니다
다음은 gpt 모델을 사용하여 복잡성을 계산하는 방법입니다 ( https://github.com/huggingface/pytorch-pretrained-BERT/issues/473 )
import math
from pytorch_pretrained_bert import OpenAIGPTTokenizer, OpenAIGPTModel, OpenAIGPTLMHeadModel
# Load pre-trained model (weights)
model = OpenAIGPTLMHeadModel.from_pretrained('openai-gpt')
model.eval()
# Load pre-trained model tokenizer (vocabulary)
tokenizer = OpenAIGPTTokenizer.from_pretrained('openai-gpt')
def score(sentence):
tokenize_input = tokenizer.tokenize(sentence)
tensor_input = torch.tensor([tokenizer.convert_tokens_to_ids(tokenize_input)])
loss=model(tensor_input, lm_labels=tensor_input)
return math.exp(loss)
a=['there is a book on the desk',
'there is a plane on the desk',
'there is a book in the desk']
print([score(i) for i in a])
21.31652459381952, 61.45907380241148, 26.24923942649312