Transformers 文件

生成特性

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

生成特性

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])
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.