model.generate() 是 Hugging Face Transformers 库中用于文本生成的核心方法,支持多种生成策略和丰富参数。下面我详细介绍常用参数及其作用,并附带简单示例。
| 参数名 | 类型 | 作用及说明 | 备注/示例 |
|---|---|---|---|
input_ids | torch.LongTensor | 输入的 token id 序列,形状通常是 (batch_size, seq_len)。必填。 | input_ids = tokenizer("Hello", return_tensors="pt").input_ids |
max_length | int | 生成序列最大长度(包含输入长度)。生成停止条件之一。 | max_length=50 |
max_new_tokens | int | 生成的新 token 数量上限(不包含输入长度)。推荐使用此参数替代 max_length。 | max_new_tokens=20 |
do_sample | bool | 是否启用采样(随机生成)。False 时使用贪心解码。 | do_sample=True 启用采样生成多样文本 |
temperature | float | 采样温度,越小生成越确定,越大生成越随机。只在 do_sample=True 时生效。 | temperature=0.7 |
top_k | int | 采样时只考虑概率最高的前 K 个 token。 | top_k=50 |
top_p | float | nucleus 采样,保留累计概率达到 top_p 的 token。 | top_p=0.9 |
num_beams | int | 束搜索时的 beam 数量,越大生成质量越好但速度越慢。 | num_beams=5 |
early_stopping | bool | 束搜索中所有 beam 生成 EOS 时提前停止生成。 | early_stopping=True |
num_return_sequences | int | 返回的生成序列数量,配合采样或束搜索使用。 | num_return_sequences=3 |
pad_token_id | int | 填充标记 token id,防止警告和错误。 | pad_token_id=tokenizer.pad_token_id |
eos_token_id | int | 结束标记 token id,生成到该 token 时停止。 | eos_token_id=tokenizer.eos_token_id |
attention_mask | torch.Tensor | 指示模型关注哪些输入位置,避免关注 padding。 | attention_mask = inputs["attention_mask"] |
repetition_penalty | float | 重复惩罚,防止生成重复内容。 | repetition_penalty=1.2 |
no_repeat_ngram_size | int | 禁止生成重复的 n-gram。 | no_repeat_ngram_size=3 |
decoder_start_token_id | int | 编码-解码模型中解码起始 token id。 | 仅对 encoder-decoder 模型有效 |
生成策略简述
- 贪心解码:
do_sample=False,每步选概率最高的 token。简单但容易重复和无趣。 - 采样:
do_sample=True,结合temperature,top_k,top_p控制生成多样性。 - 束搜索:
num_beams>1,同时维护多个候选序列,提升生成质量。可配合early_stopping。
示例:
outputs = model.generate(
inputs["input_ids"],
max_new_tokens=20,
do_sample=True,
temperature=0.7,
top_p=0.9
)
1380

被折叠的 条评论
为什么被折叠?



