Как я могу показать несколько предсказаний следующего слова в предложении? - PullRequest
2 голосов
/ 16 апреля 2020

Я использую предварительно обученную модель GPT-2. код, над которым я работаю, получит предложение и сгенерирует следующее слово для этого предложения. Я хочу напечатать несколько прогнозов, как три первых прогноза с наилучшими вероятностями! например, если я добавлю в предложение «Я интересный ....» предсказания: «Книги», «История», «Новости»

, есть ли способ изменить этот код, чтобы показывать эти предсказания вместо одного? ?!

также в коде есть две части, я не понимаю, в чем смысл чисел в (predictions[0, -1, :])? и почему мы ставим [0] после predictions = output[0]?


import torch
from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel

# Load pre-trained model tokenizer (vocabulary)
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# Encode a text inputs
text = "The fastest car in the  "
indexed_tokens = tokenizer.encode(text)


# Convert indexed tokens in a PyTorch tensor
tokens_tensor = torch.tensor([indexed_tokens])


# Load pre-trained model (weights)
model = GPT2LMHeadModel.from_pretrained('gpt2')

# Set the model in evaluation mode to deactivate the DropOut modules
model.eval()

# If you have a GPU, put everything on cuda
#tokens_tensor = tokens_tensor.to('cuda')
#model.to('cuda')

# Predict all tokens
with torch.no_grad():
    outputs = model(tokens_tensor)
    predictions = outputs[0]
    #print(predictions)


# Get the predicted next sub-word
predicted_index = torch.argmax(predictions[0, -1, :]).item()
predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])

# Print the predicted word
#print(predicted_index)
print(predicted_text)

Результат для приведенного выше кода будет:

The fastest car in the world.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать torch.topk следующим образом:

predicted_indices = [x.item() for x in torch.topk(predictions[0, -1, :],k=3)]

...