用Python和Transformer生成文本的核心是加载预训练模型、准备输入、调用generate接口;借助Hugging Face的transformers库,可快速通过pipeline或手动tokenizer+model实现生成,并支持temperature、top_k等参数调控及bad_words_ids等进阶控制。
用 Python 和 Transformer 模型生成文本,核心是加载预训练模型、准备输入、调用生成接口——不需从头训练,Hugging Face 的 transformers 库让这件事变得非常直接。
先确保安装了关键库:
pip install transformers torch(PyTorch 是默认后端)accelerate 以支持显存优化和多卡推理选一个轻量又实用的开源模型,比如 distilgpt2(GPT-2 的精简版,速度快、显存友好):
from transformers import pipeline
generator = pipeline("text-generation", model="distilgpt2")
只需一行代码就能生成文本:
output = generator("今天天气不错,我想去", max_length=50, num_return_sequences=1)
print(output[0]["generated_text"])
max_length 控制总长度(含输入),不是只生成多少字num_return_sequences=3 可一次返回多个不同版本,便于对比选择temperature=0.7(越低越保守,越高越随机)或启用 top_k=50 / top_p=0.9 进行采样过滤当需要更精细干预(如禁止某些词、添加前缀、控制停止符),建议绕过 pipeline,直接操作模型:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("dist
ilgpt2")
model = AutoModelForCausalLM.from_pretrained("distilgpt2")
input_text = "Python 中列表推导式的语法是"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
output_ids = model.generate(
input_ids,
max_new_tokens=64,
do_sample=True,
temperature=0.85,
pad_token_id=tokenizer.eos_token_id
)
generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
max_new_tokens 更直观:只限制新生成的 token 数量pad_token_id 设为 eos_token_id 可避免警告,尤其在 batch 推理时必要bad_words_ids 参数传入 token ID 列表在消费级显卡(如 RTX 3060 12G)上跑 distilgpt2 完全没问题;若换更大模型(如 facebook/opt-1.3b 或 google/gemma-2b):
device_map="auto" 让 accelerate 自动分配显存load_in_4bit=True 加载量化模型,显存占用直降 60%+uer/roberta-base-finetuned-jd-binary-chinese(分类)或 IDEA-CCNL/Ziya-LLaMA-13B-v1(生成),别硬套英文模型不复杂但容易忽略:生成质量高度依赖提示词(prompt)设计。一个清晰、带语境、有风格指示的开头,比调参更能提升结果可用性。