[ PROMPT_NODE_27504 ]
文本生成
[ SKILL_DOCUMENTATION ]
# 文本生成
## 概述
使用 `generate()` 方法通过语言模型生成文本。通过生成策略和参数控制输出的质量和风格。
## 基础生成
python
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# 对输入进行分词
inputs = tokenizer("Once upon a time", return_tensors="pt")
# 生成
outputs = model.generate(**inputs, max_new_tokens=50)
# 解码
text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(text)
## 生成策略
### 贪婪搜索 (Greedy Decoding)
在每一步选择概率最高的 token(确定性):
python
outputs = model.generate(
**inputs,
max_new_tokens=50,
do_sample=False # 贪婪搜索(默认)
)
**适用场景**:事实性文本、翻译,需要确定性结果的场景。
### 采样 (Sampling)
从概率分布中随机采样:
python
outputs = model.generate(
**inputs,
max_new_tokens=50,
do_sample=True,
temperature=0.7,
top_k=50,
top_p=0.95
)
**适用场景**:创意写作、多样化输出、开放式生成。
### 集束搜索 (Beam Search)
并行探索多个假设:
python
outputs = model.generate(
**inputs,
max_new_tokens=50,
num_beams=5,
early_stopping=True
)
**适用场景**:翻译、摘要,对质量要求极高的场景。
### 对比搜索 (Contrastive Search)
平衡质量与多样性:
python
outputs = model.generate(
**inputs,
max_new_tokens=50,
penalty_alpha=0.6,
top_k=4
)
**适用场景**:长文本生成,减少重复内容。
## 关键参数
### 长度控制
**max_new_tokens**:生成的最大 token 数
python
max_new_tokens=100 # 最多生成 100 个新 token
**max_length**:总最大长度(输入 + 输出)
python
max_length=512 # 总序列长度
**min_new_tokens**:生成的最小 token 数
python
min_new_tokens=50 # 强制至少生成 50 个 token
**min_length**:最小总长度
python
min_length=100
### 温度 (Temperature)
控制随机性(仅在采样时有效):
python
temperature=1.0 # 默认,平衡
temperature=0.7 # 更聚焦,随机性更低
temperature=1.5 # 更具创造性,随机性更高
温度越低 → 确定性越高
温度越高 → 随机性越高
### Top-K 采样
仅考虑概率最高的 K 个 token:
python
do_sample=True
top_k=50 # 采样