LLM模型 贪婪、温度、Top-k、核采样方式的区别---附代码与示例

LLM模型 贪婪、温度、Top-k、核采样方式的区别—附代码与示例

在自然语言生成任务中,不同的采样技术用于从语言模型的输出中选择下一个生成的单词或词语。这些技术包括贪婪采样、温度采样、Top-k采样和核(Nucleus)采样。它们在选择生成单词的过程中有不同的策略,本文将介绍这四种采样方式的区别。

1. 贪婪采样 (Greedy Sampling)

贪婪采样是一种直接选择最可能的下一个词的策略。具体步骤为:

  • 从模型输出的logits中,找到概率最大的那个词,直接选择它作为输出。

实现代码

在这里插入图片描述

优点

  • 简单且计算效率高。
  • 保证每一步选择最有可能的结果。

缺点

  • 可能会导致生成的文本非常重复和缺乏多样性。
  • 贪婪采样只关注当前概率最大的词,忽略了其他潜在的好选择,容易陷入局部最优解。

2. 带温度的采样 (Temperature Sampling)

温度采样通过引入一个温度参数来调整输出概率的分布,以控制生成文本的多样性。温度 T 的作用是平滑或锐化概率分布:

  • T = 1 时,采样为标准随机采样。
  • T < 1 时,概率分布变得更尖锐,模型更倾向于选择最可能的词。
  • T > 1 时,概率分布变得更加平滑,模型会更多地探索低概率的词。

实现代码

在这里插入图片描述

优点

  • 提供了生成文本的多样性,尤其是在温度高时。
  • 通过调整温度参数,可以控制探索(随机性)与利用(选择高概率词)之间的平衡。

缺点

  • 温度的选择需要仔细调节,不同任务或场景下对温度的需求可能不同。
  • 温度过低时,生成的文本趋向于贪婪采样;温度过高时,生成的文本可能过于随机。

3. Top-k采样

Top-k采样限制了每次生成时候的候选词数量,模型只会从概率前k个最高的词中进行采样,而忽略其他可能性较小的词。

实现代码

在这里插入图片描述

优点

  • 提供了对生成词汇的严格控制,避免生成概率非常低的词。
  • 通过限制候选词的数量,避免了一些罕见或不合逻辑的词被选中。

缺点

  • 需要设定一个合适的 k 值,如果 k 值太小,生成的文本可能会缺乏多样性;如果 k 值太大,则效果与标准采样相似。

4. 核采样 (Nucleus Sampling)

核采样是一种自适应的采样方法,它选择的候选词集合 V(p) 是满足累计概率和大于或等于给定阈值 p 的最小词汇子集。与Top-k采样不同,核采样的候选词数量不是固定的,而是基于累计概率动态确定的。

示例

假设同样的语境:“今天的天气很”,但这次我们将会有不同的词汇及其概率分布,我们也会使用不同的阈值 ( p ) 来展示如何动态确定选词数量。

模型预测的词汇概率
  • 好:0.4
  • 冷:0.3
  • 热:0.2
  • 潮湿:0.05
  • 多变:0.03
  • 干燥:0.02
排序与累积概率

按概率从高到低排序并计算累积概率:

  • 好:0.4
  • 冷:0.7 (0.4 + 0.3)
  • 热:0.9 (0.7 + 0.2)
  • 潮湿:0.95 (0.9 + 0.05)
  • 多变:0.98 (0.95 + 0.03)
  • 干燥:1.00 (0.98 + 0.02)
确定核集合

这次,我们将选择不同的阈值 ( p ) 来观察核集合如何变化:

  1. 当 ( p = 0.7 )

    • 核集合包括:“好”和“冷”,因为它们的累积概率首次超过 0.7。
  2. 当 ( p = 0.9 )

    • 核集合扩展到:“好”,“冷”,和“热”,因为它们的累积概率首次超过 0.9。
  3. 当 ( p = 0.95 )

    • 核集合进一步扩展到:“好”,“冷”,“热”和“潮湿”,因为这是累积概率首次超过 0.95。
抽样

在每种情况下,我们从对应的核集合中随机选取一个词作为下一个词。选择的范围和多样性取决于 ( p ) 值的大小,而词的数量是根据这个阈值动态确定的,不是固定的。

实现代码

