Transformers documentation
Các tính năng sinh
Các tính năng sinh
API generate() hỗ trợ một số tính năng để xây dựng các ứng dụng dựa trên nó.
Hướng dẫn này sẽ cho bạn thấy cách sử dụng các tính năng này.
Streaming
Streaming bắt đầu trả về văn bản ngay khi nó được tạo ra, vì vậy bạn không cần phải chờ để xem toàn bộ phản hồi được tạo ra cùng một lúc. Điều này rất quan trọng trong các ứng dụng hướng đến người dùng vì nó làm giảm độ trễ cảm nhận và cho phép người dùng xem được tiến trình tạo ra.

Tìm hiểu thêm về streaming trong tài liệu Text Generation Inference.
Tạo một instance của TextStreamer với tokenizer. Truyền TextStreamer vào tham số streamer trong generate() để stream đầu ra từng từ một.
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)Tham số streamer tương thích với bất kỳ lớp nào có phương thức put() và end(). put() đẩy các token mới và end() đánh dấu kết thúc quá trình sinh. Bạn có thể tự tạo lớp streamer của riêng mình miễn là bao gồm hai phương thức này, hoặc sử dụng các lớp streamer cơ bản của Transformers.
Đóng dấu
Watermarking hữu ích để phát hiện liệu văn bản có được tạo ra hay không. chiến lược watermarking trong Transformers ngẫu nhiên “tô màu” một tập con các token thành màu xanh lá. Khi các token màu xanh lá được tạo ra, một độ lệch nhỏ được thêm vào logits của chúng, và xác suất để chúng được tạo ra sẽ cao hơn. Bạn có thể phát hiện văn bản được tạo ra bằng cách so sánh tỷ lệ token màu xanh lá với lượng token màu xanh lá thường thấy trong văn bản do con người tạo ra.
Watermarking được hỗ trợ cho bất kỳ mô hình sinh nào trong Transformers và không yêu cầu một mô hình phân loại bổ sung để phát hiện văn bản có watermark.
Tạo một WatermarkingConfig với giá trị bias cần thêm vào logits và thuật toán watermarking. Ví dụ bên dưới sử dụng thuật toán "selfhash", trong đó việc chọn token xanh chỉ phụ thuộc vào token hiện tại. Truyền WatermarkingConfig vào generate().
Lớp WatermarkDetector phát hiện tỷ lệ các token màu xanh lá cây trong văn bản được tạo ra, vì vậy nên loại bỏ văn bản prompt nếu nó dài hơn nhiều so với văn bản được tạo ra. Việc đệm (padding) cũng có thể ảnh hưởng đến 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)Tạo một instance của WatermarkDetector và truyền model output vào để phát hiện xem văn bản có được tạo bởi máy hay không. WatermarkDetector phải có cùng WatermarkingConfig đã được sử dụng trong quá trình sinh.
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])