Transformers documentation
Características de generación
Características de generación
La API generate() admite algunas funciones para construir aplicaciones sobre ella.
Esta guía te mostrará cómo usar estas funciones.
Streaming
El streaming comienza a devolver texto en cuanto se genera, por lo que no es necesario esperar para ver toda la respuesta generada de una sola vez. Es importante en las aplicaciones orientadas al usuario, ya que reduce la latencia percibida y permite a los usuarios ver el progreso de la generación.

Obtenga más información sobre streaming en la documentación de Text Generation Inference.
Cree una instancia de TextStreamer con el tokenizador. Pase TextStreamer al parámetro streamer en generate() para transmitir la salida palabra por palabra.
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)El parámetro streamer es compatible con cualquier clase que tenga un método put() y un método end(). put() envía nuevos tokens y end() marca el final de la generación. Puedes crear tu propia clase de streamer siempre que incluya estos dos métodos, o puedes usar las clases de streamer básicas de Transformers.
Marca de agua
El marcado de agua es útil para detectar si un texto ha sido generado. La estrategia de marcado de agua en Transformers “colorea” aleatoriamente un subconjunto de tokens de verde. Cuando se generan tokens verdes, se les añade un pequeño sesgo a sus logits, lo que aumenta la probabilidad de que sean generados. Puedes detectar el texto generado comparando la proporción de tokens verdes con la cantidad de tokens verdes que normalmente se encuentra en el texto generado por humanos.
El marcado con marca de agua está disponible para cualquier modelo generativo en Transformers y no requiere un modelo de clasificación adicional para detectar el texto con marca de agua.
Cree una WatermarkingConfig con el valor de sesgo a añadir a los logits y el algoritmo de marca de agua. El ejemplo siguiente utiliza el algoritmo "selfhash", en el que la selección de tokens verdes depende únicamente del token actual. Pase la WatermarkingConfig a generate().
La clase WatermarkDetector detecta la proporción de tokens verdes en el texto generado, por lo que se recomienda eliminar el texto del prompt si es mucho más largo que el texto generado. El padding también puede tener un efecto en 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)Cree una instancia de WatermarkDetector y pase la salida del modelo a esta para detectar si el texto fue generado por una máquina. El WatermarkDetector debe tener la misma WatermarkingConfig utilizada durante la generación.
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])