yutianCHN 2023-04-10 12:25 采纳率: 0%
浏览 51
已结题

如何使用transformers t5计算在给定一个batch的encoder input下label的概率?

如何计算?
有回答称使用logit来计算。但是这种计算岂不是句子越长概率越低了?

标题的问题是给定label的情况下。
那么在没给定label的情况下,又如何得到generate出来的句子的概率呢?(理论上不应该再把这个当做label放进t5重新算了)。注意,这句话不是beam search出来的。这句话是beam=1同时开启sample得到的,返回值不会包括sequences score。

  • 写回答

4条回答 默认 最新

  • 「已注销」 2023-04-10 13:52
    关注

    引用new bing作答:
    要计算给定一个batch的encoder input下label的概率,可以使用T5模型的generate方法。具体来说,需要将输入编码为T5的encoder输入,然后使用T5模型的generate方法来生成预测结果,最后使用softmax函数将结果转换为概率值。

    具体步骤如下:

    1 使用T5的tokenizer将输入文本编码为T5的encoder输入。这包括将文本分段、添加特殊标记等操作。

    2 使用T5模型的generate方法生成预测结果。这包括将encoder输入输入到T5的encoder中,然后使用T5的decoder来生成预测结果。

    3 将生成的结果输入到softmax函数中,将结果转换为概率值。

    如果要计算在没有给定label的情况下,生成的句子的概率,可以使用T5模型的score方法。具体来说,需要将生成的句子编码为T5的输入,并将其输入到T5模型的score方法中,该方法会返回一个表示该句子概率的值。不过需要注意的是,T5模型在score方法中使用的是logits,而不是概率值。因此,如果需要得到概率值,可以使用softmax函数来将logits转换为概率值。
    以下是一个使用transformers库中的T5模型来计算给定一个batch的encoder input下label的概率的Python代码示例:

    from transformers import T5Tokenizer, T5ForConditionalGeneration
    import torch
    
    # 初始化T5 tokenizer和模型
    tokenizer = T5Tokenizer.from_pretrained('t5-base')
    model = T5ForConditionalGeneration.from_pretrained('t5-base')
    
    # 定义输入文本
    inputs = ['This is the first input.', 'This is the second input.']
    
    # 对输入文本进行编码
    input_ids = tokenizer.batch_encode_plus(inputs, padding=True, truncation=True, return_tensors="pt")["input_ids"]
    
    # 生成预测结果
    outputs = model(input_ids=input_ids)
    
    # 获取logits并使用softmax函数将其转换为概率值
    logits = outputs.logits
    probs = torch.nn.functional.softmax(logits, dim=-1)
    
    # 输出结果
    print(probs)
    

    如果要计算生成的句子的概率,可以使用以下代码示例:

    # 定义要生成的文本
    text = 'This is the generated text.'
    
    # 对生成的文本进行编码
    input_ids = tokenizer.encode(text, return_tensors="pt")
    
    # 计算生成文本的概率
    score = model.score(input_ids)
    
    # 将logits转换为概率值
    prob = torch.nn.functional.softmax(score, dim=-1)
    
    # 输出结果
    print(prob)
    

    需要注意的是,在这个例子中,我们使用了T5模型的score方法来计算生成文本的概率。该方法返回一个表示该句子概率的值。不过需要注意的是,T5模型在score方法中使用的是logits,而不是概率值。因此,我们需要使用softmax函数来将logits转换为概率值。

    评论

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 创建了问题 4月10日