Определение вероятности последовательности, сгенерированной моделью T5, с помощью HuggingFace
Я использую T5-Large от HuggingFace для вывода. Учитывая предпосылку и гипотезу, мне нужно определить, связаны они или нет. Итак, если я накормлю строку"mnli premise: This game will NOT open unless you agree to them sharing your information to advertisers. hypothesis: Personal data disclosure is discussed."
модель должна вернуть либо ,neutral
, илиcontradiction
.
Хотя я могу определить результат, я не могу определить вероятность сгенерированной последовательности. Например, рассмотрим модель, которая будет сгенерирована для приведенного выше примера. Я также хочу знать, какова вероятность . До сих пор я использовал следующий код,
from transformers import T5Tokenizer, T5ForConditionalGeneration
def is_entailment(premise, hypothesis):
entailment_premise = premise
entailment_hypothesis = hypothesis
token_output = tokenizer("mnli premise: " + entailment_premise + " hypothesis: " + entailment_hypothesis,
return_tensors="pt", return_length=True)
input_ids = token_output.input_ids
output = model.generate(input_ids, output_scores=True, return_dict_in_generate=True, max_new_tokens=15)
entailment_ids = output["sequences"]
entailment = tokenizer.decode(entailment_ids[0], skip_special_tokens=True)
return entailment
tokenizer = T5Tokenizer.from_pretrained('t5-small')
model = T5ForConditionalGeneration.from_pretrained('t5-small', return_dict=True)
premise = "This game will NOT open unless you agree to them sharing your information to advertisers."
hypothesis = "Personal data disclosure is discussed."
print(is_entailment(premise, hypothesis))
Я пробовал использовать оценки, которые мы получаем в качестве вывода, но не уверен, как вычислить вероятность на их основе. То же самое касается последних скрытых состояний, которые могут быть получены в качестве выходных данных изgenerate()
. Я видел в другом вопросе о переполнении стека, в котором предлагалось использовать функцию softmax для последних скрытых состояний, но я не уверен, как это сделать.
Как рассчитать вероятность генерации последовательности? То есть, если я получуentailment
для пары гипотезы и посылки, что было быP(entailment)
?