You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Open Llama设置temperature参数无效,生成内容重复如何解决?

问题:Open Llama设置temperature后生成内容仍完全相同

我尝试使用Open Llama,设置非零temperature参数来生成给定提示词的多个不同续写,代码如下:

import re
import torch
from transformers import LlamaTokenizer, LlamaForCausalLM

model_path = 'openlm-research/open_llama_3b_v2'

tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, device_map='auto')
text  = 'Once upon a time '
text_tokenized_for_llm = tokenizer(text, return_tensors="pt").input_ids
for i in range(25):
  result = model.generate(input_ids=text_tokenized_for_llm, max_new_tokens=6, temperature=2)
  text = tokenizer.decode(result[0])
  print('->' + text + '<-')

但运行程序后,所有续写内容完全相同:

-><s>Once upon a time 100 years ago,<-
-><s>Once upon a time 100 years ago,<-
-><s>Once upon a time 100 years ago,<-
(...)

原因及解决方法

  • 核心原因:未启用随机采样模式
    model.generate() 默认使用贪婪搜索,此时temperature参数会被直接忽略,模型每次都会选择概率最高的token序列,因此生成结果完全一致。必须显式设置do_sample=True,才能让温度参数生效,开启随机采样逻辑。

  • 次要问题:重复使用初始输入(可选调整)
    你的代码中,每次生成都依赖提前tokenized好的初始提示text_tokenized_for_llm——如果需求是基于同一个初始提示生成不同续写,这没问题;如果是想基于上一次的生成结果继续续写,需要每次更新输入的token_ids。

修改后的代码

import torch
from transformers import LlamaTokenizer, LlamaForCausalLM

model_path = 'openlm-research/open_llama_3b_v2'

tokenizer = LlamaTokenizer.from_pretrained(model_path)
model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, device_map='auto')

# 初始提示
prompt = 'Once upon a time '
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(model.device)

for i in range(25):
    # 关键:添加do_sample=True启用随机采样,temperature参数才会生效
    result = model.generate(
        input_ids=input_ids,
        max_new_tokens=6,
        temperature=2.0,
        do_sample=True,
        # 可选:搭配top_p增强多样性,或设置seed控制随机性
        # top_p=0.95,
        # seed=torch.randint(0, 1000, (1,)).item()
    )
    # 跳过特殊token,让输出更干净
    generated_text = tokenizer.decode(result[0], skip_special_tokens=True)
    print(f'->{generated_text}<-')

补充说明

  • temperature=2.0属于较高温度,生成内容的随机性很强,可能出现逻辑混乱的情况,可根据需求调整到0.5-1.5区间,平衡多样性与合理性。
  • 搭配top_p参数(如top_p=0.95)可以限制采样的候选token范围,避免生成完全无意义的内容。
  • 若需要固定随机性以复现结果,可设置固定的seed值;若需要每次完全随机,可每次生成不同的seed或不指定。

内容的提问来源于stack exchange,提问作者user983447

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:35:49