Python生成式AI教程_使用transformer模型生成文本

用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 进行采样过滤

进阶控制:手动 tokenizer + model 调用

当需要更精细干预(如禁止某些词、添加前缀、控制停止符),建议绕过 pipeline,直接操作模型:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

tokenizer = AutoTokenizer.from_pretrained("distilgpt2")
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 推理时必要
  • 如需禁止生成特定词(如“错误”、“bug”),可用 bad_words_ids 参数传入 token ID 列表

本地部署小贴士

在消费级显卡(如 RTX 3060 12G)上跑 distilgpt2 完全没问题;若换更大模型(如 facebook/opt-1.3bgoogle/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)设计。一个清晰、带语境、有风格指示的开头,比调参更能提升结果可用性。