在这里插入图片描述
在这里插入图片描述

优点

  • 灵活性强,自动调整候选词集合,避免了固定的词数限制。
  • 在生成文本时能够更好地平衡多样性与高概率词的利用,表现优于Top-k采样。

缺点

  • 参数 p 的选择需要调节,不同任务可能需要不同的 p 值。
  • 计算复杂度较高,尤其是当处理较大的词汇表时。

总结

采样方法优点缺点
贪婪采样简单、高效,始终选择最有可能的词文本生成可能单一,缺乏多样性
温度采样通过调整温度控制多样性,适应性强温度的调节需要谨慎,过高或过低的温度可能产生不理想的结果
Top-k采样控制候选词数量,避免选择低概率词k 值选择需要调节,k 太小可能导致文本单一
核采样动态选择候选词集合,更灵活,生成文本质量较高参数 p 需要调节,计算复杂度较高

每种采样方式都有其适用的场景,根据具体的应用和对生成文本的要求,可以选择不同的采样策略。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

要使用 Python 构建一个“大语言模型”(Large Language Model, LLM),需要明确的是:真正意义上的大语言模型(如 GPT-3、LLaMA、ChatGLM 等)通常包含数十亿甚至数千亿参数,训练需要海量数据和强大的算力(如多块 GPU/TPU 集群),普通个人无法从零开始训练。 但我们可以使用 Python 借助现有的开源库(如 Hugging Face 的 `transformers`)来**加载、微调或推理**一个预训练的大语言模型。以下是一个完整的示例:使用 Hugging Face 加载一个轻量级但功能强大的开源大模型(如 `facebook/opt-350m` 或 `gpt2`),并实现文本生成。 --- ### ✅ 使用 Python 加载并运行一个大语言模型(以 GPT-2 为例) ```python # 安装依赖(首次运行需取消注释) # !pip install transformers torch from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 1. 加载预训练模型和分词器 model_name = "gpt2" # 可替换为更大的模型如 "facebook/opt-350m", "meta-llama/Llama-2-7b-hf"(需权限) tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # 设置设备(优先使用 GPU) device = "cuda" if torch.cuda.is_available() else "cpu" model = model.to(device) # 2. 输入提示 prompt = "人工智能的未来是" # 3. 编码输入 inputs = tokenizer(prompt, return_tensors="pt").to(device) # 4. 生成文本 with torch.no_grad(): outputs = model.generate( inputs["input_ids"], max_length=100, # 最大长度 num_return_sequences=1, # 返回1段文本 do_sample=True, # 是否采样(避免重复) temperature=0.8, # 温度控制随机性 top_k=50, # 限制采样范围 top_p=0.95, # 采样 pad_token_id=tokenizer.eos_token_id # 防止警告 ) # 5. 解码输出 generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) print("生成结果:") print(generated_text) ``` --- ### 🔍 代码解释: | 部分 | 说明 | |------|------| | `AutoTokenizer` | 自动选择适合模型的分词方式,将文本转为模型可读的数字 ID | | `AutoModelForCausalLM` | 加载用于因果语言建模的解码器模型(如 GPT 类) | | `model.to(device)` | 将模型移到 GPU(如果可用)加速推理 | | `model.generate()` | 调用生成接口,支持多种解码策略(贪婪采样、beam search) | | `temperature`, `top_k`, `top_p` | 控制生成文本的多样性质量 | --- ### 🧠 进阶建议: - 想体验更大模型?可以尝试: - `facebook/opt-1.3b` - `EleutherAI/gpt-neo-1.3B` - `meta-llama/Llama-3-8b`(需在 Hugging Face 申请访问权限) - 若显存不足,可启用 **量化**(如 `bitsandbytes`)或使用 `pipeline` 简化流程: ```python from transformers import pipeline generator = pipeline("text-generation", model="gpt2", device=0) # device=0 表示使用 GPU result = generator("人工智能的未来是", max_length=100, num_return_sequences=1) print(result[0]['generated_text']) ``` --- ### ⚠️ 注意事项: - 大模型对硬件要求高,推荐至少 8GB 显存运行 1B 参数以下模型- 商业用途需注意模型许可证(如 LLaMA 系列有严格限制)。 - 微调大模型需 LoRA、QLoRA 等高效方法降低资源消耗。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值