Transformers documentation

생성 기능

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

생성 기능

generate() API는 이를 기반으로 애플리케이션을 구축하기 위한 몇 가지 기능을 지원합니다.

이 가이드에서는 이러한 기능을 사용하는 방법을 보여줍니다.

스트리밍

Streaming은 텍스트가 생성되는 즉시 반환되므로, 전체 생성 응답을 한 번에 볼 때까지 기다릴 필요가 없습니다. 이는 사용자 대상 애플리케이션에서 중요한데, 인지 지연을 줄이고 사용자가 생성 진행 상황을 확인할 수 있게 하기 때문입니다.

Text Generation Inference 문서에서 스트리밍에 대해 자세히 알아보세요.

토크나이저로 TextStreamer 인스턴스를 생성합니다. generate()의 streamer 매개변수에 TextStreamer를 전달하여 출력을 한 단어씩 스트리밍합니다.

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()은 생성의 종료를 표시합니다. 이 두 메서드를 포함하는 한 사용자 정의 streamer 클래스를 만들 수 있으며, Transformers의 기본 streamer 클래스를 사용할 수도 있습니다.

워터마킹

워터마킹은 텍스트가 생성된 것인지 감지하는 데 유용합니다. Transformers의 워터마킹 전략은 토큰의 하위 집합을 무작위로 “녹색”으로 표시합니다. 녹색 토큰이 생성될 때, 해당 토큰의 로짓에 작은 바이어스가 추가되어 생성될 확률이 높아집니다. 인간이 작성한 텍스트에서 일반적으로 발견되는 녹색 토큰의 양과 녹색 토큰의 비율을 비교함으로써 생성된 텍스트를 감지할 수 있습니다.

Watermarking은 Transformers의 모든 생성 모델에서 지원되며, 워터마크가 적용된 텍스트를 감지하기 위해 별도의 분류 모델이 필요하지 않습니다.

logits에 추가할 bias 값과 워터마킹 알고리즘을 사용하여 WatermarkingConfig를 생성합니다. 아래 예시는 "selfhash" 알고리즘을 사용하며, 이 알고리즘에서는 green token 선택이 현재 token에만 의존합니다. 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])
Update on GitHub