Transformers documentation
Recursos de geração
Recursos de geração
A API generate() suporta alguns recursos para a construção de aplicações com base nela.
Este guia mostrará como usar esses recursos.
Streaming
O streaming começa a retornar o texto assim que ele é gerado, de modo que você não precisa esperar para ver a resposta gerada inteira de uma vez. Isso é importante em aplicações voltadas ao usuário, pois reduz a latência percebida e permite que os usuários acompanhem o progresso da geração.

Saiba mais sobre streaming na documentação do Text Generation Inference.
Crie uma instância de TextStreamer com o tokenizer. Passe TextStreamer para o parâmetro streamer em generate() para transmitir a saída uma palavra de cada vez.
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)O parâmetro streamer é compatível com qualquer classe que possua os métodos put() e end(). put() insere novos tokens e end() sinaliza o fim da geração. Você pode criar sua própria classe de streamer, desde que inclua esses dois métodos, ou utilizar as classes básicas de streamer do Transformers.
Marca d'água
O watermarking é útil para detectar se um texto foi gerado por IA. A estratégia de watermarking no Transformers “pinta” aleatoriamente um subconjunto dos tokens de verde. Quando tokens verdes são gerados, um pequeno viés é adicionado aos seus logits, aumentando a probabilidade de serem gerados. É possível detectar texto gerado comparando a proporção de tokens verdes com a quantidade de tokens verdes normalmente encontrada em texto gerado por humanos.
O watermarking é suportado para qualquer modelo generativo em Transformers e não requer um modelo de classificação extra para detectar o texto com marca d'água.
Crie um WatermarkingConfig com o valor de viés a ser adicionado aos logits e o algoritmo de marca d'água. O exemplo abaixo usa o algoritmo "selfhash", em que a seleção de tokens verdes depende apenas do token atual. Passe o WatermarkingConfig para generate().
A classe WatermarkDetector detecta a proporção de tokens verdes no texto gerado, motivo pelo qual é recomendável remover o texto do prompt, caso ele seja muito mais longo que o texto gerado. O padding também pode afetar o 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)Crie uma instância de WatermarkDetector e passe a saída do modelo para ela para detectar se o texto foi gerado por máquina. O WatermarkDetector deve ter a mesma WatermarkingConfig usada durante a geração.
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])