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

在 Text Generation Inference 文档中了解有关流式传输的更多信息。
使用分词器创建一个 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() 推送新令牌,end() 标记生成的结束。只要包含这两个方法,您就可以创建自己的流式传输器类,或者您可以使用 Transformers 的基本流式传输器类。
水印
水印对于检测文本是否为生成文本很有用。Transformers 中的水印策略随机地将一部分令牌“着色”为绿色。当生成绿色令牌时,它们的逻辑值会增加一个小的偏差,并且生成的概率更高。您可以通过比较绿色令牌的比例与人工生成文本中通常找到的绿色令牌数量来检测生成的文本。
Transformers 中的任何生成模型都支持水印,并且不需要额外的分类模型来检测带有水印的文本。
使用要添加到逻辑值和水印算法中的偏差值创建一个 WatermarkingConfig。下面的示例使用 "selfhash"
算法,其中绿色令牌的选择仅取决于当前令牌。将 WatermarkingConfig 传递给 generate()。
WatermarkDetector 类检测生成文本中绿色令牌的比例,这就是为什么建议剥离提示文本(如果它比生成文本长得多)。填充也会对 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])