5分钟NLPPython文本生成的BeamSearch解码
贪婪搜索是在每个时间步中选择概率最高的单词,也是我们最常用的一种方法,Beam Search不取每个标记本身的绝对概率,而是考虑每个标记的所有可能扩展。然后根据其对数概率选择最合适的标记序列。
例如令牌的概率如下所示:
例如,Pancakes + looks时间段1的概率等效于:Pancakes looks so = log(0.2) + log(0.7)= -1.9 Pancakes looks fluffy = log(0.2) + log(0.3)= -2.8
所以我们需要定义一个函数来完成整句的概率计算:import torch.nn.functional as F def log_probability_single(logits, labels): logp = F.log_softmax(logits, dim=-1) logp_label = torch.gather(logp, 2, labels.unsqueeze(2)).squeeze(-1) return logp_label def sentence_logprob(model, labels, input_len=0): with torch.no_grad(): result = model(labels) log_probability = log_probability_single(result.logits[:, :-1, :], labels[:, 1:]) sentence_log_prob = torch.sum(log_probability[:, input_len:]) return sentence_log_prob.cpu().numpy()
接下来,可以将其应用于贪婪搜索解码方法生成的输出,并计算生成的序列的对数概率。
在此示例中,我将在村上春木的书中简要介绍:1Q84。input_sentence = "A love story, a mystery, a fantasy, a novel of self-discovery, a dystopia to rival George Orwell’s — 1Q84 is Haruki Murakami’s most ambitious undertaking yet: an instant best seller in his native Japan, and a tremendous feat of imagination from one of our most revered contemporary writers." max_sequence = 100 input_ids = tokenizer(input_sentence, return_tensors="pt")["input_ids"].to(device) output = model.generate(input_ids, max_length=max_sequence, do_sample=False) greedy_search_output = sentence_logprob(model, output, input_len=len(input_ids[0])) print(tokenizer.decode(output[0]))
我们可以看到生成的序列的对数概率为-52.31。
现在,我们将并比较通过Beam Search生成的序列的对数概率得分,得分越高潜在结果越好。
我们可以增加n-gram惩罚参数no_repeat_ngram_size,这有助于减少输出中的重复生成的序列。beam_search_output = model.generate(input_ids, max_length=max_sequence, num_beams=5, do_sample=False, no_repeat_ngram_size=2) beam_search_log_prob = sentence_logprob(model, beam_search_output, input_len=len(input_ids[0])) print(tokenizer.decode(beam_search_output[0])) print(f" log_prob: {beam_search_log_prob:.2f}")
输出如下:
分时和连贯性要比贪婪的方法好很多,对吧。
作者:Jason LZP
福启新岁,万事顺遂若干年后,回首2022,注定是刻在人们记忆里难以抹去的岁月。在严防死守的第三个年头,仍然看不到疫情清零的曙光。看到的是疫情影响下众生的艰难,当然,也更多的是看到国家为保护老百姓所做
启一元复始,待四序更新!写在20222023跨年夜,记录一下,愿所有不好的一切如每一个昨日般,一去不复返。愿2023,好运翻番,健康平安,幸福加倍!很遗憾还是没有挺住,成了小阳人,最不愿接受的事情还是发生
写在新年做个好废物躺在床上刷着手机,朋友圈开始列队辞旧迎新,大家各显身手,图文视频皆充满了喜悦的气息,有吃到美食的喜悦,有亲友爱人陪伴的喜悦,有猫狗双全的喜悦,这些喜悦真正地让我意识到了2022就这
总结在头条写作的这半个多月是我最心平气和的时候转眼之间,2022年即将过去,新的一年即将到来。现在,天,已经黑了下来。静静的想着,自从开始在头条写作以后的种种心理变化。下载头条,其实已经不短了。以前,就是刷刷新闻,看看八卦,简
泰国第三大岛苏梅岛酒店怎么选?苏梅岛简介苏梅岛是泰国的第三大岛,隶属苏叻他尼府(suratthani)岛上的椰树随处可见,所以,此岛又被称为椰子岛苏梅岛上海滩众多,处处水清沙白,景致迷人,查温海滩绵延6公里,月
休闲度假养老的好去处,山东龙口市背景介绍龙口市是山东省辖县级市,古称黄县,现由烟台市代管。位于山东省东北部,胶东半岛西北部,西北临渤海。上有天堂,下有苏杭。人间苏杭,不如蓬黄。蓬即指蓬莱,黄就是黄县,现在的龙口。
元旦期间开阳县接待游客9万人次辞旧迎新春,新年新气象,随着疫情防控优化政策的出台,开阳县旅游业在2023年迎来了新的发展。元旦假日期间,共接待游客9万人次,旅游综合收入实现0。41亿元。开阳县依托丰富的旅游资源
2023艾山庙会来了!临近春节,年味渐浓处处洋溢着喜庆的气氛要说咱邳州过年必不可少的一项娱乐活动就是逛庙会告诉大家一个好消息今年的艾山庙会在大家的期盼中又回来啦2023艾山庙会火热来袭!这里有丰富多彩的
阳过二十天,阴霾常相随二十天前核酸检测混管异常,单管检测确诊阳性。随后就是皮麻骨酸的难受,感觉像患了病毒感冒。之前身体有毛病的地方尤其难受,比如我有颈椎病腰椎病咽炎等,感觉这些部位相当难受。虽然喝了三九
阳过以后,虚弱无力?老中医伯父推荐!阳完以后浑身乏力,第一,我们现在要补充好营养,比如说,鸡蛋了牛奶,肉食应该好好的补充,就增加他的抵抗力。第二,就是要好好的休息,这段时间不要加班,不要熬夜什么的,要早睡早起。适当的
一个人徘徊海边文曙光朔风起,万物藏,夏日游人如织的海滨变得人影稀疏,冷冷清清。踱步沙滩,凛凛寒气从四面八方围拥过来,我打了一个寒噤,赶紧裹紧衣帽。昂首望云天,天空高远,白云悠悠。举目观苍海,海面