您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

LLMs 中 生成概率选择算法Greedy Search 、Beam Search解析

时间:2023-07-16 14:08:27  来源:  作者:机器学习搬运工

回到条件概率语言模型建模:

序列生成条件概率建模

即在当前类GPT 模型建模训练过程中,最终学习到的是   的一个条件概率分布,那么在已知  的情形下如何选择, 这就是本文需要讨论的LLMs 中生成概率选择的两种算法:Greedy Search 和 Beam Search

1.Greedy Search 贪婪搜索算法

Greedy Search 搜索算法思路较简单,依据名称即,每次都选择最大的概率 时候的:

下面给出一个案例:

Greedy Search

上图显示The 开始以最大概率往后查找,得到 (The,nice, woman)系列(图中红线);明显贪婪搜索算法并不能保证这个生成的序列是一个全局概率最大序列(就是在一个相对较低的词后面,可能有一个较高概率的词),而且生成一段序列之后,将会重复自己(这部分将在gpt2-xl)模型进行展示。为了环境忽略一个较低词后面的较高概率的词,Beam Search 登场了。

2.Beam Search

Beam Search 是对Greedy Search 搜索算法的改进,假设num_beams =k,即每次计算top k 个下一个单词的最大序列,进行搜索,通过计算换取时间的方式

下面给出Beam Search 的一个案例, 取k=2:

beam search

("The","nice") -> 0.5

("The","dog") -> 0.4

("The","dog", "has") -> 0.4 * 0.9 =0.45

("The","nice", "woman") -> 0.5 * 0.40 =0.20

即每次查看Top 2 个序列,不断进行扩展,最后选择最大的序列输出。Beam search 算法缓解了当前词后面的词是一个较大概率的问题,但是也不能获取全局最大概率序列。

下面作者将对huggingface 中,gpt2-xl 模型,给出generate 方法在这些生成策略算法选择配置上不同情形下,观察输出结果差异,具体代码如下:

# -*- coding: utf-8 -*-
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

device = "cuda:0" if torch.cuda.is_avAIlable() else "cpu"
n_steps = 256
num_beams = 5


class GPT2:
    def __init__(self, model_name: str = "gpt2-xl"):
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.model = AutoModelForCausalLM.from_pretrained(model_name).to(device)

    def greedy_search_generate(self, input_text: str):
        input_ids = self.tokenizer(input_text, return_tensors="pt")["input_ids"].to(device)
        output = self.model.generate(
            input_ids,
            pad_token_id=50256,
            max_length=n_steps,
            no_repeat_ngram_size=2,
            early_stopping=True)
        output = self.tokenizer.decode(output[0], skip_special_tokens=True)
        return output

    def beam_search(self, input_text: str):
        input_ids = self.tokenizer(input_text, return_tensors="pt")["input_ids"].to(device)
        output = self.model.generate(
            input_ids,
            max_length=n_steps,
            pad_token_id=50256,
            no_repeat_ngram_size=2,
            num_beams=num_beams,
            early_stopping=True
        )
        output = self.tokenizer.decode(output[0], skip_special_tokens=True)
        return output


if __name__ == "__main__":
    input_text = "I enjoy walking with my cute dog"
    gpt = GPT2()
    print("greed_search:n", gpt.greedy_search_generate(input_text))
    print("beam search:n", gpt.beam_search(input_text))

代码运行结果:

greed_search:
 I enjoy walking with my cute dog, and I love to read. I'm a big fan of the Harry Potter series, but I also enjoy the Lord of The Rings, the Hunger Games, The Hobbit, etc.

I'm not a fan, however, of any of those books that are set in the Middle Ages. The only one I've read is The Lord Of The Ring, which I think is a great book, though I don't think it's a good book for children. It's not that I dislike the books, I just don
.

My favorite book is the one that is set during the time of Jesus Christ. That's the book that has the most impact on me. My favorite character is Jesus. He's my favorite because he's so good. His character, his actions, everything about him is so perfect. And I like to think that he is my role model. So I try to be like him. But I can't be. Because I am not like Jesus, because I have a different character. A different personality. One that's more like me, one who is more of a normal person.

beam search:
 I enjoy walking with my cute dog, but I don't want to walk with him in the rain."

"I'm not sure if it's a good idea to take my dog to the park," said one woman. "I think it would be better if I just let him run around the neighborhood with the other dogs."

从测试的输出结果看,个人 感觉 Beam Search 生成质量略高。

I enjoy walking with my cute dog, but I don't want to walk with him in the rain."

"I'm not sure if it's a good idea to take my dog to the park," said one woman. "I think it would be better if I just let him run around the neighborhood with the other dogs."



Tags:LLMs   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
LLMs应用框架:LangChain端到端语言模型
在当今数字化时代,语言处理技术的重要性日益凸显。大语言模型(LLMs)作为其中的重要分支,已经在多个领域取得了显著的进展。然而,如何将这些模型应用到实际场景中,实现端到端的自动...【详细内容】
2023-11-16  Search: LLMs  点击:(167)  评论:(0)  加入收藏
LLMs 中 生成概率选择算法Greedy Search 、Beam Search解析
回到条件概率语言模型建模:序列生成条件概率建模即在当前类GPT 模型建模训练过程中,最终学习到的是 的一个条件概率分布,那么在已知 的情形下如何选择, 这就是本文需要讨论的...【详细内容】
2023-07-16  Search: LLMs  点击:(160)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(12)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(73)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(89)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(62)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(107)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(164)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条