Transformers documentation
생성을 위한 유틸리티
생성을 위한 유틸리티
이 페이지는 generate()에서 사용되는 모든 유틸리티 함수를 나열합니다.
출력 생성
generate()의 출력은 ModelOutput의 하위 클래스 인스턴스입니다. 이 출력은 generate()가 반환하는 모든 정보를 포함하는 데이터 구조이지만, 튜플이나 딕셔너리としても 사용할 수 있습니다.
다음은 예시입니다:
from transformers import GPT2Tokenizer, GPT2LMHeadModel
tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
model = GPT2LMHeadModel.from_pretrained("openai-community/gpt2")
inputs = tokenizer("Hello, my dog is cute and ", return_tensors="pt")
generation_output = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)generation_output 객체는 GenerateDecoderOnlyOutput이며, 아래 해당 클래스의 문서에서 확인할 수 있듯이 다음 속성을 가집니다:
sequences: 생성된 토큰 시퀀스scores(선택 사항): 각 생성 단계에 대한 언어 모델링 헤드의 예측 점수hidden_states(선택 사항): 각 생성 단계에 대한 모델의 hidden statesattentions(선택 사항): 각 생성 단계별 모델의 어텐션 가중치
output_scores=True를 전달했기 때문에 scores가 있지만, output_hidden_states=True나 output_attentions=True를 전달하지 않았기 때문에 hidden_states와 attentions는 없습니다.
각 속성은 일반적인 방식으로 접근할 수 있으며, 해당 속성이 모델에 의해 반환되지 않은 경우 None을 반환합니다. 예를 들어 generation_output.scores는 언어 모델링 헤드에서 생성된 모든 예측 점수이고, generation_output.attentions는 None입니다.
generation_output 객체를 튜플로 사용할 때, None 값이 아닌 속성만 유지됩니다.
여기서 예를 들어 두 개의 요소, loss와 logits가 있으므로
generation_output[:2]예를 들어 (generation_output.sequences, generation_output.scores) 튜플을 반환합니다.
generation_output 객체를 사전으로 사용할 때, None 값이 아닌 속성만 유지됩니다. 예를 들어 여기서는 sequences와 scores라는 두 개의 키가 있습니다.
여기서는 모든 출력 유형을 문서화합니다.
클래스 transformers.generation.GenerateDecoderOnlyOutput
< source >( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
매개변수
- sequences (
torch.LongTensor, shape(batch_size, sequence_length)) — 생성된 시퀀스입니다. 두 번째 차원(sequence_length)은max_length와 같거나,eos_token_id로 인해 모든 배치에서 조기 종료된 경우보다 짧습니다. - scores (
tuple(torch.Tensor)선택,output_scores=True일 때 반환됨) — 언어 모델링 헤드에서 처리된 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수)입니다. 각 생성 단계마다 반환되며,torch.Tensor의 튜플로 최대max_new_tokens개의 요소(생성된 각 토큰당 1개 요소)를 포함합니다. 각 텐서의 모양은(batch_size, config.vocab_size)입니다. - logits (
tuple(torch.Tensor)선택,output_logits=True일 때 반환됨) — 언어 모델링 헤드에서 각 생성 단계의 처리되지 않은 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수). 각 생성된 토큰에 대해 하나의 요소를 포함하는 최대max_new_tokens개의 요소를 가진torch.Tensor의 튜플이며, 각 텐서의 모양은(batch_size, config.vocab_size)입니다. - attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플이며, 모양은(batch_size, num_heads, generated_length, sequence_length)입니다. - hidden_states (
tuple(tuple(torch.Tensor)), 선택 사항,output_hidden_states=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플이며, 모양은(batch_size, generated_length, hidden_size)입니다. - past_key_values (
Cache, 선택 사항,use_cache=True일 때 반환됨) — 디코딩 속도를 높이는 데 사용되는 모델 캐시를 반환합니다. 모델마다 캐시 형식이 다르므로 해당 모델의 문서를 확인하세요. 일반적으로 Cache 인스턴스입니다.
비빔(non-beam) 방법을 사용할 때, 디코더 전용 생성 모델의 출력입니다.
클래스 transformers.generation.GenerateEncoderDecoderOutput
< source >( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
매개변수
- sequences (
torch.LongTensor, shape(batch_size*num_return_sequences, sequence_length)) — 생성된 시퀀스입니다. 두 번째 차원(sequence_length)은max_length와 같거나, 모든 배치에서eos_token_id로 인해 조기에 종료된 경우보다 짧습니다. - scores (
tuple(torch.Tensor)선택,output_scores=True일 때 반환됨) — 언어 모델링 헤드에서 처리된 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수)입니다. 각 생성 단계마다 반환되며,torch.Tensor의 튜플로 최대max_new_tokens개의 요소(생성된 각 토큰당 1개 요소)를 포함합니다. 각 텐서의 모양은(batch_size, config.vocab_size)입니다. - logits (
tuple(torch.Tensor)선택,output_logits=True일 때 반환됨) — 언어 모델링 헤드에서 각 생성 단계의 처리되지 않은 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수). 각 생성된 토큰에 대해 하나의 요소를 포함하는 최대max_new_tokens개의 요소를 가진torch.Tensor의 튜플이며, 각 텐서의 모양은(batch_size, config.vocab_size)입니다. - encoder_attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True일 때 반환됨) — 디코더의 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다. - encoder_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True일 때 반환됨) —torch.Tensor의 튜플(임베딩 출력 1개 + 각 레이어의 출력 1개)로, shape은(batch_size, sequence_length, hidden_size)입니다. - decoder_attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플이며, 모양은(batch_size, num_heads, generated_length, sequence_length)입니다. - cross_attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰마다 하나의 요소를 가지는 튜플로, 각 요소는 디코더의 각 레이어마다 하나의 요소를 가지는 튜플이며, 이 튜플의 각 요소는(batch_size, num_heads, generated_length, sequence_length)모양의torch.Tensor입니다. - decoder_hidden_states (
tuple(tuple(torch.Tensor)), 선택 사항,output_hidden_states=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 각 요소는 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플이며, 모양은(batch_size, generated_length, hidden_size)입니다. - past_key_values (
Cache, 선택 사항,use_cache=True일 때 반환됨) — 디코딩 속도를 높이는 데 사용되는 모델 캐시를 반환합니다. 모델마다 캐시 형식이 다르므로 해당 모델의 문서를 확인하세요. 일반적으로 Cache 인스턴스입니다.
비빔(non-beam) 방법을 사용할 때 인코더-디코더 생성 모델의 출력입니다.
클래스 transformers.generation.GenerateBeamDecoderOnlyOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
매개변수
- sequences (
torch.LongTensor, shape(batch_size*num_return_sequences, sequence_length)) — 생성된 시퀀스입니다. 두 번째 차원(sequence_length)은max_length와 같거나, 모든 배치에서eos_token_id로 인해 조기에 종료된 경우보다 짧습니다. - sequences_scores (
torch.Tensor, shape(batch_size*num_return_sequences), 선택 사항,output_scores=True일 때 반환됨) — 생성된sequences의 최종 beam 점수입니다. - scores (
tuple(torch.Tensor)선택 사항,output_scores=True일 때 반환됨) — 각 생성 단계에서 어휘의 각 토큰에 대한 Beam transition scores입니다. 이 beam에서 이전에 생성된 토큰의 log softmax에 조건부인 토큰의 log 확률로 구성된 Beam transition scores입니다.torch.Tensor의 튜플로, 최대max_new_tokens개의 요소(생성된 각 토큰당 1개 요소)를 가지며, 각 텐서의 shape은(batch_size*num_beams, config.vocab_size)입니다. - logits (
tuple(torch.Tensor)선택,output_logits=True일 때 반환됨) — 언어 모델링 헤드에서 각 생성 단계의 처리되지 않은 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수). 각 생성된 토큰에 대해 하나의 요소를 포함하는 최대max_new_tokens개의 요소를 가진torch.Tensor의 튜플이며, 각 텐서의 모양은(batch_size*num_beams, config.vocab_size)입니다. - beam_indices (
torch.LongTensor, 선택 사항,output_scores=True일 때 반환됨) — 각 생성 단계에서 생성된 토큰 id의 beam 인덱스입니다.torch.LongTensor의 형태는(batch_size*num_return_sequences, sequence_length)입니다. - attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플을 포함하며, 각torch.Tensor의 shape은(batch_size*num_beams, num_heads, generated_length, sequence_length)입니다. - hidden_states (
tuple(tuple(torch.Tensor)), 선택 사항,output_hidden_states=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소를 가진 튜플로, 디코더의 각 레이어당 하나의 요소를 가진torch.Tensor튜플이며, 모양은(batch_size*num_beams*num_return_sequences, generated_length, hidden_size)입니다. - past_key_values (
Cache, 선택 사항,use_cache=True일 때 반환됨) — 디코딩 속도를 높이는 데 사용되는 모델 캐시를 반환합니다. 모델마다 캐시 형식이 다르므로 해당 모델의 문서를 확인하세요. 일반적으로 Cache 인스턴스입니다.
beam 방법을 사용하는 decoder-only 생성 모델의 출력입니다.
클래스 transformers.generation.GenerateBeamEncoderDecoderOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
매개변수
- sequences (
torch.LongTensor, shape(batch_size*num_return_sequences, sequence_length)) — 생성된 시퀀스입니다. 두 번째 차원(sequence_length)은max_length와 같거나, 모든 배치에서eos_token_id로 인해 조기에 종료된 경우보다 짧습니다. - sequences_scores (
torch.Tensor, shape(batch_size*num_return_sequences), 선택 사항,output_scores=True일 때 반환됨) — 생성된sequences의 최종 beam 점수입니다. - scores (
tuple(torch.Tensor)선택 사항,output_scores=True일 때 반환됨) — 각 생성 단계에서 어휘의 각 토큰에 대한 Beam transition scores입니다. 이 beam에서 이전에 생성된 토큰의 log softmax에 조건부인 토큰의 log 확률로 구성된 Beam transition scores입니다.torch.Tensor의 튜플로, 최대max_new_tokens개의 요소(생성된 각 토큰당 1개 요소)를 가지며, 각 텐서의 shape은(batch_size*num_beams, config.vocab_size)입니다. - logits (
tuple(torch.Tensor)선택,output_logits=True일 때 반환됨) — 언어 모델링 헤드에서 각 생성 단계의 처리되지 않은 예측 점수(SoftMax 적용 전 각 어휘 토큰의 점수). 각 생성된 토큰에 대해 하나의 요소를 포함하는 최대max_new_tokens개의 요소를 가진torch.Tensor의 튜플이며, 각 텐서의 모양은(batch_size*num_beams, config.vocab_size)입니다. - beam_indices (
torch.LongTensor, 선택 사항,output_scores=True일 때 반환됨) — 각 생성 단계에서 생성된 토큰 id의 beam 인덱스입니다.torch.LongTensor의 형태는(batch_size*num_return_sequences, sequence_length)입니다. - encoder_attentions (
tuple(torch.Tensor), 선택 사항,output_attentions=True일 때 반환됨) — 디코더의 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다. - encoder_hidden_states (
tuple(torch.Tensor), 선택 사항,output_hidden_states=True일 때 반환됨) —torch.Tensor의 튜플(임베딩 출력 1개 + 각 레이어의 출력 1개)로, shape은(batch_size*num_beams*num_return_sequences, sequence_length, hidden_size)입니다. - decoder_attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰당 하나의 요소로 구성된 튜플이며, 각 요소는 디코더의 각 레이어당 하나의 요소로 구성된 튜플입니다. 각 튜플은(batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length)모양의torch.Tensor입니다. - cross_attentions (
tuple(tuple(torch.Tensor)), 선택 사항,output_attentions=True일 때 반환됨) — 생성된 각 토큰마다 하나의 요소를 가지는 튜플로, 각 요소는 디코더의 각 레이어마다 하나의 요소를 가지는 튜플이며, 이 튜플의 각 요소는(batch_size, num_heads, generated_length, sequence_length)모양의torch.Tensor입니다. - decoder_hidden_states (
tuple(tuple(torch.Tensor)), 선택 사항,output_hidden_states=True일 때 반환됨) — 생성된 각 토큰마다 하나의 요소를 가지는 튜플로, 각 요소는 디코더의 각 레이어마다 하나의 요소를 가지는torch.Tensor튜플이며, 모양은(batch_size*num_beams*num_return_sequences, generated_length, hidden_size)입니다. - past_key_values (
Cache, 선택 사항,use_cache=True일 때 반환됨) — 디코딩 속도를 높이는 데 사용되는 모델 캐시를 반환합니다. 모델마다 캐시 형식이 다르므로 해당 모델의 문서를 확인하세요. 일반적으로 Cache 인스턴스입니다.
beam 방법을 사용하는 인코더-디코더 생성 모델의 출력입니다.
LogitsProcessor
LogitsProcessor는 생성을 위해 언어 모델 헤드의 예측 점수를 수정하는 데 사용할 수 있습니다.
class transformers.AlternatingCodebooksLogitsProcessor
< source >( input_start_len: intsemantic_vocab_size: intcodebook_size: int )
Bark의 두 코드북 사이에서 번갈아 생성되도록 강제하는 LogitsProcessor입니다.
이 logits 프로세서(로짓 프로세서)는 Bark의 fine 서브모델과만 호환됩니다. 예제는 모델 문서를 참조하세요.
class transformers.ClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale )
LogitsProcessor는 classifier free guidance(CFG)를 위해 사용됩니다. 점수는 배치 차원으로 나뉘며, 첫 번째 절반은 조건부 logits(입력 프롬프트로부터 예측된 값)에, 두 번째 절반은 무조건부 logits(빈 프롬프트 또는 ‘null’ 프롬프트로부터 예측된 값)에 해당합니다. 이 프로세서가 guidance_scale로 매개변수화된 조건부 및 무조건부 logits에 대한 가중 평균을 계산합니다.
자세한 내용은 논문을 참고하세요.
이 logits 프로세서(로짓 프로세서)는 MusicGen과만 호환됩니다.
예:
>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration
>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
>>> inputs = processor(
... text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
... padding=True,
... return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.EncoderNoRepeatNGramLogitsProcessor
< source >( encoder_ngram_size: intencoder_input_ids: LongTensor )
LogitsProcessor는 NoRepeatNGramLogitsProcessor와 유사하게 작동하지만, 프롬프트에 존재하는 n-gram의 반복을 방지하는 데만 적용됩니다.
이 기능은 이전 대화 라운드에 존재하는 n-gram의 생성을 방지하여 언어 모델의 대화적 성격을 촉진하도록 설계되었습니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice: I love cats. What do you love?\nBob:", return_tensors="pt")
>>> # With greedy decoding, we see Bob repeating Alice's opinion. If Bob was a chatbot, it would be a poor one.
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: I love cats. What do you
>>> # With this logits processor, we can prevent Bob from repeating Alice's opinion.
>>> outputs = model.generate(**inputs, encoder_no_repeat_ngram_size=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice: I love cats. What do you love?
Bob: My cats are very cute.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.EncoderRepetitionPenaltyLogitsProcessor
< source >( penalty: floatencoder_input_ids: LongTensor )
LogitsProcessor는 RepetitionPenaltyLogitsProcessor과 유사하게 작동하지만, 프롬프트에 포함된 토큰에 역 페널티를 적용합니다. 즉, 1.0보다 큰 페널티 값은 프롬프트에 이미 존재했던 토큰이 선택될 확률을 높입니다.
입력에 기반한 작업, 예를 들어 요약과 같은 작업에서 환각을 방지하도록 설계되었습니다. 원래 인코더-디코더 모델을 위해 의도되었지만, LLM과 같은 디코더 전용 모델에도 사용할 수 있습니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["Alice and Bob. The third member's name was"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was not mentioned.
>>> # With the `encoder_repetition_penalty` argument we can trigger this logits processor in `generate`, which can
>>> # promote the use of prompt tokens ("Bob" in this example)
>>> gen_out = model.generate(**inputs, encoder_repetition_penalty=1.2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
Alice and Bob. The third member's name was Bob. The third member's name was Bob.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.EpsilonLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
prob >= epsilon인 토큰으로 제한하는 epsilon-sampling을 수행하는 LogitsProcessor입니다. 이 제약 조건을 만족하는 토큰이 없으면 가장 큰 min_tokens_to_keep개의 토큰을 선택합니다. 자세한 내용은 Truncation Sampling as Language Model Desmoothing을 참고하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With epsilon sampling, the output gets restricted to high-probability tokens. Note that this is similar to
>>> # Top P sampling, which restricts tokens based on their cumulative probability.
>>> # Pro tip: The paper recommends using `epsilon_cutoff` values between 3e-4 and 9e-4
>>> outputs = model.generate(**inputs, do_sample=True, epsilon_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.EtaLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1device: str = 'cpu' )
매개변수
- epsilon (
float) — (0, 1) 범위의 float 값. 동적 절단 값eta를 계산하는 데 사용되는 하이퍼파라미터입니다. 논문에서 제안된 값은 모델 크기에 따라 3e-4에서 4e-3 사이입니다. - filter_value (
float, 선택 사항, 기본값 -inf) — 동적 임계값eta보다 낮은 것으로 판정된 모든 값은 이 float 값으로 설정됩니다. 이 매개변수는 생성 과정에서 완전히 제외해야 하는 매우 낮은 확률의 토큰에 대해 logits를 수정해야 할 때 유용합니다. - min_tokens_to_keep (
int, 선택 사항, 기본값 1) — 확률과 관계없이 생성을 위해 유지해야 할 최소 토큰 수를 지정합니다. 예를 들어,min_tokens_to_keep이 1로 설정되어 있으면 모든 토큰의 확률이 임계값eta보다 낮더라도 생성을 위해 항상 최소 한 개의 토큰이 유지됩니다. - device (
str, 선택 사항, 기본값"cpu") — 텐서를 할당할 장치입니다.
동적 임계값 eta보다 확률이 낮은 토큰을 필터링하는 기법인 eta-sampling을 수행하는 LogitsProcessor입니다. eta는 하이퍼파라미터 epsilon과 토큰 확률의 엔트로피 조합을 기반으로 계산되며, 즉 eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities)))입니다. 이 제약 조건을 만족하는 토큰이 없으면 가장 큰 min_tokens_to_keep개의 토큰을 선택합니다. 신경 언어 모델이 생성한 긴 텍스트 샘플의 품질 저하 문제를 해결하여 더 일관되고 유창한 텍스트를 생성합니다. 자세한 내용은 Truncation Sampling as Language Model Desmoothing을 참조하세요. 참고: 이 LogitsProcessor가 작동하려면 do_sample을 True로 설정해야 합니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With eta sampling, the output gets restricted to high-probability tokens. You can see it as a dynamic form of
>>> # epsilon sampling that adapts its cutoff probability based on the entropy (high entropy = lower cutoff).
>>> # Pro tip: The paper recommends using `eta_cutoff` values between 3e-4 to 4e-3
>>> outputs = model.generate(**inputs, do_sample=True, eta_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.ExponentialDecayLengthPenalty
< source >( exponential_decay_length_penalty: tupleeos_token_id: typing.Union[int, list[int], torch.Tensor]input_ids_seq_length: int )
start_index에 도달한 후 eos_token_id의 점수를 지수적으로 증가시키는 LogitsProcessor입니다. 이를 통해 하드 컷오프 없이 더 짧은 시퀀스를 생성할 수 있으며, eos_token이 의미 있는 위치에서 예측되도록 합니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> text = "Just wanted to let you know, I"
>>> inputs = tokenizer(text, return_tensors="pt")
>>> # Let's consider that we want short sentences, so we limit `max_length=30`. However, we observe that the answer
>>> # tends to end abruptly.
>>> set_seed(1)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.9, max_length=30, pad_token_id=50256)
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010. Although
>>> # To promote the appearance of the EOS token at the right time, we add the `exponential_decay_length_penalty =
>>> # (start_index, decay_factor)`. Instead of cutting at max_tokens, the output comes to an end before and usually
>>> # with more meaning. What happens is that starting from `start_index` the EOS token score will be increased
>>> # by `decay_factor` exponentially. However, if you set a high decay factor, you may also end up with abruptly
>>> # ending sequences.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.6),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network
which<|endoftext|>
>>> # With a small decay factor, you will have a higher chance of getting a meaningful sequence.
>>> set_seed(1)
>>> outputs = model.generate(
... **inputs,
... do_sample=True,
... temperature=0.9,
... max_length=30,
... pad_token_id=50256,
... exponential_decay_length_penalty=(15, 1.01),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010.<|endoftext|>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.ForcedBOSTokenLogitsProcessor
< source >( bos_token_id: int )
지정된 토큰을 첫 번째 생성 토큰으로 강제하는 LogitsProcessor. 인코더-디코더 모델과 함께 사용됩니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")
>>> tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")
>>> inputs = tokenizer("Translate from English to German: I love cats.", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad> Ich liebe Kitty.</s>
>>> # We can use `forced_bos_token_id` to force the start of generation with an encoder-decoder model
>>> # (including forcing it to end straight away with an EOS token)
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_bos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
<pad></s>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.ForcedEOSTokenLogitsProcessor
< source >( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
max_length에 도달했을 때 지정된 토큰을 마지막 생성 토큰으로 강제하는 LogitsProcessor입니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=10)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8
>>> # `forced_eos_token_id` ensures the generation ends with a EOS token
>>> outputs = model.generate(**inputs, max_new_tokens=10, forced_eos_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(outputs)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7,<|endoftext|>__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
생성 방식이 실패하지 않도록 모든 nan 및 inf 값을 제거하는 LogitsProcessor입니다. logits 프로세서는 생성 방식을 늦출 수 있으므로 필요한 경우에만 사용해야 합니다.
이 logits processor에는 generate 예제가 없습니다. 이 processor를 사용할 만큼 적절한 플래그 조합이 존재할 수 없기 때문입니다.
__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
log-softmax를 사용하여 점수를 정규화하는 데 사용되는 LogitsProcessor입니다. logits 프로세서나 워퍼를 적용한 후 beam search 과정에서 점수를 정규화하는 것이 중요합니다. 이 라이브러리가 사용하는 탐색 알고리즘은 이를 수행하지 않기 때문입니다(탐색 전에만 수행하지만, 재정규화가 필요할 수 있음). 그러나 가설을 비교할 때는 점수가 정규화되어 있다고 가정합니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> import torch
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2, 3", return_tensors="pt")
>>> # By default, the scores are not normalized -- the sum of their exponentials is NOT a normalized probability
>>> # distribution, summing to 1
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
False
>>> # Normalizing them may have a positive impact on beam methods, or when using the scores on your application
>>> outputs = model.generate(**inputs, renormalize_logits=True, return_dict_in_generate=True, output_scores=True)
>>> print(torch.allclose(torch.sum(torch.exp(outputs.scores[-1])), torch.Tensor((1.000,)), rtol=1e-4))
True__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
생성 과정에서 적용할 수 있는 모든 logit processor의 추상 베이스 클래스입니다.
__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
이 클래스는 scores 입력 텐서를 처리하기 위해 LogitsProcessor 목록을 생성하는 데 사용할 수 있습니다.
이 클래스는 list를 상속하며, 각 LogitsProcessor를 입력에 적용하기 위한 특정 call 메서드를 추가합니다.
__call__
< source >( input_ids: LongTensorscores: Tensor**kwargs ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다. - kwargs (
dict[str, Any], 선택) — logits processor에 특정한 추가 kwargs입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.MinLengthLogitsProcessor
< source >( min_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
EOS 확률을 0으로 설정하여 최소 길이를 강제하는 LogitsProcessor입니다. 참고로, 대부분의 LLM과 같은 decoder-only 모델의 경우 길이에 프롬프트가 포함됩니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("A number:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_length` to a value smaller than the uncontrolled output length has no impact
>>> gen_out = model.generate(**inputs, min_length=3)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting a larger `min_length` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_length=10)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand, nine hundred and ninety-four__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.MinNewTokensLengthLogitsProcessor
< source >( prompt_length_to_skip: intmin_new_tokens: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
LogitsProcessor enforcing a min-length of new tokens by setting EOS (End-Of-Sequence) token probability to 0. Contrarily to MinLengthLogitsProcessor, this processor ignores the prompt.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer(["A number:"], return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one
>>> # setting `min_new_tokens` will force the model to generate beyond its natural ending point, which is not
>>> # necessarily incorrect
>>> gen_out = model.generate(**inputs, min_new_tokens=2)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
A number: one thousand__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.MinPLogitsWarper
< source >( min_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
매개변수
가장 확률이 높은 토큰의 확률로 정규화된 최소 확률 이상의 모든 토큰을 유지하는 min-p를 수행하는 LogitsProcessor입니다. 그 결과, 높은 확률을 가진 토큰이 존재할 때 필터가 더 공격적으로 작동하게 되며, 이는 벗어나지 말아야 할 자신감 있는 출력을 나타내는 신호입니다.
TemperatureLogitsWarper와 함께 자주 사용됩니다. TopPLogitsWarper와 TopKLogitsWarper의 대안으로 사용됩니다.
@menhguin과 @kalomaze(github 계정)가 작성했습니다. 코드는 이 외부 PR에서 가져왔습니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With `min_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `min_p` in the 0.01-0.2 range.
>>> outputs = model.generate(**inputs, do_sample=True, min_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9클래스 transformers.NoBadWordsLogitsProcessor
< source >( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )
지정된 시퀀스가 절대 선택되지 않도록 강제하는 LogitsProcessor입니다.
생성된 텍스트에 나타나서는 안 되는 단어의 토큰 ID를 얻으려면, 토크나이저를 초기화할 때
add_prefix_space=True를 설정하고tokenizer(bad_words, add_special_tokens=False).input_ids를 사용해야 합니다.add_prefix_space인수는 일부 slow 토크나이저에서만 지원되며, fast 토크나이저의 접두어(prefix) 동작은pre tokenizers에서 비롯됩니다. 자세한 내용은 여기에서 확인하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["In a word, the cake is a"], return_tensors="pt")
>>> output_ids = model.generate(inputs["input_ids"], max_new_tokens=5, pad_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a mess.
>>> # Now let's take the bad words out. Please note that the tokenizer is initialized differently
>>> tokenizer_with_prefix_space = AutoTokenizer.from_pretrained("openai-community/gpt2", add_prefix_space=True)
>>> def get_tokens_as_list(word_list):
... "Converts a sequence of words into a list of tokens"
... tokens_list = []
... for word in word_list:
... tokenized_word = tokenizer_with_prefix_space([word], add_special_tokens=False).input_ids[0]
... tokens_list.append(tokenized_word)
... return tokens_list
>>> bad_words_ids = get_tokens_as_list(word_list=["mess"])
>>> output_ids = model.generate(
... inputs["input_ids"], max_new_tokens=5, bad_words_ids=bad_words_ids, pad_token_id=tokenizer.eos_token_id
... )
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a surprise.__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.NoRepeatNGramLogitsProcessor
< source >( ngram_size: int )
N-gram은 텍스트 시퀀스에서 추출한 연속된 “n”개의 단어, 문자 또는 토큰의 집합입니다. “She runs fast”라는 문장을 예로 들면, bi-gram(n=2)은 (“she”, “runs”)과 (“runs”, “fast”)입니다. 텍스트 생성에서 단어 시퀀스의 반복을 방지하면 더 다양한 출력을 얻을 수 있습니다. 이 LogitsProcessor는 금지된 토큰의 점수를 음의 무한대로 설정하여 n-gram의 반복을 방지하며, 이는 점수를 추가로 처리할 때 해당 토큰을 고려 대상에서 제외시킵니다. 참고로, 대부분의 LLM과 같은 decoder-only 모델의 경우 프롬프트도 n-gram을 얻기 위해 고려됩니다. Fairseq.
n-gram 패널티는 신중하게 사용해야 합니다. 예를 들어, 뉴욕시에 관한 기사에서 2-gram(bigram)에 패널티를 부과하면, 도시 이름이 전체 텍스트에서 한 번만 나타나도록 하는 바람직하지 않은 결과가 발생할 수 있습니다. 참고
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["Today I"], return_tensors="pt")
>>> output = model.generate(**inputs)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I'm going to be able to do it.
>>> # Now let's add ngram size using `no_repeat_ngram_size`. This stops the repetitions ("I'm") in the output.
>>> output = model.generate(**inputs, no_repeat_ngram_size=2)
>>> print(tokenizer.decode(output[0], skip_special_tokens=True))
Today I'm not sure if I can get a better understanding of the nature of this issue__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.PrefixConstrainedLogitsProcessor
< source >( prefix_allowed_tokens_fn: Callablenum_beams: int )
제약 생성을 강제하여 접두사 조건부 제약 생성에 유용한 LogitsProcessor입니다. 자세한 내용은 Autoregressive Entity Retrieval을 참고하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("Alice and Bob", return_tensors="pt")
>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=5)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob are friends
>>> # We can constrain it with `prefix_allowed_tokens_fn` to force a certain behavior based on a prefix.
>>> # For instance, we can force an entire entity to be generated when its beginning is detected.
>>> entity = tokenizer(" Bob Marley", return_tensors="pt").input_ids[0] # 3 tokens
>>> def prefix_allowed_tokens_fn(batch_id, input_ids):
... '''
... Attempts to generate 'Bob Marley' when 'Bob' is detected.
... In this case, `batch_id` is not used, but you can set rules for each batch member.
... '''
... if input_ids[-1] == entity[0]:
... return [entity[1].item()]
... elif input_ids[-2] == entity[0] and input_ids[-1] == entity[1]:
... return [entity[2].item()]
... return list(range(tokenizer.vocab_size)) # If no match, allow all tokens
>>> outputs = model.generate(**inputs, max_new_tokens=5, prefix_allowed_tokens_fn=prefix_allowed_tokens_fn)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob Marley__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.RepetitionPenaltyLogitsProcessor
< source >( penalty: floatprompt_ignore_length: typing.Union[int, torch.Tensor, NoneType] = None )
이전 토큰의 반복을 페널티를 통해 방지하는 LogitsProcessor입니다. 이 페널티는 토큰당 최대 한 번만 적용됩니다. 참고로, 대부분의 LLM과 같은 decoder-only 모델의 경우 기본적으로 고려 대상 토큰에 프롬프트가 포함됩니다.
원래 논문에서는 진실한 생성과 반복의 부재 사이의 좋은 균형을 달성하기 위해 약 1.2의 페널티 사용을 제안합니다. 반복을 페널티화하고 줄이려면 penalty 값을 1.0 이상으로 사용하세요. 값이 높을수록 페널티가 더 강하게 적용됩니다. 반복을 보상하고 장려하려면 penalty 값을 0.0과 1.0 사이로 사용하세요. 값이 낮을수록 보상이 더 강하게 적용됩니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, RepetitionPenaltyLogitsProcessor
>>> # Initializing the model and tokenizer for it
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["I'm not going to"], return_tensors="pt")
>>> # This shows a normal generate without any specific parameters
>>> summary_ids = model.generate(**inputs)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to be able to do that
>>> # This generates a penalty for repeated tokens
>>> penalized_ids = model.generate(**inputs, repetition_penalty=1.1)
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'll just have to go out and play
>>> # We can also exclude the input prompt by creating an instance of this class
>>> # with a `prompt_ignore_length` and passing it as a custom logit processor
>>> rep_pen_processor = RepetitionPenaltyLogitsProcessor(
... penalty=1.1,
... prompt_ignore_length=inputs["input_ids"].shape[-1]
... )
>>> penalized_ids = model.generate(**inputs, logits_processor=[rep_pen_processor])
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to have to go through a lot of things, and__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.SequenceBiasLogitsProcessor
< source >( sequence_bias: list )
LogitsProcessor는 시퀀스에 가산 바이어스를 적용합니다. 다음으로 생성되는 토큰이 해당 시퀀스를 완성할 수 있을 때, 바이어스는 시퀀스의 마지막 토큰에 적용됩니다. 따라서 두 개 이상의 토큰으로 구성된 시퀀스에 대한 바이어싱 효과를 최대한 활용하려면, 빔 메서드를 사용하는 것이 좋습니다(음수 바이어스가 있는 부분적으로 완성된 시퀀스를 우아하게 처리하기 위함). 또한 바이어스를 해당 시퀀스의 접두사에 적용하여 바이어스가 더 일찍 적용되도록 보장해야 합니다.
토큰 수준에서, 단어에 바이어스를 적용하는 것과 앞에 공백이 있는 단어에 바이어스를 적용하는 것은 다릅니다. 문장 중간에 “foo”에 바이어스를 적용하려면, 보통 접두어 공백을 추가하여 ” foo”에 바이어스를 적용하게 됩니다. 그 이유는 NLP 코스의 토크나이저 섹션을 확인해 보세요: https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> inputs = tokenizer(["The full name of Donald is Donald"], return_tensors="pt")
>>> summary_ids = model.generate(inputs["input_ids"], max_new_tokens=4, do_sample=False)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> def get_tokens(word):
... return tokenizer([word], add_special_tokens=False).input_ids[0]
>>> # IMPORTANT: Remember our tip about adding spaces before words to bias them correctly.
>>> sequence_bias = [[get_tokens("Trump"), -10.0],] # will fail to apply bias
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.
>>> sequence_bias = [[get_tokens(" Trump"), -10.0],] # will work
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Harper. He
>>> # We can also add a positive bias to nudge the model towards specific tokens or continuations. This technique
>>> # is also more effective when paired up with beam search.
>>> sequence_bias = [[get_tokens(" Donald Duck"), 10.0],]
>>> biased_ids = model.generate(
... inputs["input_ids"], max_new_tokens=4, num_beams=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald Duck. He is__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.SuppressTokensAtBeginLogitsProcessor
< source >( begin_suppress_tokensbegin_indexdevice: str = 'cpu' )
SuppressTokensAtBeginLogitsProcessor는 generate 함수가 생성을 시작하면 begin_index 토큰을 사용하여 토큰 목록을 억제합니다. 이를 통해 begin_suppress_tokens으로 정의된 토큰이 시작 부분에 생성되지 않도록 보장해야 합니다. 원래 Whisper용으로 생성되었습니다.
예:
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has `begin_suppress_tokens` set by default (= `[220, 50256]`). 50256 is the EOS token, so this means
>>> # it can't generate and EOS token in the first iteration, but it can in the others.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[0][0, 50256])
tensor(-inf)
>>> print(outputs.scores[-1][0, 50256]) # in other places we can see some probability mass for EOS
tensor(29.9010)
>>> # If we disable `begin_suppress_tokens`, we can generate EOS in the first iteration.
>>> outputs = model.generate(
... **inputs, return_dict_in_generate=True, output_scores=True, begin_suppress_tokens=None
... )
>>> print(outputs.scores[0][0, 50256])
tensor(11.2027)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
이 프로세서는 토큰 목록을 억제하는 데 사용할 수 있습니다. 프로세서는 해당 토큰의 log probs를 -inf로 설정하여 생성되지 않도록 합니다. 원래 Whisper를 위해 만들어졌습니다.
예:
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")
>>> # Whisper has a long list of suppressed tokens. For instance, in this case, the token 1 is suppressed by default.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[1][0, 1]) # 1 (and not 0) is the first freely generated token
tensor(-inf)
>>> # If we disable `suppress_tokens`, we can generate it.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True, suppress_tokens=None)
>>> print(outputs.scores[1][0, 1])
tensor(6.0678)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.SynthIDTextWatermarkLogitsProcessor
< source >( ngram_len: intkeys: listsampling_table_size: intsampling_table_seed: intcontext_history_size: intdevice: deviceskip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
매개변수
- ngram_len (
int) — Ngram 길이. - keys (
list[int]) — 각 깊이별로 하나씩, 워터마킹 키의 시퀀스입니다. - sampling_table_size (
int) — 샘플링 테이블의 크기. - sampling_table_seed (
int) — 샘플링 테이블을 생성하기 위한 랜덤 시드. - context_history_size (
int) — 확인된 컨텍스트를 추적하기 위해 유지할 텐서의 크기입니다. - device (
torch.device) — 사용할 장치. - skip_first_ngram_calls (
bool, 선택 사항, 기본값False) — 첫 번째 ngram 호출을 건너뛸지 여부. - debug_mode (
bool, 선택, 기본값False) — 워터마킹 수정이 적용되기 전에 로짓이 균일한 1로 수정됩니다. 이는 구현을 테스트하기 위한 것입니다.
텍스트 생성 모델에 워터마킹 기법을 구현하는 Logits processor입니다. 이 클래스는 생성된 텍스트에 감지할 수 없는 신호를 임베드하여 합성 콘텐츠 감지를 돕는 SynthID 텍스트 워터마킹 기법의 적용을 지원합니다. 텍스트 생성 과정에서 토큰 선택 확률을 나중에 검증할 때 신뢰할 수 있게 복구될 수 있도록 미세하게 조작하는 방식으로 작동합니다.
주요 기능:
상태 관리: 토큰 시퀀스를 추적하고 워터마킹 키를 동적으로 생성하기 위해 내부 상태를 유지합니다.
키 생성: 토큰 시퀀스와 워터마킹 매개변수를 기반으로 해시를 계산하여 각 위치에 고유한 키를 생성합니다.
G-Value Sampling: 생성된 키를 기반으로 워터마킹 값(g-value)을 샘플링하기 위해 사전 계산된 샘플링 테이블을 사용합니다.
점수 조정: 생성 과정에서 토큰 확률을 수정하여 워터마크를 삽입하기 위해 계산된 g-값을 적용합니다.
컨텍스트 반복 처리: 반복되는 컨텍스트의 토큰에 워터마크를 적용하지 않도록 하는 로직을 포함하여 자연스러움을 유지합니다.
EOS 토큰 마스킹: 문장 끝 토큰을 마스킹하여 워터마킹 계산에 포함되지 않도록 지원합니다.
유틸리티 함수: g-값을 직접 계산하고, 컨텍스트 반복을 확인하며, EOS 토큰 마스크를 생성하고, 예상 평균 g-값을 추정하는 함수를 제공합니다.
자세한 내용은 논문 URL: https://www.nature.com/articles/s41586-024-08025-4를 참조하세요.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')
>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
... keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
... ngram_len=5,
... )
>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
클래스 transformers.TemperatureLogitsWarper
< source >( temperature: float )
온도(지수 스케일링 출력 확률 분포)를 위한 LogitsProcessor로, 이는 예측 토큰의 무작위성을 제어할 수 있음을 의미합니다. 주로 TopPLogitsWarper와 TopKLogitsWarper와 함께 사용됩니다.
온도 값이 효과를 발휘하려면
generate인자에do_sample=True가 포함되어 있는지 확인하세요.
예:
>>> import torch
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(0) # for reproducibility
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> model.config.pad_token_id = model.config.eos_token_id
>>> inputs = tokenizer(["Hugging Face Company is"], return_tensors="pt")
>>> # With temperature=1.0, the default, we consistently get random outputs due to random sampling.
>>> generate_kwargs = {"max_new_tokens": 10, "do_sample": True, "temperature": 1.0, "num_return_sequences": 2}
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is one of these companies that is going to take a',
"Hugging Face Company is a brand created by Brian A. O'Neil"]
>>> # However, with temperature close to 0, it approximates greedy decoding strategies (invariant)
>>> generate_kwargs["temperature"] = 0.0001
>>> outputs = model.generate(**inputs, **generate_kwargs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
['Hugging Face Company is a company that has been around for over 20 years',
'Hugging Face Company is a company that has been around for over 20 years']__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.TopHLogitsWarper
< source >( top_h: floatfilter_value: float = -inf )
엔트로피와 누적 확률 제약 조건에 따라 높은 확률을 가진 토큰의 부분 집합을 적응적으로 선택하는 Top-H 샘플링 디코딩 방법을 구현하는 LogitsProcessor입니다.
이 메서드는 선택된 분포의 엔트로피 차이를 분석하여 유지할 토큰 수를 동적으로 결정함으로써 탐색(exploration)과 활용(exploitation)을 균형 있게 조절합니다. 이를 통해 생성된 텍스트가 다양성과 일관성을 모두 유지하도록 보장합니다.
참고: 자세한 내용은 텍스트 생성에서 유계 엔트로피를 통해 창의성과 일관성 조정: Top-H 디코딩 (NeurIPS 2025)를 참조하세요: https://arxiv.org/abs/2509.02510
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> outputs = model.generate(**inputs, do_sample=True, top_h=0.4)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, vocab_size)
Top-H 샘플링을 사용하여 logits를 필터링합니다.
class transformers.TopKLogitsWarper
< source >( top_k: intfilter_value: float = -infmin_tokens_to_keep: int = 1 )
가장 높은 확률을 가진 k개의 요소로 제한하는 top-k를 수행하는 LogitsProcessor입니다. 주로 TemperatureLogitsWarper와 TopPLogitsWarper와 함께 사용됩니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: A, B, C, D", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E — S — O, P — R
>>> # With `top_k` sampling, the output gets restricted the k most likely tokens.
>>> # Pro tip: In practice, LLMs use `top_k` in the 5-50 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_k=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E, F, G, H, I__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.TopPLogitsWarper
< source >( top_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
prob_cut_off <= prob_cut_off를 만족하는 상위 토큰으로 제한하는 top-p를 수행하는 LogitsProcessor입니다. 자주 TemperatureLogitsWarper 및 TopKLogitsWarper와 함께 사용됩니다.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")
>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>
>>> # With `top_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `top_p` in the 0.9-0.95 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.TypicalLogitsWarper
< source >( mass: float = 0.9filter_value: float = -infmin_tokens_to_keep: int = 1 )
전형적(typical) 디코딩을 수행하는 LogitsProcessor입니다. 인간이 언어를 사용하는 방식에서 영감을 받아, 토큰 확률 분포의 엔트로피에 로그 확률이 가까운 토큰을 우선시합니다. 이는 가장 가능성이 높은 토큰이 이 과정에서 제외될 수 있음을 의미합니다.
자세한 내용은 자연어 생성을 위한 전형적 디코딩을 참조하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed
>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")
>>> inputs = tokenizer("1, 2, 3", return_tensors="pt")
>>> # We can see that greedy decoding produces a sequence of numbers
>>> outputs = model.generate(**inputs)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
>>> # For this particular seed, we can see that sampling produces nearly the same low-information (= low entropy)
>>> # sequence
>>> set_seed(18)
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
1, 2, 3, 4, 5, 6, 7, 8, 9 and 10
>>> # With `typical_p` set, the most obvious sequence is no longer produced, which may be good for your problem
>>> set_seed(18)
>>> outputs = model.generate(
... **inputs, do_sample=True, typical_p=0.1, return_dict_in_generate=True, output_scores=True
... )
>>> print(tokenizer.batch_decode(outputs.sequences, skip_special_tokens=True)[0])
1, 2, 3 and 5
>>> # We can see that the token corresponding to "4" (token 934) in the second position, the most likely token
>>> # as seen with greedy decoding, was entirely blocked out
>>> print(outputs.scores[1][0, 934])
tensor(-inf)__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale: floatmodelunconditional_ids: typing.Optional[torch.LongTensor] = Noneunconditional_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool = True )
매개변수
- guidance_scale (
float) — Classifier free guidance(CFG)의 guidance scale입니다.guidance_scale != 1로 설정하면 CFG가 활성화됩니다. guidance scale이 높을수록 모델은 입력 프롬프트와 더 밀접하게 연결된 샘플을 생성하도록 장려되며, 일반적으로 품질 저하를 대가로 합니다. 1보다 작은 값은 반대 효과를 내며, negative_prompt_ids로 제공된 negative prompt(있는 경우)가 positive prompt로 작용하게 만듭니다. - model (
PreTrainedModel) — 무조건적 점수를 계산하는 모델입니다. 조건부 점수를 계산하는 모델과 동일할 것으로 예상됩니다. 두 모델은 동일한 토크나이저를 사용해야 합니다. - unconditional_ids (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — 무조건 분기(unconditional branch)의 입력 시퀀스 토큰에 대한 어휘 사전 내 인덱스입니다. 설정되지 않으면 프롬프트의 마지막 토큰을 기본값으로 사용합니다. - unconditional_attention_mask (
torch.LongTensor, shape(batch_size, sequence_length), 선택 사항) — unconditional_ids에 대한 attention mask입니다. - use_cache (
bool, 선택 사항, 기본값True) — 음성 프롬프트(forward pass) 처리 중에 key/value를 캐싱할지 여부.
Classifier-Free Guidance(CFG)용 Logits processor입니다. 이 프로세서는 guidance_scale로 매개변수화되며, 프롬프트 조건부 및 프롬프트 무조건부(또는 negative) logits의 점수에 가중 평균을 계산합니다. 무조건부 점수는 model에 unconditional_ids 브랜치를 프롬프트로 전달하여 내부적으로 계산됩니다.
자세한 내용은 논문을 참고하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Today, a dragon flew over Paris, France,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=1.5)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 50 people and injuring more than 100'
>>> # with a negative prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=2, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 130 people. French media reported that'
>>> # with a positive prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=0, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
"Today, a dragon flew over Paris, France, and I'm very happy to be here. I"클래스 transformers.WhisperTimeStampLogitsProcessor
< source >( generate_config: GenerationConfigbegin_index: int_detect_timestamp_from_logprob: bool | None = None )
매개변수
- generate_config (
GenerateConfig) — 출력을 생성하는 데 사용되는 generate config입니다. 다음 매개변수가 필요합니다: eos_token_id (int, 선택 사항, 기본값 50257): 시퀀스 끝 토큰의 id입니다. no_timestamps_token_id (int, 선택 사항, 기본값 50363):"<|notimestamps|>"토큰의 id입니다. max_initial_timestamp_index (int, 선택 사항, 기본값 1): 초기 타임스탬프의 최대 값을 설정하는 데 사용됩니다. 이는 모델이 너무 먼 미래의 타임스탬프를 예측하는 것을 방지하는 데 사용됩니다. - begin_index (
int) — 모델이 생성하는 첫 번째 토큰의 인덱스. - _detect_timestamp_from_logprob (
bool, 선택 사항) — 모든 타임스탬프에 대한 logprobs에서 타임스탬프를 예측할 수 있는지 여부.
전사 과정에서 타임스탬프 생성을 위한 logits를 수정하는 LogitsProcessor입니다. 입력 토큰이 특정 임계값에 도달하면 프로세서가 점수를 음의 무한대로 설정합니다. 프로세서는 타임스탬프 토큰이 쌍으로 나타나도록, 이 짝짓기 패턴을 깨뜨리는 logits를 마스킹하여 보장합니다. 이는 생성된 타임스탬프의 일관성과 구조를 유지하기 위해 수행됩니다. 또한, 타임스탬프 토큰 중 하나를 샘플링할 예측 확률이 개별 비타임스탬프 토큰보다 클 경우, 해당 비타임스탬프 logits를 음의 무한대로 설정합니다. 이는 다른 잠재적 토큰보다 타임스탬프가 생성되도록 보장하기 위한 것입니다.
자세한 내용은 논문을 참고하세요.
예:
>>> import torch
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration, GenerationConfig
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[3]["audio"]["array"], return_tensors="pt")
>>> input_features = inputs.input_features
>>> #Displaying timestamps
>>> generated_ids = model.generate(inputs=input_features, return_timestamps=True)
>>> transcription = processor.batch_decode(generated_ids, decode_with_timestamps=True)[0]
>>> print("Transcription:", transcription)
Transcription: <|startoftranscript|><|0.00|> He has grave doubts whether Sir Frederick Layton's work is really Greek after all, and can<|6.44|><|6.44|> discover in it but little of rocky Ithaca.<|9.44|><|endoftext|>
>>> #No timestamps & change EOS:
>>> #This allows the user to select a specific token to terminate the sequence on, in this case it's the word "can"(460)
>>> model.generation_config.eos_token_id = 460
>>> generated_ids = model.generate(inputs=input_features,return_timestamps=False)
>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print("Transcription:", transcription)
Transcription: He has grave doubts whether Sir Frederick Layton's work is really Greek after all and can__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
class transformers.WatermarkLogitsProcessor
< source >( vocab_sizedevicegreenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
매개변수
- vocab_size (
int) — 모델 토크나이저의 vocab_size입니다. “green” 토큰 비율을 계산하는 데 사용됩니다. - device (
str) — 모델이 할당되는 장치입니다. - greenlist_ratio (
float, optional, 선택 사항, 기본값 0.25) — 어휘 크기 대비 사용되는 “green” 토큰의 비율입니다. 기본값은 0.25입니다. - bias (
float, optional, optional, 기본값 2.0) — 선택된 “green” 토큰의 logits에 추가되는 bias입니다. 텍스트 생성 품질이 저하되면bias값을 낮추는 것을 고려해 보세요. 권장 값은 [0.5, 2.0] 범위입니다. 기본값은 2.0입니다. - hashing_key (
int, 선택 사항, 선택 사항, 기본값 15485863) — 해싱에 사용되는 키입니다. 이 워터마크를 배포하는 경우, 다른 개인 키를 사용하는 것을 권장합니다. 기본값은 15485863(백만 번째 소수)입니다. - seeding_scheme (
str, 선택 사항, 선택 사항, 기본값은"lefthash") — “green” 토큰을 선택하는 데 사용되는 seeding 방식입니다. 다음 값을 허용합니다:- “lefthash” (기본값): “green” 토큰 선택은 마지막 토큰에 따라 결정됩니다(논문 Algorithm 2).
- “selfhash”: “green” 토큰 선택은 현재 토큰 자체에 따라 결정됩니다(논문 Algorithm 3). 이 방식의 단점은 모든 가능한 다음 토큰을 고려해야 하므로 “lefthash”보다 느릴 수 있다는 것입니다. 시딩에 사용할 이전 토큰의 컨텍스트 길이입니다. 컨텍스트 길이가 길수록 워터마킹이 더 강건해집니다.
- context_width (
int, 선택 사항, 기본값 1) — 시드 설정 시 사용할 이전 토큰의 수입니다.
생성된 텍스트에 워터마크를 적용하기 위한 Logits processor입니다. 이 프로세서는 다음 토큰을 생성하기 전에 무작위로 선택된 “green” 토큰 집합에 작은 편향을 추가하여 모델 출력 점수를 수정합니다. “green” 토큰 선택 과정은 사용되는 seeding_scheme에 따라 달라집니다. 이 코드는 원본 저장소를 기반으로 작성되었습니다.
이 LogitsProcessor가 생성한 텍스트는 WatermarkDetector를 사용하여 감지할 수 있습니다. 자세한 내용은 call()를 참조하세요.
자세한 내용은 논문을 참고하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkingConfig
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Alice and Bob are"], return_tensors="pt")
>>> # normal generation
>>> out = model.generate(inputs["input_ids"], max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both in the same room.\n\n"I\'m not sure if you\'re'
>>> # watermarked generation
>>> watermarking_config = WatermarkingConfig(bias=2.5, context_width=2, seeding_scheme="selfhash")
>>> out = model.generate(inputs["input_ids"], watermarking_config=watermarking_config, max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both still alive and well and the story is pretty much a one-hour adventure'
>>> # to detect watermarked text use the WatermarkDetector class
>>> from transformers import WatermarkDetector
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config= watermarking_config)
>>> detection_preds = detector(out)
>>> detection_preds
array([ True])__call__
< source >( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)
매개변수
- input_ids (
torch.LongTensor, shape(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 입력 ID란 무엇인가요? - scores (
torch.Tensor, shape(batch_size, config.vocab_size)) — 언어 모델링 헤드의 예측 점수입니다. beam search를 사용하지 않는 경우 각 어휘에 대한 logits이며, beam search를 사용하는 경우 각 어휘 토큰에 대한 log softmax입니다.
반환값
torch.Tensor, shape (batch_size, config.vocab_size)
처리된 예측 점수입니다.
StoppingCriteria
StoppingCriteria를 사용하여 EOS 토큰을 제외하고 생성을 중단하는 시점을 변경할 수 있습니다. 이 기능은 PyTorch 구현에서만 사용할 수 있습니다.
생성 과정에서 적용할 수 있는 모든 정지 기준의 추상 베이스 클래스입니다.
중단 기준이 scores 입력에 의존하는 경우, generate에 return_dict_in_generate=True, output_scores=True를 전달하는지 확인하세요.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
class transformers.MaxLengthCriteria
< source >( max_length: intmax_position_embeddings: int | None = None )
이 클래스는 생성된 토큰의 총 수가 max_length를 초과하는 시점에 생성을 중단하는 데 사용할 수 있습니다. decoder-only 유형의 transformers의 경우, 초기 프롬프트 토큰도 포함됨을 유의하세요.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
클래스 transformers.MaxTimeCriteria
< source >( max_time: floatinitial_timestamp: float | None = None )
이 클래스는 전체 생성이 특정 시간 한도를 초과할 때마다 생성을 중단하는 데 사용할 수 있습니다. 기본적으로 이 함수를 초기화할 때부터 시간이 측정되기 시작합니다. initial_timestamp를 전달하여 이 동작을 재정의할 수 있습니다.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
클래스 transformers.StopStringCriteria
< source >( tokenizer: PreTrainedTokenizerBasestop_strings: str | list[str] )
이 클래스는 특정 문자열 시퀀스가 생성될 때마다 생성을 중단하는 데 사용할 수 있습니다. 토크나이저 어휘와 함께 문자열을 전처리하여 토큰이 stop 문자열을 유효하게 완료할 수 있는 위치를 찾습니다.
stop 문자열 중 하나를 완성하는 토큰이 생성되는 즉시 생성이 중단됩니다. 디코딩된 출력에 stop 문자열이 존재하는 모든 경우를 포착해야 하므로, 한쪽 끝 또는 양쪽 끝에 “overhang”이 있는 경우까지 포착해야 합니다. 이를 더 구체적으로 설명하면, stop 문자열의 경우 다음과 같은 토큰 시퀀스 중 어느 것이든 매치를 트리거합니다:
- ["st", "op"]
- [“stop”]
- [“st”, “opera”]
- [“sto”, “pper”]
- ["las", "topper"]
- ["s", "to", "pped"]
주의: stop 문자열이 생성된 시퀀스의 끝에 위치할 때만 매치가 트리거됩니다. 다시 말해, 다음 시퀀스들은 매치를 트리거하지 않습니다:
- ["stop", "at"]
- ["st", "op", "at"]
- ["st", "opera", "tion"]
이들이 일치하지 않는 이유는 stop 문자열이 마지막 토큰과 겹치지 않기 때문입니다. 시퀀스의 끝에서 하나 이상의 토큰을 제거해도 stop 문자열이 손상되지 않는다면, 이 기준은 해당 stop 문자열과 일치하지 않습니다. 이는 의도된 동작입니다. 이 체크는 각 토큰이 생성된 후에 실행되므로, 유효한 stop 문자열이 생성되면 이를 놓치지 않지만, 과거의 input_ids 어딘가에 stop 문자열이 존재한다는 이유만으로 생성을 중단하고 싶지 않기 때문입니다.
그렇다면 매칭은 실제로 어떻게 수행될까요? Torch 또는 XLA로 컴파일 가능한 전체 매칭 프로세스를 원하기 때문에 다소 혼란스러운 방식으로 수행합니다. 이는 표준 문자열 메서드를 사용할 수 없음을 의미합니다. 하지만 상당한 작업을 거치면 순수한 텐서 연산으로 문자열 매칭을 수행할 수 있습니다. 먼저 표준 문자열 연산을 사용하여 사용하는 알고리즘을 설명하고, 마지막에 이것이 순수한 텐서 연산으로 어떻게 변환되는지 설명하겠습니다.
이 알고리즘의 핵심은 다음과 같은 관찰에 있습니다. stop 문자열은 토큰 시퀀스의 끝과 겹쳐야 하므로, 시퀀스의 끝에서부터 거꾸로 진행할 수 있습니다. 구체적으로, 마지막 토큰의 시작 부분과 stop_string의 끝 부분 사이에 겹침이 있는지 확인합니다. 다른 표현으로 하면, 어떤 i > 0에 대해 stop_string[-i:] == token[:i]가 성립하는지 확인하는 것입니다. 위의 긍정적 예시를 살펴보면, 모든 예시의 마지막 토큰이 이 성질을 만족하는 것을 볼 수 있습니다:
- [“st”, “op”] (겹침은 “op”, 겹침 길이 == 2)
- [“stop”] (overlap은 “stop”, overlap length == 4)
- [“st”, “opera”] (겹치는 부분은 “op”, 겹침 길이 == 2)
- [“sto”, “pper”] (겹치는 부분은 “p”, 겹침 길이 == 1)
- [“las”, “topper”] (겹침은 “top”, 겹침 길이 == 3)
- [“s”, “to”, “pped”] (겹치는 문자는 “p”, 겹침 길이 == 1)
이 특성이 없는 매칭 시퀀스를 구성하는 것은 불가능합니다(직접 확인해 보셔도 됩니다). 그러나 최종 토큰의 시작 부분과 stop 문자열의 끝 부분 사이의 이러한 겹침은 매칭에 필수적이지만 충분하지는 않습니다. 토큰 시퀀스의 나머지 부분이 stop 문자열과 일치하는지 확인해야 합니다.
How do we do that? Let’s use [“s”, “to”, “pped”] as an example. We know that the final token, “pped”, has an overlap of 1 with the stop string, “stop”. We then go back to the previous token, “to”. Since we have already matched 1 character from the stop string, the remainder to check is “sto”. We check that the next token “to” matches the end of the remainder, which it does. We have now matched 3 characters from the stop string, and the remainder to match is “s”. We go back to the previous token again, which is also “s”. This is a match, and so we have matched the entire stop string.
그렇다면 토큰이 stop string의 시작 부분에서 벗어나는 경우 어떻게 작동할까요? ["las", "topper"]의 예를 생각해 보겠습니다. 마지막 토큰인 "topper"는 stop string인 "stop"과 3개의 문자가 겹칩니다. 따라서 나머지 매칭 대상 stop string은 "s"가 됩니다. 이전 토큰인 "las"로 돌아가 봅니다. 매칭할 나머지가 길이 1인 "s"뿐이므로, 토큰의 마지막 1개 문자인 "s"만 고려합니다. 이는 stop string과 일치하므로, 전체 문자열이 매칭됩니다.
그렇다면 이러한 매칭을 텐서 연산으로 어떻게 계산할까요? 간단합니다. 모든 토큰에 필요한 정보를 효율적으로 사전 계산합니다! 각 토큰에 대해 다음을 계산합니다:
- stop 문자열의 끝과 겹치는 부분(있는 경우)
- 토큰이 일치하는 stop 문자열 안의 위치들, 시작 부분에서 벗어나는 일치도 포함합니다.
- 토큰의 총 길이
예를 들어, 토큰 “pped”의 경우 끝 겹침(end overlap)은 1, 내부 일치 위치는 없으며 길이는 4로 계산됩니다. 토큰 “to”의 경우 끝 겹침은 없고, 내부 일치 위치는 1개(끝에서부터 세어 1)이며 길이는 2로 계산됩니다. 토큰 “s”의 경우 끝 겹침은 없고, 내부 일치 위치는 1개(다시 끝에서부터 세어 3)이며 길이는 1로 계산됩니다.
이 정보가 있으면 문자열 비교 연산 없이 위의 알고리즘을 실행할 수 있습니다. 다음 단계만 수행하면 됩니다:
- …
- 뒤로 계속 진행하면서, 현재까지 일치한 stop 문자열의 길이를 추적합니다
- 각 단계에서 다음 토큰의 유효한 위치 중 하나가 현재 위치인지 확인합니다
- 일치 실패가 발생하거나 stop 문자열 전체가 완전히 일치할 때까지 계속합니다
Again, consider [“s”, “to”, “pped”] as an example. “pped” has an end overlap of 1, so we can begin a match. We have matched 1 character so far, so we check that the next token “to”, has 1 as a valid position (again, counting from the end). It does, so we add the length of “to” to our position tracker. We have now matched 3 characters, so we check that the next token “s” has 3 as a valid position. It does, so we add its length to the position tracker. The position tracker is now 4, which is the length of the stop string. We have matched the entire stop string.
두 번째 경우, [“las”, “topper”]에서 “topper”는 끝이 3만큼 겹치므로 매칭을 시작할 수 있습니다. 지금까지 3개의 문자를 매칭했으므로, 다음 토큰 “las”가 3을 유효한 위치로 가지는지 확인합니다. 실제로 그렇습니다. 이는 토큰이 stop 문자열의 시작 부분을 벗어나는 위치와도 매칭될 수 있도록 허용하기 때문입니다. 해당 토큰의 길이를 위치 추적기에 추가합니다. 이제 위치 추적기는 6이며, 이는 stop 문자열의 길이보다 큽니다. 그러나 당황하지 마세요. 이 경우에도 stop 문자열의 매칭으로 간주됩니다. stop 문자열 전체가 매칭되었습니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-2")
>>> model = AutoModelForCausalLM.from_pretrained("microsoft/phi-2")
>>> inputs = tokenizer("The biggest states in the USA by land area:", return_tensors="pt")
>>> gen_out = model.generate(**inputs)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas
- California
>>> # Passing one or more stop strings will halt generation after those strings are emitted
>>> # Note that generating with stop strings requires you to pass the tokenizer too
>>> gen_out = model.generate(**inputs, stop_strings=["Texas"], tokenizer=tokenizer)
>>> print(tokenizer.batch_decode(gen_out, skip_special_tokens=True)[0])
The biggest states in the USA by land area:
- Alaska
- Texas__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
클래스 transformers.EosTokenCriteria
< source >( eos_token_id: typing.Union[int, list[int], torch.Tensor] )
이 클래스는 “end-of-sequence” 토큰이 생성될 때마다 생성을 중단하는 데 사용할 수 있습니다.
기본적으로 model.generation_config.eos_token_id를 사용합니다.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.Tensor] | Nonenew_token_length: int = 1**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
매개변수
- input_ids (
torch.LongTensor형태(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 인덱스는 AutoTokenizer를 사용하여 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()을 참조하세요. input ID란 무엇인가요?AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
- scores (
tuple(torch.Tensor)) — 언어 모델링 헤드의 예측 점수로, 각 생성 단계마다 하나의 텐서를 포함하는 튜플이며 각 텐서의 모양은(batch_size, config.vocab_size)입니다. 이는 SoftMax 적용 전 각 어휘 토큰의 점수일 수도 있고, SoftMax 적용 후 각 어휘 토큰의 점수일 수도 있습니다. 이 종료 기준이scores입력에 의존하는 경우,generate에return_dict_in_generate=True, output_scores=True를 전달하도록 하십시오. 그렇지 않으면None이 전달됩니다. - new_token_length (
int, 선택 사항, 기본값1) — 조건을 검사할 토큰의 수입니다. 각 배치 항목의 최신new_token_length개 토큰이 검사됩니다. - kwargs (
dict[str, Any], 선택) — 추가적인 stopping criteria에 특화된 kwargs.
반환값
torch.BoolTensor. ((batch_size, 1) 모양의 torch.BoolTensor)
True는 특정 행에 대해 생성을 중단함을 나타냅니다.
False는 계속 진행해야 함을 나타냅니다.
스트리머
클래스 transformers.TextStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = False**decode_kwargs: Any )
Simple text streamer는 전체 단어가 형성되는 즉시 토큰을 stdout에 출력합니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextStreamer(tok)
>>> # Despite returning the usual output, the streamer will also print the generated text to stdout.
>>> _ = model.generate(**inputs, streamer=streamer, max_new_tokens=20)
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,남은 캐시를 모두 비우고 stdout에 새 줄을 출력합니다.
새 텍스트를 stdout에 출력합니다. 스트림이 종료되는 경우 줄바꿈도 출력합니다.
토큰을 수신하고 디코딩한 후, 완전한 단어가 형성되는 즉시 stdout에 출력합니다.
클래스 transformers.TextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
매개변수
- tokenizer (
AutoTokenizer) — 토큰을 디코딩하는 데 사용되는 토크나이저. - skip_prompt (
bool, 선택 사항, 기본값False) —.generate()에 프롬프트를 건너뛸지 여부입니다. 채팅봇 등에 유용합니다. - timeout (
float, 선택 사항) — 텍스트 큐의 타임아웃입니다.None인 경우 큐가 무기한으로 차단됩니다. 별도 스레드에서.generate()를 호출할 때 예외를 처리하는 데 유용합니다. - decode_kwargs (
dict, 선택 사항) — 토크나이저의decode메서드에 전달할 추가 키워드 인자.
출력 가능한 텍스트를 큐에 저장하여, 하류 애플리케이션이 반복자(iterator)로 사용할 수 있는 스트리머입니다. 이는 생성된 텍스트를 비차단(non-blocking) 방식으로 접근하는 것이 유리한 애플리케이션(예: 인터랙티브 Gradio 데모)에 유용합니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
>>> from threading import Thread
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextIteratorStreamer(tok)
>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
>>> thread = Thread(target=model.generate, kwargs=generation_kwargs)
>>> thread.start()
>>> generated_text = ""
>>> for new_text in streamer:
... generated_text += new_text
>>> generated_text
'An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,'새 텍스트를 큐에 넣습니다. 스트림이 종료되는 경우, 큐에 중지 신호도 넣습니다.
class transformers.AsyncTextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
매개변수
- tokenizer (
AutoTokenizer) — 토큰을 디코딩하는 데 사용되는 토크나이저. - skip_prompt (
bool, 선택 사항, 기본값False) —.generate()에 프롬프트를 건너뛸지 여부입니다. 채팅봇 등에 유용합니다. - timeout (
float, 선택 사항) — 텍스트 큐의 타임아웃입니다.None인 경우 큐가 무기한으로 차단됩니다. 별도 스레드에서.generate()를 호출할 때 예외를 처리하는 데 유용합니다. - decode_kwargs (
dict, 선택 사항) — 토크나이저의decode메서드에 전달할 추가 키워드 인자.
예외
TimeoutError
TimeoutError— 토큰 생성 시간이 타임아웃 값을 초과하는 경우.
큐에 출력 가능한 텍스트를 저장하여, 하위 애플리케이션이 비동기 반복자(async iterator)로 사용할 수 있는 스트리머입니다. 이는 생성된 텍스트에 비동기적으로 접근하는 것이 유리한 애플리케이션(예: 인터랙티브 Gradio 데모)에 유용합니다.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, AsyncTextIteratorStreamer
>>> from threading import Thread
>>> import asyncio
>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> async def main():
... # Important: AsyncTextIteratorStreamer must be initialized inside a coroutine!
... streamer = AsyncTextIteratorStreamer(tok)
... generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
... thread = Thread(target=model.generate, kwargs=generation_kwargs)
... thread.start()
... generated_text = ""
... async for new_text in streamer:
... generated_text += new_text
>>> print(generated_text)
>>> asyncio.run(main())
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,새 텍스트를 큐에 넣습니다. 스트림이 종료되는 경우, 큐에 중지 신호도 넣습니다.
클래스 transformers.TextDiffusionStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsesleep_time: float | None = None**decode_kwargs: Any )
텍스트 확산 출력을 출력하는 스트리머입니다. 중간 확산 단계(초안)는 일시적이며 후속 초안에 의해 덮어쓰이고, 확인된 텍스트가 출력되면 제거됩니다.
tmux와 같은 환경에서 실행 중이라면, 초안 텍스트가 자기 자신을 덮어쓰지 못할 수 있습니다.
예:
>>> from transformers import DiffusionGemmaForBlockDiffusion, AutoProcessor, TextDiffusionStreamer
>>> model = DiffusionGemmaForBlockDiffusion.from_pretrained(
... "google/diffusiongemma-26B-A4B-it", device_map="auto",
... )
>>> processor = AutoProcessor.from_pretrained("google/diffusiongemma-26B-A4B-it")
>>> chat = [{"role": "user", "content": "Why is the sky blue?"},]
>>> input_ids = processor.apply_chat_template(
... chat, tokenize=True, return_tensors="pt", add_generation_prompt=True
... )
>>> streamer = TextDiffusionStreamer(tokenizer=processor.tokenizer)
>>> model.generate(input_ids.to(model.device), max_new_tokens=512, streamer=streamer)남은 캐시를 모두 비우고 새 줄을 출력합니다.
확인된 토큰을 수신하고, 초안을 지운 후, 이를 영구적으로 출력합니다.
드래프트 토큰의 전체 시퀀스를 수신하고, 이를 디코딩한 후 노란색으로 출력합니다. 이전 드래프트를 덮어씁니다.
캐시
단일 레이어의 캐시를 위한 기본 추상 클래스.
레이어가 보유할 수 있는 최대 시퀀스 길이를 반환합니다. -1 값은 최대치가 없거나 최대치가 정의되지 않음을 의미하며, 예를 들어 무한정 확장되는 동적 어텐션 레이어나 시퀀스 길이 차원이 없는 선형 어텐션 레이어가 해당됩니다.
cache 값을 초기화하되, 객체는 유지합니다
beam search를 위해 이 레이어의 캐시를 재배열합니다.
생성되는 토큰이 증가함에 따라 동적으로 확장되는 캐시 레이어입니다. 이는 생성형 모델의 기본 설정입니다.
키와 값 상태를 [batch_size, num_heads, seq_len, head_dim] 형태의 텐서로 저장합니다.
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
현재 캐시 레이어에서 tokens_to_remove 토큰을 제거합니다.
repeats만큼 배치 차원 방향으로 캐시를 반복합니다.
캐시의 배치 차원에는 indices만 유지합니다.
클래스 transformers.StaticLayer
< source >( max_cache_len: int**kwargs )
[batch_size, num_heads, max_cache_len, head_dim] 형태의 정적 텐서로 키와 값 상태를 저장하는 정적 캐시 레이어입니다.
전체 백킹 텐서를 지연 배정하고, 이후에 이를 인플레이스(in-place)로 수정합니다. torch.compile 지원을 위해 설계되었습니다.
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
키와 값 텐서의 지연 초기화. 이를 통해 런타임에 dtype, device, TP의 경우 num_heads 등 모든 속성을 직접 가져올 수 있으며, 이는 각 update 시점에 device, dtype 등을 다시 이동할 필요가 없어 매우 실용적입니다(이 과정은 정적 dynamo 주소도 깨뜨릴 수 있습니다).
이것이 원치 않는 동작이라면, Cache에서 직접 early_initialization(...)을 호출할 수 있습니다. 이렇게 하면 해당 함수가 사전에 호출됩니다(예를 들어 torch.export의 경우 필수입니다). 또한 prefill 자체가 컴파일된 영역에 포함되는 경우(예: chunked prefill)에도 필요합니다.
class transformers.StaticSlidingWindowLayer
< source >( max_cache_len: intsliding_window: int**kwargs )
[batch_size, num_heads, min(max_cache_len, sliding_window), head_dim] 형태의 정적 텐서로 키와 값 상태를 저장하는 정적 캐시 레이어입니다. 전체 백킹 텐서를 지연 배정하고, 이후 이를 인플레이스(in-place)로 수정합니다. torch.compile 지원을 위해 설계되었습니다.
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
키와 값 텐서의 지연 초기화. 이를 통해 런타임에 dtype, device, TP의 경우 num_heads 등 모든 속성을 직접 가져올 수 있으며, 이는 각 update 시점에 device, dtype 등을 다시 이동할 필요가 없어 매우 실용적입니다(이 과정은 정적 dynamo 주소도 깨뜨릴 수 있습니다).
이것이 원치 않는 동작이라면, Cache에서 직접 early_initialization(...)을 호출할 수 있습니다. 이렇게 하면 해당 함수가 사전에 호출됩니다(예를 들어 torch.export의 경우 필수입니다). 또한 prefill 자체가 컴파일된 영역에 포함되는 경우(예: chunked prefill)에도 필요합니다.
class transformers.QuantoQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
class transformers.HQQQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
8비트 부동소수점으로 키 및 값 상태를 저장하는 양자화 레이어입니다. 첫 번째 update 이후에 텐서별 스케일이 고정되므로, 새로운 상태는 그대로 추가됩니다: 잔여 캐시 없음, 재양자화 없음.
더 세분화된 변형은 QuantizedLayer 아래가 아니라 여기에 속합니다. head 차원을 따라 그룹을 나누면 상태가 추가 가능하게 유지되고, 저장된 scale만 텐서로 변환되기 때문입니다.
업데이트
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
key와 value 캐시를 인플레이스로 업데이트하고, 필요한 key 및 value 상태를 반환합니다.
클래스 transformers.Cache
< source >( layers: list[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin | transformers.cache_utils.DummyLayer] | None = Nonelayer_class_to_replicate: type[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin] | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = True )
매개변수
- layers (
Optional, 선택 사항) — 미리 생성된CacheLayerMixin또는LinearAttentionCacheLayerMixin의 목록입니다. 생략(None)된 경우layer_class_to_replicate가 사용됩니다. - layer_class_to_replicate (
type[CacheLayerMixin | LinearAttentionCacheLayerMixin], 선택 사항) —layers가 생략된 경우(None)에만 사용되며, 이 경우 각 레이어의 기본 클래스로 사용되고,update가 현재 레이어 목록보다 큰layer_idx와 함께 호출되는 시점에 레이어가 지연 추가됩니다. - offloading (
bool, 선택 사항, 기본값False) — GPU 메모리를 절약하기 위해 레이어를cpu로 오프로딩할지 여부입니다. - offload_only_non_sliding (
bool, 선택 사항, 기본값True) —offloading이True인 경우, 슬라이딩하지 않는 레이어만 오프로드할지 여부를 추가로 결정합니다(보통 슬라이딩 레이어의 크기가 작아 오프로드할 필요가 없으며, 건너뛰는 것이 더 빠르기 때문입니다).
Cache는 기본적으로 모델 레이어마다 하나씩 배치된 CacheLayerMixin 객체의 목록입니다. 각 레이어의 Cache를 담는 컨테이너 역할을 합니다.
업데이트
< source >( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )
layer_idx 레이어에 대해 캐시를 새로운 key_states와 value_states로 업데이트합니다.
초기 초기화
< source >( batch_size: intnum_heads: int | list[int]head_dim: int | list[int]dtype: dtypedevice: device )
모든 레이어를 사전에 초기화합니다(그렇지 않으면 첫 번째 update 호출 시 지연 초기화됩니다).
export 레시피에 유용하며, export는 모든 것을 사전에 필요로 하기 때문입니다.
…
layer_idx의 해당 레이어에 대해 반환될 길이와 오프셋에 해당하는 튜플 (kv_length, kv_offset)을 반환합니다.
마스크는 각 레이어에 대해 주어진 길이(kv_length, kv_offset)와 패턴에 따라 준비됩니다.
캐시의 최대 길이를 반환합니다. layer_idx가 제공되지 않은 경우(기본값)에는 모든 레이어에 걸친 최대 값을 반환합니다. 그렇지 않으면, 주어진 레이어에 대해 지원되는 최대 값을 반환합니다. -1 값은 최대치가 없거나 최대치가 정의되지 않음을 의미하며, 예를 들어 무한정 확장될 수 있는 동적 어텐션 레이어나 시퀀스 길이 차원이 없는 선형 어텐션 레이어에 해당합니다.
모든 레이어 텐서를 재귀적으로 초기화
beam search를 위한 캐시 재배치
현재 Cache에서 tokens_to_remove 토큰을 제거합니다. 메모리에 모든 과거 상태를 유지할 필요가 없는 레이어, 예를 들어 슬라이딩 윈도우 레이어나 선형 어텐션 레이어의 경우, 캐시된 상태의 크기를 최소 작동 크기로 제한합니다. 즉, crop(0)이 항상 no-op인 것은 아니며, 다음 forward에 필요하지 않은 상태(즉, 불필요한 상태)를 Cache에서 제거할 수 있습니다.
캐시를 반복하고 교차 삽입
캐시에서 인덱스 선택
클래스 transformers.DynamicCache
< source >( ddp_cache_data: collections.abc.Iterable[tuple[typing.Optional[torch.Tensor], ...]] | None = Noneconfig: transformers.configuration_utils.PreTrainedConfig | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = False )
매개변수
- ddp_cache_data (
Iterable[tuple[torch.Tensor, torch.Tensor]], 선택 사항) — 원래torch.distributed(DDP)와의 호환성을 위해 추가되었습니다. 간단히 말해, 이는map(gather_map, zip(*caches))이며, 즉 이터러블의 각 항목에는 torch.distributed를 통해 리플리카 전체에서 수집된 레이어의 키와 값 상태가 포함됩니다(shape=[global batch size, num_heads, seq_len, head_dim]). 참고: 올바르게 작동하려면 첫 번째 인수로 전달되어야 합니다. - config (
PreTrainedConfig, 선택 사항) — 이 Cache가 사용될 모델의 config입니다. 전달되면 슬라이딩 또는 하이브리드 레이어 구조를 확인하는 데 사용되어 캐시된 텐서의 메모리 요구량을[batch_size, num_heads, min(seq_len, sliding_window), head_dim]으로 크게 줄일 수 있습니다. - offloading (
bool, 선택 사항, 기본값False) — GPU 메모리를 절약하기 위해 레이어를cpu로 오프로딩할지 여부입니다. - offload_only_non_sliding (
bool, 선택 사항, 기본값False) —offloading이True인 경우, 슬라이딩하지 않는 레이어만 오프로드할지 추가적으로 결정합니다(보통 슬라이딩 레이어의 크기가 작아 오프로드할 필요가 없으며, 건너뛰는 것이 더 빠르기 때문입니다).
생성되는 토큰이 증가함에 따라 동적으로 확장되는 캐시입니다. 이는 생성형 모델의 기본값입니다.
각 레이어에 하나씩, CacheLayer의 리스트로 키와 값 상태를 저장합니다. CacheLayer 내 각 텐서의 예상된 형태는 [batch_size, num_heads, seq_len, head_dim]입니다.
config가 전달되면 슬라이딩 또는 하이브리드 캐시 구조를 추가로 확인하여, 캐시된 텐서의 메모리 요구량을 [batch_size, num_heads, min(seq_len, sliding_window), head_dim]으로 크게 줄입니다.
모든 캐시 클래스에서 구현되는 공통 메서드에 대한 자세한 내용은 Cache를 참조하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, DynamicCache
>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
>>> inputs = tokenizer(text="My name is Qwen2", return_tensors="pt")
>>> # Prepare a cache class and pass it to model's forward
>>> past_key_values = DynamicCache(config=model.config)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation클래스 transformers.StaticCache
< source >( config: PreTrainedConfigmax_cache_len: intoffloading: bool = Falseoffload_only_non_sliding: bool = True**kwargs )
매개변수
- config (
PreTrainedConfig) — 이 Cache가 사용될 모델의 config입니다. 슬라이딩 또는 하이브리드 레이어 구조를 확인하고 각 레이어를 그에 맞게 초기화하는 데 사용됩니다. - max_cache_len (
int) — 이 Cache가 보유해야 할 최대 토큰 수입니다. - offloading (
bool, 선택 사항, 기본값False) — GPU 메모리를 절약하기 위해 레이어를cpu로 오프로딩할지 여부입니다. - offload_only_non_sliding (
bool, 선택 사항, 기본값True) —offloading이True인 경우, 슬라이딩하지 않는 레이어만 오프로드할지 여부를 추가로 결정합니다(보통 슬라이딩 레이어의 크기가 작아 오프로드할 필요가 없으며, 건너뛰는 것이 더 빠르기 때문입니다).
torch.compile(model) 및 torch.export()와 함께 사용할 Static Cache 클래스입니다. config에서 잠재적인 하이브리드 캐시 구조를 확인하고, 각 레이어를 그에 맞게 초기화합니다.
모든 캐시 클래스에서 구현되는 공통 메서드에 대한 자세한 내용은 Cache를 참조하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, StaticCache
>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
>>> inputs = tokenizer(text="My name is Llama", return_tensors="pt")
>>> # Prepare a cache class and pass it to model's forward
>>> # Leave empty space for 10 new tokens, which can be used when calling forward iteratively 10 times to generate
>>> max_generated_length = inputs.input_ids.shape[1] + 10
>>> past_key_values = StaticCache(config=model.config, max_cache_len=max_generated_length)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
StaticCache()class transformers.QuantizedCache
< source >( backend: strconfig: PreTrainedConfignbits: int | None = Noneaxis_key: int | None = Noneaxis_value: int | None = Noneq_group_size: int | None = Noneresidual_length: int | None = None )
매개변수
- backend (
str) — 사용할 양자화 백엔드입니다.("quanto", "hqq", "fp8")중 하나입니다. - config (
PreTrainedConfig) — 이 Cache가 사용될 모델의 config입니다. - nbits (
int, 선택 사항, 기본값 4) — 양자화에 사용할 비트 수입니다. - axis_key (
int, 선택 사항, 기본값 0) — 키를 양자화할 축입니다. - axis_value (
int, 선택 사항, 기본값 0) — 값을 양자화할 축입니다. - q_group_size (
int, 선택 사항, 기본값 64) — 양자화는 키와 값 모두에 대해 설정된q_group_size에 따라 채널별로 수행됩니다. - residual_length (
int, 선택 사항, 기본값 128) — 원본 정밀도 캐시의 최대 용량입니다.
KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache paper에 설명된 것과 유사한 양자화 캐시입니다.
양자화를 적용하여 키와 값에 과도한 메모리를 할당하지 않으면서도 모델이 더 긴 시퀀스 길이를 생성할 수 있도록 합니다.
캐시는 원본 정밀도와 양자화된 캐시를 위한 두 가지 유형의 저장소를 가집니다. residual length가 원본 정밀도 캐시의 최대 용량으로 설정됩니다. 길이가 최대 용량을 초과하면 원본 정밀도 캐시가 폐기되고 양자화된 캐시로 이동합니다.
양자화는 키와 값 모두에 대해 q_group_size가 설정된 채널별 방식으로 수행되며, 이는 논문에서 설명된 방식과 다릅니다.
모든 캐시 클래스에서 구현되는 공통 메서드에 대한 자세한 내용은 Cache를 참조하세요.
마지막 다섯 개의 인수는 그룹 단위 정수 백엔드를 구성합니다. fp8 백엔드는 텐서별 양자화를 수행하며, 이를 거부합니다.
클래스 transformers.EncoderDecoderCache
< source >( *caches )
모든 인코더-디코더 캐시의 베이스, 추상 클래스입니다. 셀프-어텐션과 크로스-어텐션 캐시의 조합을 보유하는 데 사용할 수 있습니다.
모든 캐시 클래스에서 구현되는 공통 메서드에 대한 자세한 내용은 Cache를 참조하세요.
예:
>>> from transformers import AutoProcessor, AutoModelForCausalLM, DynamicCache, EncoderDecoderCache
>>> model = AutoModelForCausalLM.from_pretrained("openai/whisper-small")
>>> processor = AutoProcessor.from_pretrained("openai/whisper-small")
>>> inputs = processor(audio=YOUR-AUDIO, return_tensors="pt")
>>> # Prepare cache classes for encoder and decoder and pass it to model's forward
>>> self_attention_cache = DynamicCache(config=self.config)
>>> cross_attention_cache = DynamicCache(config=self.config)
>>> past_key_values = EncoderDecoderCache(self_attention_cache, cross_attention_cache)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
EncoderDecoderCache()repeats만큼 배치 차원 방향으로 캐시를 반복합니다. 대조적 검색(허브에서)에 사용됩니다.
캐시의 배치 차원 indices만 유지합니다. 대조적 검색(Hub에서)에 사용됩니다.
현재 캐시 레이어에서 tokens_to_remove 토큰을 제거합니다.
캐시 객체의 최대 시퀀스 길이(즉, 최대 용량)를 반환합니다
캐시된 상태의 시퀀스 길이를 반환합니다. 레이어 인덱스를 선택적으로 전달할 수 있습니다.
선택된 빔 인덱스가 주어지면 빔 검색을 위해 캐시를 다시 정렬합니다.
워터마크 유틸
class transformers.WatermarkingConfig
< source >( greenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
워터마크 생성에 필요한 인수를 포함하는 클래스로, generate 시 GenerationConfig에 전달해야 합니다.
인수에 대한 자세한 내용은 이 논문을 참고하세요.
다음 키를 받습니다:
- greenlist_ratio (
float): 워터마킹에 사용됩니다. 어휘 크기 대비 “green” 토큰 사용 비율입니다. 기본값은 0.25입니다. - bias (
float): 워터마킹과 함께 사용됩니다. 선택된 “green” 토큰의 logits에 추가되는 bias입니다. 기본값은 2.0입니다. - hashing_key (
int): 워터마킹에 사용되는 해싱 키입니다. 기본값은 15485863(백만 번째 소수)입니다. - seeding_scheme (
str): 워터마킹에 사용할 알고리즘입니다. 다음 값을 허용합니다:- “lefthash” (기본값): “green” 토큰 선택은 마지막 토큰에 따라 결정됩니다(논문 Algorithm 2).
- “selfhash”: “green” 토큰 선택은 현재 토큰 자체에 따라 결정됩니다(논문 Algorithm 3). 이 방식의 단점은 모든 가능한 다음 토큰을 고려해야 하므로 “lefthash”보다 느릴 수 있다는 것입니다.
- context_width(
int): 시딩에 사용할 이전 토큰의 컨텍스트 길이입니다. 컨텍스트 길이가 길수록 워터마킹이 더 강건해집니다.
class transformers.WatermarkDetector
< source >( model_config: PreTrainedConfigdevice: strwatermarking_config: typing.Union[ForwardRef('WatermarkingConfig'), dict]ignore_repeated_ngrams: bool = Falsemax_cache_size: int = 128 )
매개변수
- model_config (
PreTrainedConfig) — 생성 시 사용되는 모델 특정 인수를 가져오기 위해 사용할 모델 설정입니다. - device (
str) — 워터마크 텍스트 생성 시 사용된 장치입니다. - watermarking_config (Union[
WatermarkingConfig,Dict]) — 텍스트 생성 시 사용된 것과 동일한 워터마킹 설정 및 인자입니다. - ignore_repeated_ngrams (
bool, 선택 사항, 기본값False) — 각 고유한 ngram을 한 번만 카운트할지 여부를 지정합니다. - max_cache_size (
int, 선택 사항, 기본값 128) — 토큰마다 호출되는 시딩/샘플링 알고리즘의 LRU 캐싱에 사용할 최대 크기입니다.
워터마크가 생성된 텍스트를 감지하는 Detector입니다. Detector는 텍스트 생성 시 사용된 설정과 정확히 동일한 설정을 제공받아야 워터마크 greenlist 생성을 재현하여 워터마크를 감지할 수 있습니다. 여기에는 텍스트 생성 시 사용된 올바른 device, 올바른 워터마킹 인자, 올바른 tokenizer vocab size가 포함됩니다. 이 코드는 original repo를 기반으로 작성되었습니다.
자세한 내용은 논문을 참고하세요.
예:
>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig
>>> model_id = "openai-community/gpt2"
>>> model = AutoModelForCausalLM.from_pretrained(model_id)
>>> tok = AutoTokenizer.from_pretrained(model_id)
>>> tok.pad_token_id = tok.eos_token_id
>>> tok.padding_side = "left"
>>> inputs = tok(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
>>> input_len = inputs["input_ids"].shape[-1]
>>> # first generate text with watermark and without
>>> watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
>>> out_watermarked = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
>>> out = model.generate(**inputs, do_sample=False, max_length=20)
>>> # now we can instantiate the detector and check the generated text
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
>>> detection_out_watermarked = detector(out_watermarked, return_dict=True)
>>> detection_out = detector(out, return_dict=True)
>>> detection_out_watermarked.prediction
array([ True, True])
>>> detection_out.prediction
array([False, False])__call__
< source >( input_ids: LongTensorz_threshold: float = 3.0return_dict: bool = False ) → WatermarkDetectorOutput or np.ndarray
매개변수
- input_ids (
torch.LongTensor) — 워터마크가 생성된 텍스트입니다. 감지에 영향을 줄 수 있으므로 프롬프트를 제거하는 것이 좋습니다. - z_threshold (
Dict, 선택 사항, 기본값3.0) — 이 임계값을 변경하면 감지기의 민감도가 변경됩니다. z 임계값이 높을수록 민감도가 낮아지고, z 임계값이 낮을수록 민감도가 높아집니다. - return_dict (
bool, 선택 사항, 기본값False) —~generation.WatermarkDetectorOutput를 반환할지 여부입니다. 반환하지 않으면 boolean 예측값을 반환합니다.
반환값
WatermarkDetectorOutput 또는 np.ndarray
return_dict=True인 경우 WatermarkDetectorOutput, 그렇지 않으면 np.ndarray
ma
클래스 transformers.BayesianDetectorConfig
< source >( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )
이것은 BayesianDetectorModel의 구성을 저장하기 위한 구성 클래스입니다. 지정된 인수에 따라 Bayesian Detector 모델을 인스턴스화하는 데 사용됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
클래스 transformers.BayesianDetectorModel
< source >( config )
매개변수
- config (BayesianDetectorConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스. 구성 파일로 초기화하면 모델에 연결된 가중치는 로드되지 않으며 구성만 로드됩니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
워터마크 감지를 위한 베이지안 분류기.
이 검출기는 베이지안 규칙을 사용하여 워터마킹 점수를 계산합니다. 이 점수는 사후 확률 P(watermarked|g_values)과 P(unwatermarked|g_values)의 비율의 로그에 시그모이드를 적용한 값입니다. 자세한 내용은 논문에서 BayesianScore 섹션을 참고하세요. 논문 URL: https://www.nature.com/articles/s41586-024-08025-4
이 검출기는 Bernoulli(0.5) g-value 분포를 사용하는 비왜곡 Tournament 기반 워터마킹에서만 작동한다는 점에 유의하세요.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )
워터마크가 적용된 사후 확률 P(watermarked|g_values)을 계산합니다.
class transformers.SynthIDTextWatermarkingConfig
< source >( ngram_len: intkeys: listcontext_history_size: int = 1024sampling_table_seed: int = 0sampling_table_size: int = 65536skip_first_ngram_calls: bool = Falsedebug_mode: bool = False )
매개변수
- ngram_len (
int) — Ngram 길이. - keys (
list[int]) — 각 깊이별로 하나씩, 워터마킹 키의 시퀀스입니다. - context_history_size (
int, 선택 사항, 기본값 1024) — 확인된 컨텍스트를 추적하기 위해 유지할 텐서의 크기입니다. - sampling_table_seed (
int, 선택 사항, 기본값 0) — 샘플링 테이블을 생성하기 위한 랜덤 시드. - sampling_table_size (
int, 선택 사항, 기본값 65536) — 샘플링 테이블의 크기. - skip_first_ngram_calls (
bool, 선택 사항, 기본값False) — 첫 번째 ngram 호출을 건너뛸지 여부. - debug_mode (
bool, 선택, 기본값False) — 워터마킹 수정이 적용되기 전에 로짓이 균일한 1로 수정됩니다. 이는 구현을 테스트하기 위한 것입니다.
워터마크 생성에 필요한 인수를 포함하는 클래스로, generate 시 GenerationConfig에 전달해야 합니다.
인수에 대한 자세한 내용은 이 논문을 참고하세요.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')
>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
... keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
... ngram_len=5,
... )
>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
... **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)class transformers.SynthIDTextWatermarkDetector
< source >( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )
매개변수
- detector_module (BayesianDetectorModel) — 파라미터로 초기화된 Bayesian detector 모듈 객체. 사용법은 https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text를 확인하세요.
- logits_processor (
SynthIDTextWatermarkLogitsProcessor) — 워터마킹에 사용되는 logits 프로세서입니다. - tokenizer (
Any) — 모델에 사용되는 토크나이저입니다.
SynthID 텍스트 워터마크 감지 클래스.
이 클래스는 학습된 bayesian detector 모듈로 초기화되어야 합니다. 예를 들어 examples/synthid_text/detector_training.py 스크립트를 참고하여 이 detector 모듈을 학습/저장/로드하는 방법을 확인하세요. 해당 폴더에는 이 detector의 사용 예시도 포함되어 있습니다.
예:
>>> from transformers import (
... AutoTokenizer, BayesianDetectorModel, SynthIDTextWatermarkLogitsProcessor, SynthIDTextWatermarkDetector
... )
>>> # Load the detector. See https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text for training a detector.
>>> detector_model = BayesianDetectorModel.from_pretrained("joaogante/dummy_synthid_detector")
>>> logits_processor = SynthIDTextWatermarkLogitsProcessor(
... **detector_model.config.watermarking_config, device="cpu"
... )
>>> tokenizer = AutoTokenizer.from_pretrained(detector_model.config.model_name)
>>> detector = SynthIDTextWatermarkDetector(detector_model, logits_processor, tokenizer)
>>> # Test whether a certain string is watermarked
>>> test_input = tokenizer(["This is a test input"], return_tensors="pt")
>>> is_watermarked = detector(test_input.input_ids)컴파일 유틸
class transformers.CompileConfig
< source >( fullgraph: bool = Falsedynamic: bool | None = Nonebackend: str | collections.abc.Callable = 'inductor'mode: str = 'reduce-overhead'options: dict | None = None )
매개변수
- fullgraph (
bool, 선택 사항, 기본값False) — False(기본값)인 경우 최적화할 컴파일 가능 영역을 탐색합니다. True인 경우 함수 전체가 단일 그래프로 캡처될 수 있어야 합니다. 이것이 불가능한 경우(즉, 그래프 브레이크가 있는 경우) 오류가 발생합니다. - dynamic (
bool또는None, 선택 사항) — 동적 shape 그래프를 사용하려고 시도할지 여부입니다. - backend (
str또는Callable, 선택 사항, 기본값"inductor") — 사용할 백엔드입니다. - mode (
str, 선택 사항, 기본값"reduce-overhead") — 성능과 오버헤드 사이의 균형을 제어합니다. - options (
dict, 선택 사항) — 백엔드에 전달할 옵션의 사전입니다.
generate에서 자동 컴파일을 사용할 때 torch.compile 동작과 관련된 인수를 포함하는 클래스입니다.
인수에 대한 자세한 내용은 torch.compile을 참조하세요.
예:
>>> from transformers import AutoModelForCausalLM, AutoTokenizer, CompileConfig
>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b')
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b').cuda()
>>> # Automatic compile configuration, used with static cache
>>> compile_config = CompileConfig(dynamic=True)
>>> # Generation with static cache and compile config
>>> input = tokenizer.encode("Hello there, how", return_tensors="pt").cuda()
>>> output = model.generate(
... input, do_sample=False, max_new_tokens=300, cache_implementation="static", compile_config=compile_config
... )
>>> output_text = tokenizer.batch_decode(output, skip_special_tokens=True)[0]