transformers中生成模型(GenerationModel)如何获取生成路径的分数

import transformers
print(transformers.__version__)
from transformers import BertTokenizer, BartForConditionalGeneration
bart_path="/home/xhsun/NLP/huggingfaceModels/Chinese/chinese-bart-base/"
tokenizer = BertTokenizer.from_pretrained(bart_path)
model = BartForConditionalGeneration.from_pretrained(bart_path)

我的版本是4.15.0

in_sentence='华盛顿是[MASK]的首都'
print(model.config.is_encoder_decoder)
input_ids = tokenizer.encode(in_sentence, return_tensors='pt')
num_beams=4
model.config.num_return_sequences=num_beams
pred_ids = model.generate(input_ids, num_beams=num_beams, max_length=20,return_dict_in_generate=True,output_scores=True)
  • 默认num_beams是1,现在设置beam search的束宽是4
  • model.config.num_return_sequences=num_beams的作用是返回num_beams条路径(默认只返回分数最高的)
  • return_dict_in_generate=True,output_scores=True的作用是让模型同时返回路径和对应的分数。这两个参数默认都是False。
print(pred_ids.keys())
print(pred_ids['sequences'])
print(pred_ids['sequences_scores'])

在这里插入图片描述

print(in_sentence)
for output_path_ids,path_score in zip(pred_ids['sequences'],pred_ids['sequences_scores']):
    print("Path ids: ",output_path_ids.tolist(),'Path score: ',path_score.item())
    print(tokenizer.decode(output_path_ids,skip_special_tokens=True))
    print('-------------------------------')

在这里插入图片描述

返回的num_beams个路径已经是按照“分数”排序的,这个“分数”是log后的值,取以e为底即可找到对应的概率
在这里插入图片描述

transformers所有生成模型共用一个generate方法,该方法写在generation_utils.py中,其它文件是没有generate方法的。
class GenerationMixin这个类里包含了所有需要用到的生成函数,同时该类混在PreTrainedModel内,所以所有继承PreTrainedModel的类都具有generate等生成方法

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值