Transformers 文档
生成特性
并获得增强的文档体验
开始使用
生成特性
generate() API 支持一些用于在其之上构建应用程序的特性。
本指南将向您展示如何使用这些特性。
流式传输
流式传输会在文本生成后立即返回,因此您不必等待一次性查看整个生成的响应。这在面向用户的应用程序中非常重要,因为它减少了感知延迟,并允许用户看到生成过程的进展。

在 Text Generation Inference 文档中了解有关流式传输的更多信息。
使用 tokenizer 创建 TextStreamer 的实例。将 TextStreamer 传递给 generate() 中的 streamer
参数,以一次流式传输一个单词的输出。
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt")
streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer=streamer, max_new_tokens=20)
streamer
参数与任何具有 put() 和 end() 方法的类兼容。put() 推送新 tokens,end() 标记生成结束。您可以创建自己的 streamer 类,只要它们包含这两个方法,或者您可以使用 Transformers 的基本 streamer 类。
水印
水印对于检测文本是否为生成文本非常有用。Transformers 中的水印策略随机将一部分 tokens “着色”为绿色。当生成绿色 tokens 时,会在其 logits 中添加一个小的偏差,并且有更高的生成概率。您可以通过比较绿色 tokens 的比例与通常在人工生成的文本中发现的绿色 tokens 数量来检测生成的文本。
Transformers 中的任何生成模型都支持水印,并且不需要额外的分类模型来检测带水印的文本。
使用要添加到 logits 的偏差值和水印算法创建 WatermarkingConfig。下面的示例使用 "selfhash"
算法,其中绿色 token 的选择仅取决于当前 token。将 WatermarkingConfig 传递给 generate()。
WatermarkDetector 类检测生成文本中绿色 tokens 的比例,这就是为什么建议去除 prompt 文本(如果它比生成的文本长得多)的原因。Padding 也可能对 WatermarkDetector 产生影响。
from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig
model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
tokenizer.pad_token_id = tokenizer.eos_token_id
tokenizer.padding_side = "left"
inputs = tokenizer(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
input_len = inputs["input_ids"].shape[-1]
watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
out = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
创建 WatermarkDetector 的实例,并将模型输出传递给它以检测文本是否为机器生成。WatermarkDetector 必须具有与生成期间使用的相同的 WatermarkingConfig。
detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
detection_out = detector(out, return_dict=True)
detection_out.prediction
array([True, True])