Transformers documentation

Recursos de geração

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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])
Update on GitHub