国科网

2025-02-06 14:52:31  星期四
立足国科融媒,服务先进科技
自然语言生成任务中的五种采样方法介绍和Pytorch代码实现

点赞

0
发布时间:2024年02月20日 浏览量:85次 所属栏目:人工智能 发布者:田佳恬

在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。

1、Greedy Decoding

Greedy Decoding在每个时间步选择当前条件概率最高的词语作为输出,直到生成结束。在贪婪解码中,生成模型根据输入序列,逐个时间步地预测输出序列中的每个词语。在每个时间步,模型根据当前的隐藏状态和已生成的部分序列计算每个词语的条件概率分布,模型选择具有最高条件概率的词语作为当前时间步的输出。这个词语成为下一个时间步的输入,生成过程持续直到满足某种终止条件,比如生成了指定长度的序列或者生成了特殊的结束标记。

这种方法简单高效,每个时间步只需计算当前条件概率最高的词语,因此计算速度较快。但是由于每个时间步只考虑当前条件概率最高的词语,贪婪解码可能会陷入局部最优解,而无法获得全局最优解。这可能导致生成的文本缺乏多样性或不准确。

尽管贪婪解码存在一些局限性,但它仍然是许多序列生成任务中常用的一种方法,特别是在对速度要求较高或者任务较为简单的情况下。

 def greedy_decoding(input_ids, max_tokens=300):
     with torch.inference_mode():
         for _ in range(max_tokens):
             outputs = model(input_ids)
             next_token_logits = outputs.logits[:, -1, :]
             next_token = torch.argmax(next_token_logits, dim=-1)
             if next_token == tokenizer.eos_token_id:
                 break
             input_ids = torch.cat([input_ids, rearrange(next_token, 'c -> 1 c')], dim=-1)
         generated_text = tokenizer.decode(input_ids[0])
     return generated_text

分享说明:转发分享请注明出处。

    热点图讯
    最新图讯
    相关图讯
    网站简介  |   联系我们  |   广告服务  |   监督电话
    本网站由国科网运营维护 国科网讯(北京)技术有限公司版权所有  咨询电话:010-88516927
    地址:北京市海淀区阜石路甲69号院1号楼1层一单元114
    ICP备案号:京ICP备15066964号-8   违法和不良信息举报电话:010-67196565
    12300电信用户申诉受理中心   网络违法犯罪举报网站   中国互联网举报中心   12321网络不良与垃圾信息举报中心   12318全国文化市场举报网站
    代理域名注册服务机构:阿里巴巴云计算(北京)有限公司