Transformers documentation
Üretim için yardımcı programlar
Üretim için yardımcı programlar
Bu sayfa, generate() tarafından kullanılan tüm yardımcı işlevleri listeler.
Çıktıları Oluştur
generate() çıktısı, ModelOutput'un bir alt sınıfının örneğidir. Bu çıktı, generate() tarafından döndürülen tüm bilgileri içeren bir veri yapısıdır ancak aynı zamanda bir tuple veya sözlük olarak da kullanılabilir.
İşte bir örnek:
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 nesnesi bir GenerateDecoderOnlyOutput'dır; aşağıdaki sınıfın belgelerinde de görülebileceği üzere, bu nesnenin aşağıdaki özellikleri vardır:
sequences: oluşturulan token dizileriscores(isteğe bağlı): dil modelleme başlığı için her üretim adımına ait tahmin puanlarıhidden_states(isteğe bağlı): modelin gizli durumları, her üretim adımı içinattentions(isteğe bağlı): modelin dikkat ağırlıkları, her üretim adımı için
Burada output_scores=True geçtiğimiz için scores mevcut, ancak output_hidden_states=True veya output_attentions=True geçmediğimiz için hidden_states ve attentions yok.
Her özniteliğe normalde yaptığınız gibi erişebilirsiniz ve bu öznitelik model tarafından döndürülmediyse None alırsınız. Örneğin burada generation_output.scores, dil modelleme başlığının ürettiği tüm tahmin puanlarıdır ve generation_output.attentions None'dir.
generation_output nesnesini bir tuple olarak kullandığımızda, yalnızca None değerine sahip olmayan öznitelikleri saklar.
Burada, örneğin, iki öğesi vardır: loss ve ardından logits, dolayısıyla
generation_output[:2]örneğin (generation_output.sequences, generation_output.scores) demetini döndürür.
generation_output nesnesini bir sözlük olarak kullandığımızda, yalnızca None değerine sahip olmayan öznitelikleri saklar. Burada, örneğin, sequences ve scores olan iki anahtarı vardır.
Burada tüm çıktı türlerini belgeledik.
sınıf transformers.generation.GenerateDecoderOnlyOutput
< source >( sequences: LongTensorscores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Noneattentions: tuple[tuple[torch.FloatTensor]] | None = Nonehidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parametreler
- sequences (
torch.LongTensor, şekli(batch_size, sequence_length)) — Oluşturulan diziler. İkinci boyut (sequence_length),max_length'a eşittir veya tüm topluluklareos_token_idnedeniyle erken bittiyse daha kısadır. - scores (
tuple(torch.FloatTensor)isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Dil modelleme başlığının işlenmiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar) her üretim adımında. En fazlamax_new_tokensöğeye sahip (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size, config.vocab_size). - logits (
tuple(torch.FloatTensor)isteğe bağlı,output_logits=Trueolduğunda döndürülür) — Her üretim adımında dil modelleme başlığının işlenmemiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar). En fazlamax_new_tokensöğe içeren (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size, config.vocab_size). - attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, generated_length, hidden_size). - past_key_values (
Cache, isteğe bağlı,use_cache=Trueolduğunda döndürülür) — Çözümlemeyi hızlandırmak için kullanılan model önbelleğini döndürür. Farklı modellerin farklı önbellek biçimleri vardır, modelin dokümantasyonuna bakın. Genellikle bir Cache örneğidir.
Beam olmayan yöntemler kullanıldığında, yalnızca decoder'a sahip üretim modellerinin çıktıları.
sınıf transformers.generation.GenerateEncoderDecoderOutput
< source >( sequences: LongTensorscores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Noneencoder_attentions: tuple[torch.FloatTensor] | None = Noneencoder_hidden_states: tuple[torch.FloatTensor] | None = Nonedecoder_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonecross_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parametreler
- sequences (
torch.LongTensor, şekli(batch_size*num_return_sequences, sequence_length)) — Oluşturulan diziler. İkinci boyut (sequence_length),max_length'a eşittir veya tüm topluluklareos_token_idnedeniyle erken bittiyse daha kısadır. - scores (
tuple(torch.FloatTensor)isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Dil modelleme başlığının işlenmiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar) her üretim adımında. En fazlamax_new_tokensöğeye sahip (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size, config.vocab_size). - logits (
tuple(torch.FloatTensor)isteğe bağlı,output_logits=Trueolduğunda döndürülür) — Her üretim adımında dil modelleme başlığının işlenmemiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar). En fazlamax_new_tokensöğe içeren (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size, config.vocab_size). - encoder_attentions (
tuple(torch.FloatTensor), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) —torch.FloatTensor(decoder'ın her katmanı için bir tane) içeren bir tuple, şekli(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.FloatTensor), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) —torch.FloatTensor(gömme çıktısı için bir tane + her katman çıktısı için bir tane) içeren bir tuple, şekli(batch_size, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'in her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, generated_length, hidden_size). - past_key_values (
Cache, isteğe bağlı,use_cache=Trueolduğunda döndürülür) — Çözümlemeyi hızlandırmak için kullanılan model önbelleğini döndürür. Farklı modellerin farklı önbellek biçimleri vardır, modelin dokümantasyonuna bakın. Genellikle bir Cache örneğidir.
Beam olmayan yöntemler kullanıldığında, encoder-decoder üretim modellerinin çıktıları.
sınıf transformers.generation.GenerateBeamDecoderOnlyOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.FloatTensor] = Nonescores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneattentions: tuple[tuple[torch.FloatTensor]] | None = Nonehidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parametreler
- sequences (
torch.LongTensor, şekli(batch_size*num_return_sequences, sequence_length)) — Oluşturulan diziler. İkinci boyut (sequence_length),max_length'a eşittir veya tüm topluluklareos_token_idnedeniyle erken bittiyse daha kısadır. - sequences_scores (
torch.FloatTensor, şekli(batch_size*num_return_sequences), isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Üretilensequencesdizilerinin nihai beam puanları. - scores (
tuple(torch.FloatTensor)isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Her üretim adımında sözlükteki her token için beam geçiş skorları. Bu beam'de daha önce üretilen tokenların log softmax'ine koşullu token log olasılıklarından oluşan beam geçiş skorları. En fazlamax_new_tokensöğe içeren (her üretilen token için bir öğe), her tensörün şekli(batch_size*num_beams, config.vocab_size)olantorch.FloatTensordemeti. - logits (
tuple(torch.FloatTensor)isteğe bağlı,output_logits=Trueolduğunda döndürülür) — Her üretim adımında dil modelleme başlığının işlenmemiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar). En fazlamax_new_tokensöğe içeren (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Her üretim adımında üretilen token kimliğinin beam indeksleri. Şekli(batch_size*num_return_sequences, sequence_length)olan birtorch.LongTensor. - attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir eleman içeren, decoder'ın her katmanı için bir eleman içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size*num_beams, num_heads, generated_length, sequence_length). - hidden_states (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) — Her üretilen token için bir eleman içeren, decoder'ın her katmanı için bir eleman içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size*num_beams*num_return_sequences, generated_length, hidden_size). - past_key_values (
Cache, isteğe bağlı,use_cache=Trueolduğunda döndürülür) — Çözümlemeyi hızlandırmak için kullanılan model önbelleğini döndürür. Farklı modellerin farklı önbellek biçimleri vardır, modelin dokümantasyonuna bakın. Genellikle bir Cache örneğidir.
Beam yöntemleri kullanıldığında, yalnızca decoder'a sahip üretim modellerinin çıktıları.
sınıf transformers.generation.GenerateBeamEncoderDecoderOutput
< source >( sequences: LongTensorsequences_scores: typing.Optional[torch.FloatTensor] = Nonescores: tuple[torch.FloatTensor] | None = Nonelogits: tuple[torch.FloatTensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneencoder_attentions: tuple[torch.FloatTensor] | None = Noneencoder_hidden_states: tuple[torch.FloatTensor] | None = Nonedecoder_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonecross_attentions: tuple[tuple[torch.FloatTensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )
Parametreler
- sequences (
torch.LongTensor, şekli(batch_size*num_return_sequences, sequence_length)) — Oluşturulan diziler. İkinci boyut (sequence_length),max_length'a eşittir veya tüm topluluklareos_token_idnedeniyle erken bittiyse daha kısadır. - sequences_scores (
torch.FloatTensor, şekli(batch_size*num_return_sequences), isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Üretilensequencesdizilerinin nihai beam puanları. - scores (
tuple(torch.FloatTensor)isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Her üretim adımında sözlükteki her token için beam geçiş skorları. Bu beam'de daha önce üretilen tokenların log softmax'ine koşullu token log olasılıklarından oluşan beam geçiş skorları. En fazlamax_new_tokensöğe içeren (her üretilen token için bir öğe), her tensörün şekli(batch_size*num_beams, config.vocab_size)olantorch.FloatTensordemeti. - logits (
tuple(torch.FloatTensor)isteğe bağlı,output_logits=Trueolduğunda döndürülür) — Her üretim adımında dil modelleme başlığının işlenmemiş tahmin puanları (SoftMax öncesi her sözlük belirteci için puanlar). En fazlamax_new_tokensöğe içeren (her üretilen belirteç için bir öğe)torch.FloatTensordemeti, her tensörün şekli(batch_size*num_beams, config.vocab_size). - beam_indices (
torch.LongTensor, isteğe bağlı,output_scores=Trueolduğunda döndürülür) — Her üretim adımında üretilen token kimliğinin beam indeksleri. Şekli(batch_size*num_return_sequences, sequence_length)olan birtorch.LongTensor. - encoder_attentions (
tuple(torch.FloatTensor), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) —torch.FloatTensor(decoder'ın her katmanı için bir tane) içeren bir tuple, şekli(batch_size, num_heads, sequence_length, sequence_length). - encoder_hidden_states (
tuple(torch.FloatTensor), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) —torch.FloatTensor(gömme çıktısı için bir tane + her katman çıktısı için bir tane) içeren bir tuple, şekli(batch_size*num_beams*num_return_sequences, sequence_length, hidden_size). - decoder_attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length). - cross_attentions (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_attentions=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'ın her katmanı için bir öğe içeren tuple'larıntorch.FloatTensortuple'ı, şekli(batch_size, num_heads, generated_length, sequence_length). - decoder_hidden_states (
tuple(tuple(torch.FloatTensor)), isteğe bağlı,output_hidden_states=Trueolduğunda döndürülür) — Her üretilen token için bir öğe içeren, decoder'in her katmanı için bir öğe içeren tuple'ların tuple'ı, şekli(batch_size*num_beams*num_return_sequences, generated_length, hidden_size)olantorch.FloatTensor'lardan oluşur. - past_key_values (
Cache, isteğe bağlı,use_cache=Trueolduğunda döndürülür) — Çözümlemeyi hızlandırmak için kullanılan model önbelleğini döndürür. Farklı modellerin farklı önbellek biçimleri vardır, modelin dokümantasyonuna bakın. Genellikle bir Cache örneğidir.
Beam yöntemleri kullanıldığında, encoder-decoder üretim modellerinin çıktıları.
LogitsProcessor
Bir LogitsProcessor, bir dil modeli başlığının üretim için tahmin skorlarını değiştirmek üzere kullanılabilir.
sınıf transformers.AlternatingCodebooksLogitsProcessor
< source >( input_start_len: intsemantic_vocab_size: intcodebook_size: int )
Bark'ın iki kod kitabı arasında dönüşümlü üretimi zorlayan LogitsProcessor.
Bu logits işlemcisi yalnızca Bark'ın ince alt modeliyle uyumludur. Örnekler için model dokümantasyonuna bakın.
Sınıflandırıcı serbest yönlendirme (CFG) için LogitsProcessor. Skorlar, batch boyutu üzerinde bölünür; ilk yarı, koşullu logitlere (girdi isteminden tahmin edilenler) karşılık gelirken ikinci yarı, koşulsuz logitlere (boş veya ‘null’ istemden tahmin edilenler) karşılık gelir. İşleyici, guidance_scale ile parametreleştirilen koşullu ve koşulsuz logitler üzerinden ağırlıklı bir ortalama hesaplar.
Daha fazla bilgi için makaleye bakın.
Bu logits işlemcisi yalnızca MusicGen ile uyumludur.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.EncoderNoRepeatNGramLogitsProcessor
< source >( encoder_ngram_size: intencoder_input_ids: LongTensor )
LogitsProcessor, NoRepeatNGramLogitsProcessor ile benzer şekilde çalışır ancak yalnızca prompt'ta bulunan n-gram'ların tekrarını önlemek için uygulanır.
Bir dil modelinde sohbet etme eğilimini teşvik etmek için tasarlandı; bunu, önceki konuşma turlarında bulunan n-gram'ların üretilmesini engelleyerek yapıyor.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.EncoderRepetitionPenaltyLogitsProcessor
< source >( penalty: floatencoder_input_ids: LongTensor )
Parametreler
- penalty (
float) — Tekrar cezası parametresi. 1.0 ceza uygulanmadığı anlamına gelir. 1.0'un üzerindeki değerler prompt tokenlarını ödüllendirir. 0.0 ile 1.0 arasındaki değerler prompt tokenlarını cezalandırır. - encoder_input_ids (
torch.LongTensor) — Decoder kimlikleri içinde tekrarlanması gereken encoder_input_ids.
LogitsProcessor, RepetitionPenaltyLogitsProcessor ile benzer şekilde çalışır ancak istemde (prompt) bulunan token'lara ters bir ceza uygular. Başka bir deyişle, 1.0'dan büyük bir ceza değeri, istemde yer alan token'ların seçilme olasılığını artırır.
Girdiye dayalı görevlerde, örneğin özetlemede, halüsinasyonu önlemek amacıyla tasarlanmıştır. Başlangıçta kodlayıcı-çözücü modeller için öngörülse de, LLM'ler gibi yalnızca çözücü modellerle de kullanılabilir.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.EpsilonLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parametreler
- epsilon (
float) — 0'dan büyük bir değere ayarlanırsa, üretim için yalnızca olasılıklarıepsilonveya daha yüksek olan en çok tokenlar korunur. - filter_value (
float, isteğe bağlı, varsayılan -inf) — Tüm filtrelenen değerler bu float değerine ayarlanır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Filtrelenemeyecek en az token sayısı.
Epsilon örneklemesi yapan, yani prob >= epsilon koşulunu sağlayan tokenlarla sınırlayan bir LogitsProcessor. Bu kısıtı sağlayan token yoksa, en büyük min_tokens_to_keep tokenlarını alır. Daha fazla bilgi için Truncation Sampling as Language Model Desmoothing makalesine bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.EtaLogitsWarper
< source >( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1device: str = 'cpu' )
Parametreler
- epsilon (
float) — (0, 1) aralığında bir float değeri. Dinamik kesme değerini,eta, hesaplamak için kullanılan hiperparametre. Makalede önerilen değerler, modelin boyutuna bağlı olarak 3e-4 ile 4e-3 arasında değişmektedir. - filter_value (
float, isteğe bağlı, varsayılan -inf) — Dinik kesme değeri olaneta'nın altında bulunan tüm değerler bu float değerine ayarlanır. Bu parametre, üretimden tamamen hariç tutulması gereken çok düşük olasılıklı token'lar için logit'lerin değiştirilmesi gerektiğinde kullanışlıdır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Olasılıklarından bağımsız olarak üretim için korunması gereken en az token sayısını belirtir. Örneğin,min_tokens_to_keep1 olarak ayarlanırsa, tüm tokenların olasılıklarıetakesme değerinin altında olsa bile, üretim için her zaman en az bir token korunur. - device (
str, isteğe bağlı, varsayılan"cpu") — Tensörlerin tahsis edileceği cihaz.
Dinamik bir kesme değeri olan eta'nın altındaki olasılıklara sahip tokenları filtrelemek için kullanılan eta-sampling tekniğini uygulayan LogitsProcessor. eta, epsilon hiperparametresi ile token olasılıklarının entropisinin bir kombinasyonuna dayanarak hesaplanır, yani eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities))). Bu kısıtı sağlayan token yoksa en büyük min_tokens_to_keep token alınır. Sinirsel dil modelleri tarafından üretilen uzun metin örneklerindeki düşük kalite sorununu ele alarak daha tutarlı ve akıcı metinlere yol açar. Daha fazla bilgi için Truncation Sampling as Language Model Desmoothing makalesine bakın. Not: Bu LogitsProcessor'un çalışması için do_sample'ın True olarak ayarlanması gerekir.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.ExponentialDecayLengthPenalty
< source >( exponential_decay_length_penalty: tupleeos_token_id: typing.Union[int, list[int], torch.Tensor]input_ids_seq_length: int )
Parametreler
- exponential_decay_length_penalty (
tuple(int, float)) — Bu tuple şu öğelerden oluşmalıdır:(start_index, decay_factor)buradastart_indexcezanın nerede başladığını belirtir vedecay_factorüstel azalmanın katsayısını temsil eder - eos_token_id (
Union[int, list[int], torch.Tensor]) — end-of-sequence token'ın kimlik numarası(ları). - input_ids_seq_length (
int) — Girdi dizisinin uzunluğu.
start_index değerine ulaşıldıktan sonra eos_token_id skorunu üstel olarak artıran LogitsProcessor. Bu, sert bir kesme noktası olmadan daha kısa diziler üretmeye olanak tanır ve eos_token'ın anlamlı bir konumda tahmin edilmesini sağlar.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.ForcedBOSTokenLogitsProcessor
< source >( bos_token_id: int )
Belirtilen token'ın üretilen ilk token olarak uygulanmasını sağlayan LogitsProcessor. Encoder-decoder modelleriyle kullanılır.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.ForcedEOSTokenLogitsProcessor
< source >( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
max_length değerine ulaşıldığında, belirtilen token'ın son üretilen token olarak zorlanmasını sağlayan LogitsProcessor.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
nan ve inf değerlerini kaldırarak üretim yönteminin başarısız olmasını önleyen bir LogitsProcessor. Üretim yöntemini yavaşlatabileceğinden, logits işleyicisinin yalnızca gerekli durumlarda kullanılması gerektiğini unutmayın.
Bu logits işlemcisinin generate örneği yoktur, çünkü kullanımını gerektirecek doğru bir bayrak kombinasyonu olmamalıdır.
__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
Skorları log-softmax kullanarak normalize etmek için Log-softmax. Bu kütüphanede kullanılan arama algoritması bunu yapmadığı için (yalnızca önceden yapar, ancak yeniden normalizasyon gerekebilir), logits işleyicileri veya dönüştürücüler uygulandıktan sonra beam search sırasında skorları normalize etmek önemlidir; ancak hipotezleri karşılaştırırken skorların normalize edildiğini varsayar.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
Üretim sırasında uygulanabilen tüm logit işleyicileri için soyut temel sınıf.
__call__
< source >( input_ids: LongTensorscores: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
This class can be used to create a list of LogitsProcessor to subsequently process a scores input tensor.
This class inherits from list and adds a specific call method to apply each LogitsProcessor to the
inputs.
__call__
< source >( input_ids: LongTensorscores: FloatTensor**kwargs ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax değerleridir. - kwargs (
dict[str, Any], isteğe bağlı) — Bir logits işlemcisine özgü ek kwargs.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.MinLengthLogitsProcessor
< source >( min_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
LogitsProcessor, EOS olasılığını 0'a ayarlayarak minimum uzunluğu zorlar. Not: Çoğu LLM gibi yalnızca decoder'a sahip modellerde, uzunluk istemi (prompt) dahil edilir.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.MinNewTokensLengthLogitsProcessor
< source >( prompt_length_to_skip: intmin_new_tokens: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )
Parametreler
- prompt_length_to_skip (
int) — Girdi jetonlarının uzunluğu.generateile kullanıldığında geçerli bir argüman değildir çünkü girdi uzunluğu otomatik olarak atanır. - min_new_tokens (
int) —eos_token_idpuanının-float("Inf")olarak ayarlandığı yeni token uzunluğunun alt sınırı. - eos_token_id (
Union[int, list[int], torch.Tensor]) — end-of-sequence token'ın kimlik numarası(ları). - device (
str, isteğe bağlı, varsayılan"cpu") — Tensörlerin tahsis edileceği cihaz.
Yeni token'lar için minimum uzunluğu, EOS (End-Of-Sequence) token olasılığını 0'a ayarlayarak uygulayan LogitsProcessor. MinLengthLogitsProcessor'in aksine, bu işlemci prompt'u yok sayar.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.MinPLogitsWarper
< source >( min_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parametreler
- min_p (
float) — En olası token'ın olasılığına göre ölçeklendirilen minimum token olasılığı. 0 ile 1 arasında bir değer olmalıdır. Tipik değerler 0.01-0.2 aralığındadır vetop_p'nin 0.99-0.8 aralığında ayarlanmasına benzer bir seçiciliğe sahiptir (normaltop_pdeğerlerinin tersini kullanın). - filter_value (
float, isteğe bağlı, varsayılan -inf) — Tüm filtrelenen değerler bu float değerine ayarlanır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Filtrelenemeyecek en az token sayısı.
LogitsProcessor, min-p işlevini gerçekleştirir; yani en olası token'ın olasılığına göre ölçeklenmiş, minimum bir olasılığın üzerindeki tüm token'ları korur. Sonuç olarak, yüksek olasılıklı token'ların varlığında filtre daha agresif hale gelir; bu da sapmamamız gereken, kendinden emin bir çıktının işaretidir.
Genellikle TemperatureLogitsWarper ile birlikte kullanılır. TopPLogitsWarper ve TopKLogitsWarper yerine bir alternatif olarak kullanılır.
@menhguin ve @kalomaze tarafından oluşturuldu (github kullanıcı adları). Kod, bu dış PR'dan uyarlanmıştır
Örnekler:
>>> 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, 9sınıf transformers.NoBadWordsLogitsProcessor
< source >( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )
Belirtilen dizilerin asla seçilmeyeceğini zorlayan LogitsProcessor.
Üretilen metinde yer almaması gereken kelimelerin token kimliklerini almak için, tokenizer'ı başlatırken
add_prefix_space=Truedeğerini ayarlamayı vetokenizer(bad_words, add_special_tokens=False).input_idsifadesini kullanmayı unutmayın.add_prefix_spaceargümanı yalnızca bazı yavaş tokenizer'lar tarafından desteklenir, çünkü hızlı tokenizer'ların önek davranışlarıpre tokenizersbileşeninden gelir. Daha fazla bilgi için buraya bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.NoRepeatNGramLogitsProcessor
< source >( ngram_size: int )
N-gramlar, bir metin dizisinden alınan “n” ardışık kelime, karakter veya token grubudur. “She runs fast” cümlesi verildiğinde, bi-gramlar (n=2) (“she”, “runs”) ve (“runs”, “fast”) olur. Metin üretiminde, kelime dizilerinin tekrarlanmaması daha çeşitli bir çıktı sağlar. Bu LogitsProcessor, yasaklı tokenların puanlarını negatif sonsuza ayarlayarak n-gramların tekrarlanmamasını zorlar; bu da söz konusu tokenların puanların daha fazla işlenmesi sırasında hesaba katılmamasını sağlar. Not: Çoğu LLM gibi yalnızca decoder içeren modellerde, n-gramların elde edilmesi için prompt da dikkate alınır. Fairseq.
N-gram cezalarını dikkatli kullanın. Örneğin, New York şehri hakkında bir makalede 2-gram (bigram) cezalandırması, şehrin adının metinde yalnızca bir kez geçmesine yol açan istenmeyen sonuçlara neden olabilir. Referans
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.PrefixConstrainedLogitsProcessor
< source >( prefix_allowed_tokens_fn: Callablenum_beams: int )
Parametreler
- prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]) — Bu fonksiyon, her adımda beam search'i yalnızca izin verilen token'lara kısıtlar. Bu fonksiyoninputs_idsve batch kimliğibatch_idolmak üzere 2 argüman alır. Önceki adımlarda üretileninputs_idstoken'ları vebatch_idbatch kimliğine bağlı olarak, bir sonraki üretim adımı için izin verilen token'ların listesini döndürmelidir.
Kısıtlı üretimi zorlayan ve önek koşullu kısıtlı üretim için faydalı olan LogitsProcessor. Daha fazla bilgi için Autoregressive Entity Retrieval bölümüne bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.RepetitionPenaltyLogitsProcessor
< source >( penalty: floatprompt_ignore_length: int | None = None )
Parametreler
- penalty (
float) — Tekrar cezası parametresi. 1.0 ceza uygulanmadığı anlamına gelir. 1.0 üzerindeki değerler, daha önce üretilmiş tokenları cezalandırır. 0.0 ile 1.0 arasındaki değerler, daha önce üretilmiş tokenları ödüllendirir. - prompt_ignore_length (
int, isteğe bağlı) — Özel olarak verilirse, ceza hesabında kullanılmayacak olan orijinal girdi kimlikleri dizisinin uzunluğu.
Önceki tokenlerin tekrarını bir ceza yoluyla önleyen LogitsProcessor. Bu ceza, token başına en fazla bir kez uygulanır. Dikkat edin, çoğu LLM gibi yalnızca çözücü (decoder-only) modeller için, varsayılan olarak dikkate alınan tokenler istemi (prompt) dahilindedir.
Orijinal makalede, yazarlar, doğru üretim ile tekrarsızlık arasında iyi bir dengeye ulaşmak için yaklaşık 1,2 değerinde bir ceza kullanmayı önermektedir. Tekrarı cezalandırmak ve azaltmak için, daha yüksek değerlerin daha güçlü cezalandırdığı 1,0 üzerindeki penalty değerlerini kullanın. Tekrarı ödüllendirmek ve teşvik etmek için, daha düşük değerlerin daha güçlü ödüllendirdiği 0,0 ile 1,0 arasındaki penalty değerlerini kullanın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.SequenceBiasLogitsProcessor
< source >( sequence_bias: list )
Parametreler
- sequence_bias (
list[list[Union[list[int], float]]]) — Bir token dizisini önyargı terimine eşleyen iç içe listeler (ör.[[[10, 45], -2.0], [[64], -7.5]]). Pozitif önyargılar, dizinin seçilme olasılığını artırırken, negatif önyargılar tam tersini yapar. Bir dizinin uzunluğu 1 ise, önyargısı her zaman uygulanır. Aksi takdirde, önyargı yalnızca ilgili dizinin tamamlanmak üzere olduğu durumlarda (bu işleyici uygulandıktan sonraki token seçim adımında) uygulanır.
LogitsProcessor, dizilere ek bir önyargı uygular. Önyargı, bir dizinin son token'ına, bir sonraki üretilen token'ın diziyi tamamlayabileceği durumda uygulanır. Sonuç olarak, birden fazla token içeren dizilerdeki önyargıdan en iyi şekilde yararlanmak için, kısmen tamamlanmış ve negatif önyargıya sahip dizileri zarif bir şekilde aşmak için beam yöntemlerini kullanmayı ve önyargının daha erken uygulanmasını sağlamak için önyargıyı bu dizilerin öneklerine uygulamayı düşünün.
Token düzeyinde, bir kelimeyi önyargılandırmak, başında bir boşluk olan bir kelimeyi önyargılandırmaktan farklıdır. Cümlenin ortasındaki “foo” kelimesini önyargılandırmak istiyorsanız, büyük olasılıkla bir önek boşluğu ekleyip ” foo” kelimesini önyargılandırmak istersiniz. Bunun nedenini öğrenmek için NLP kursumuzun tokenizer bölümüne göz atın: https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.SuppressTokensAtBeginLogitsProcessor
< source >( begin_suppress_tokensbegin_indexdevice: str = 'cpu' )
SuppressTokensAtBeginLogitsProcessor, generate fonksiyonu üretimi başlattığı anda begin_index belirteçlerini bastırır. Bu, begin_suppress_tokens tarafından tanımlanan belirteçlerin başlangıçta üretilmemesini sağlamalıdır. Başlangıçta Whisper için oluşturulmuştur.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
Bu işlemci, bir token listesini bastırmak için kullanılabilir. İşlemci, bu tokenların log olasılıklarını -inf olarak ayarlayarak üretilmelerini engeller. Başlangıçta Whisper için oluşturulmuştur.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf 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 )
Parametreler
- ngram_len (
int) — Ngram uzunluğu. - keys (
list[int]) — Her derinlik için bir tane olacak şekilde filigran anahtarları dizisi. - sampling_table_size (
int) — Örnekleme tablosunun boyutu. - sampling_table_seed (
int) — Örnekleme tablosunu oluşturmak için kullanılan rastgele tohum. - context_history_size (
int) — Görülen bağlamları takip etmek için tutulacak tensörün boyutu. - device (
torch.device) — Kullanılacak cihaz. - skip_first_ngram_calls (
bool, isteğe bağlı, varsayılanFalse) — İlk ngram çağrılarının atlanıp atlanmayacağı. - debug_mode (
bool, isteğe bağlı, varsayılanFalse) — Logitler, watermarking değişikliği uygulanmadan önce elde edilen düzgün bir dağılıma değiştirilir. Bu, uygulamanın test edilmesi içindir.
Metin üretim modelleri için filigranlama tekniklerini uygulayan logits işleyicisi. Bu sınıf, sentetik içeriğin tespit edilmesine yardımcı olmak amacıyla üretilen metne algılanamaz sinyaller gömme yöntemi olan SynthID metin filigranlamasının uygulanmasını kolaylaştırır. Doğrulama için daha sonra güvenilir bir şekilde geri kazanılabilecek bir şekilde, metin üretimi sırasında token seçim olasılıklarını ince ayar yaparak çalışır.
Öne Çıkan Özellikler:
Durum Yönetimi: Token dizilerini izlemek ve filigran anahtarlarını dinamik olarak üretmek için dahili durumu korur.
Anahtar Oluşturma: Her konum için benzersiz anahtarlar oluşturmak üzere token dizileri ve filigran parametrelerine dayalı olarak özetler hesaplar.
G-Değer Örnekleme: Üretilen anahtarlara dayalı olarak filigran değerlerini (g-değerleri) örneklemek için önceden hesaplanmış bir örnekleme tablosu kullanır.
Puan Ayarı: Üretim sırasında token olasılıklarını değiştirmek için hesaplanan g-değerlerini uygular ve filigranı yerleştirir.
Bağlam Tekrarı İşleme: Tekrarlanan bağlamlardaki jetonlara filigran uygulanmasını önleyen mantık içerir ve doğal akışı korur.
EOS Token Masking: Cümle sonu token'larının watermarking hesaplamalarına dahil edilmesini önlemek için bunların maskelenmesini destekler.
Yardımcı İşlevler: g-değerlerini doğrudan hesaplamak, bağlam tekrarı kontrolü yapmak, EOS jeton maskeleri oluşturmak ve beklenen ortalama g-değerlerini tahmin etmek için işlevler sağlar.
Bu konuyla ilgili daha fazla ayrıntı için makale adresine bakın: https://www.nature.com/articles/s41586-024-08025-4
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.TemperatureLogitsWarper
< source >( temperature: float )
Sıcaklık için (üstel ölçekli çıktı olasılık dağılımı) LogitsProcessor, bu da öngörülen token'ların rastgeleliğini kontrol edebileceği anlamına gelir. Genellikle TopPLogitsWarper ve TopKLogitsWarper ile birlikte kullanılır.
Sıcaklık değerinin herhangi bir etki yapmaması durumunda,
generateargümanlarındado_sample=True'in yer aldığından emin olun.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.TopHLogitsWarper
< source >( top_h: floatfilter_value: float = -inf )
Entropi ve kümülatif olasılık kısıtlamalarına dayanarak yüksek olasılıklı tokenlerin bir alt kümesini uyumlu olarak seçen Top-H örneklemesi çözümleme yöntemini uygulayan LogitsProcessor.
Bu yöntem, seçilen dağılımın entropi farkını analiz ederek kaç tokenın tutulacağını dinamik olarak belirler ve böylece keşif ile sömürü arasında denge kurar. Üretilen metnin hem çeşitliliğini hem de tutarlılığını korumasını sağlar.
Referans: Ayrıntılar için Top-H Decoding: Adapting the Creativity and Coherence with Bounded Entropy in Text Generation (NeurIPS 2025) makalesine bakın: https://arxiv.org/abs/2509.02510
Örnek:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi jeton kimlikleri. - scores (
torch.FloatTensor, şekli(batch_size, vocab_size)) — Modelden gelen ham logitler.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, vocab_size)
Geçersiz jetonlar -inf ile maskelemiş işlenmiş logitler.
Logitleri Top-H örneklemesi kullanılarak filtreler.
sınıf transformers.TopKLogitsWarper
< source >( top_k: intfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parametreler
- top_k (
int) — Top-k filtreleme için en yüksek olasılığa sahip tutulacak sözlük belirteçlerinin sayısı. - filter_value (
float, isteğe bağlı, varsayılan -inf) — Tüm filtrelenen değerler bu float değerine ayarlanır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Filtrelenemeyecek en az token sayısı.
En yüksek olasılığa sahip k öğeye kısıtlama yapan, yani top-k uygulayan LogitsProcessor. Genellikle TemperatureLogitsWarper ve TopPLogitsWarper ile birlikte kullanılır.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.TopPLogitsWarper
< source >( top_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )
Parametreler
- top_p (
float) — 1'den küçük bir değere ayarlanırsa, olasılıklarıtop_pveya daha yüksek bir toplamda birleşen en küçük en olası token kümesi üretim için korunur. - filter_value (
float, isteğe bağlı, varsayılan -inf) — Tüm filtrelenen değerler bu float değerine ayarlanır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Filtrelenemeyecek en az token sayısı.
top-p işlemini gerçekleştiren, yani olasılık toplamı prob_cut_off <= prob_cut_off olan üstteki token'lara kısıtlayan LogitsProcessor. Genellikle TemperatureLogitsWarper ve TopKLogitsWarper ile birlikte kullanılır.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.TypicalLogitsWarper
< source >( mass: float = 0.9filter_value: float = -infmin_tokens_to_keep: int = 1 )
Parametreler
- mass (
float, isteğe bağlı, varsayılan 0.9) — 0 ile 1 arasında (sınırlar dahil) typical_p değeri, varsayılan 0.9. - filter_value (
float, isteğe bağlı, varsayılan -inf) — Tüm filtrelenen değerler bu float değerine ayarlanır. - min_tokens_to_keep (
int, isteğe bağlı, varsayılan 1) — Filtrelenemeyecek en az token sayısı.
Tipik çözümlendirme (decoding) işlemini gerçekleştiren LogitsProcessor. İnsanların dil kullanımından ilham alır; token olasılık dağılımının entropisine yakın log olasılığa sahip tokenları önceliklendirir. Bu, en olası tokenların süreç sırasında elenebileceği anlamına gelir.
Daha fazla bilgi için Doğal Dil Üretimi İçin Tipik Çözümleme bölümüne bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor
< source >( guidance_scale: floatmodelunconditional_ids: typing.Optional[torch.LongTensor] = Noneunconditional_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool = True )
Parametreler
- guidance_scale (
float) — Sınıflandırıcı serbest yönlendirme (CFG) için yönlendirme ölçeği. CFG,guidance_scale != 1olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, modelin girdiyle daha yakından ilişkili örnekler üretmesini teşvik eder, genellikle daha düşük kalite pahasına. 1'den küçük bir değerin tersi etkisi vardır ve negative_prompt_ids ile sağlanan negatif istemi (varsa) pozitif bir istem gibi davranmasını sağlar. - model (
PreTrainedModel) — The model computing the unconditional scores. Supposedly the same as the one computing the conditional scores. Both models must use the same tokenizer. - unconditional_ids (
torch.LongTensor, şekli(batch_size, sequence_length), isteğe bağlı) — Koşulsuz dal için girdi dizisi tokenlarının sözlükteki indeksleri. Ayarlanmazsa, istemin son tokenı varsayılan olarak kullanılır. - unconditional_attention_mask (
torch.LongTensor, şekli(batch_size, sequence_length), isteğe bağlı) — unconditional_ids için dikkat maskesi. - use_cache (
bool, isteğe bağlı, varsayılanTrue) — Negatif istem ileri geçişi sırasında anahtar/değerlerin önbelleğe alınıp alınmayacağı.
Classifier-Free Guidance (CFG) için logits işlemcisi. İşlemciler, guidance_scale ile parametreleştirilen, prompt koşullu ve prompt koşulsuz (veya negatif) logitslerden gelen skorlar üzerinden ağırlıklı bir ortalama hesaplar. Koşulsuz skorlar, model içsel olarak unconditional_ids dalı ile isteklendirilerek hesaplanır.
Daha fazla bilgi için makaleye bakın.
Örnekler:
>>> 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"sınıf transformers.WhisperTimeStampLogitsProcessor
< source >( generate_config: GenerationConfigbegin_index: int_detect_timestamp_from_logprob: bool | None = None )
Parametreler
- generate_config (
GenerateConfig) — Çıktıyı üretmek için kullanılan generate config. Aşağıdaki parametreler zorunludur: eos_token_id (int, isteğe bağlı, varsayılan 50257): dizinin sonu token'ının kimliği. no_timestamps_token_id (int, isteğe bağlı, varsayılan 50363):"<|notimestamps|>"token'ının kimliği. max_initial_timestamp_index (int, isteğe bağlı, varsayılan 1): Başlangıç zaman damgasının maksimum değerini ayarlamak için kullanılır. Bu, modelin gelecekte çok uzak zaman damgaları tahmin etmesini önlemek için kullanılır. - begin_index (
int) — Model tarafından üretilen ilk token'ın token indeksi. - _detect_timestamp_from_logprob (
bool, isteğe bağlı) — Zaman damgalarının tüm zaman damgaları üzerindeki logprobs'tan tahmin edilebilir olup olmadığı.
Transkripsiyonda zaman damgalarının üretimi için logitleri değiştiren LogitsProcessor. Girdi token'ları belirli bir eşiğe ulaştığında, işlemci puanları negatif sonsuza ayarlar. İşlemci, bu eşleşme desenini bozacak logitleri maskeleyerek zaman damgası token'larının çiftler halinde görünmesini sağlar. Bu, üretilen zaman damgalarının tutarlılığını ve yapısını korumak için yapılır. Ayrıca, herhangi bir zaman damgası token'ının örneklenme olasılığının tahmini, herhangi bir bireysel zaman damgası olmayan token'dan büyük olduğunda, bu zaman damgası olmayan logitlerin negatif sonsuza ayarlandığından emin olur. Bu, zaman damgalarının diğer olası token'lara tercih edilerek üretilmesini sağlamak için yapılır.
Daha fazla bilgi için makaleye bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
sınıf transformers.WatermarkLogitsProcessor
< source >( vocab_sizedevicegreenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Parametreler
- vocab_size (
int) — Modelin tokenizer'ının vocab_size değeri. “green” token oranını hesaplamak için kullanılır. - device (
str) — Modelin tahsis edildiği cihaz. - greenlist_ratio (
float, isteğe bağlı, isteğe bağlı, varsayılan 0.25) — Kelime dağarcığı boyutuna oranla kullanılan “yeşil” jetonların oranı. Varsayılan değer 0.25'tir. - bias (
float, isteğe bağlı, isteğe bağlı, varsayılan 2.0) — Seçilen “yeşil” jetonların logitlerine eklenen önyargı. Metin üretimi kalitesi düşersebiasdeğerini düşürmeyi düşünün. Önerilen değerler [0.5, 2.0] aralığındadır. Varsayılan 2.0'dır. - hashing_key (
int, isteğe bağlı, isteğe bağlı, varsayılan 15485863) — Hashing için kullanılan anahtar. Bu filigranı dağıtıyorsanız, başka bir özel anahtar kullanmanızı öneririz. Varsayılan değer 15485863'tür (bir milyonuncu asal sayı). - seeding_scheme (
str, isteğe bağlı, isteğe bağlı, varsayılan olarak"lefthash") — “yeşil” token seçimi için kullanılan tohumlama şeması. Kabul edilen değerler:- “lefthash” (varsayılan): “green” jeton seçimi, son jetona bağlıdır (makaledeki Algoritma 2)
- “selfhash”: “green” token seçimi, mevcut tokenin kendisine bağlıdır (makaledeki Algoritma 3) Bu şemanın dezavantajı, olası tüm sonraki tokenleri dikkate alması ve “lefthash”ten daha yavaş olabilmesidir. Tohumlamada kullanılacak önceki tokenlerin bağlam uzunluğu. Daha yüksek bağlam uzunluğu, filigranlamayı daha dayanıklı hale getirir.
- context_width (
int, isteğe bağlı, varsayılan 1) — Tohum ayarlanırken kullanılacak önceki token sayısı.
Üretilen metni filigranlamak için logits işlemcisi. İşlemci, bir sonraki tokeni üretmeden önce rastgele seçilmiş “yeşil” token kümesine küçük bir önyargı ekleyerek model çıktı puanlarını değiştirir. “Yeşil” token seçimi süreci, kullanılan seeding_scheme değerine bağlıdır. Kod, orijinal repoya dayanmaktadır.
Bu LogitsProcessor tarafından üretilen metin, WatermarkDetector kullanılarak tespit edilebilir. Ayrıntılar için call() bölümüne bakın,
Daha fazla bilgi için makaleye bakın.
Örnekler:
>>> 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: FloatTensor ) → torch.FloatTensor of shape (batch_size, config.vocab_size)
Parametreler
- input_ids (
torch.LongTensor, şekli(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri. Girdi kimlikları nelerdir? - scores (
torch.FloatTensor, şekli(batch_size, config.vocab_size)) — Dil modelleme başlığının tahmin puanları. Bunlar, beam search kullanılmadığında her sözlük öğesi için logitler veya beam search kullanıldığında her sözlük token'ı için log softmax olabilir.
Dönüş değeri
torch.FloatTensor biçimi (batch_size, config.vocab_size)
İşlenmiş tahmin puanları.
DurdurmaKriterleri
Bir StoppingCriteria, üretim ne zaman durdurulacağını değiştirmek için (EOS token dışında) kullanılabilir. Lütfen bunun yalnızca PyTorch uygulamalarımızda mevcut olduğunu unutmayın.
Üretim sırasında uygulanabilecek tüm durdurma kriterleri için soyut temel sınıf.
Durdurma kriteriniz scores girdisine bağlıysa, generate fonksiyonuna return_dict_in_generate=True, output_scores=True parametrelerini iletmenizden emin olun.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
sınıf transformers.MaxLengthCriteria
< source >( max_length: intmax_position_embeddings: int | None = None )
Bu sınıf, üretilen toplam token sayısı max_length değerini aştığında üretimi durdurmak için kullanılabilir. Yalnızca decoder (çözücü) tipindeki transformer'lar için, bu sayının başlangıçtaki istem (prompt) token'larını da içerdiğini unutmayın.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
sınıf transformers.MaxTimeCriteria
< source >( max_time: floatinitial_timestamp: float | None = None )
Bu sınıf, tam üretim belirli bir süreyi aştığında üretimi durdurmak için kullanılabilir. Varsayılan olarak, bu işlevi başlattığınızda süre sayılmaya başlar. initial_timestamp parametresini geçirerek bu davranışı geçersiz kılabilirsiniz.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
sınıf transformers.StopStringCriteria
< source >( tokenizer: PreTrainedTokenizerBasestop_strings: str | list[str] )
Bu sınıf, belirli dize dizileri üretildiğinde üretimi durdurmak için kullanılabilir. Dizeleri, tokenizör sözlüğüyle birlikte ön işleyerek tokenların stop dizelerini geçerli bir şekilde tamamlayabileceği konumları bulur.
Herhangi bir durdurma dizgisini tamamlayan bir token üretildiği anda üretim durdurulur. Durdurma dizgisinin çözümlenmiş çıktıda mevcut olduğu her durumu yakalamak istiyoruz; bu da bir veya her iki uçta “taşma” içeren durumları da yakalamamız gerektiği anlamına gelir. Bunu daha somut hale getirmek için, “stop” durdurma dizgesi için aşağıdaki token dizilerinden herhangi biri eşleşmeyi tetikler:
- [“st”, “op”]
- [“stop”]
- ["st", "opera"]
- [“sto”, “pper”]
- [“las”, “topper”]
- [“s”, “to”, “pped”]
Durdurma dizgesinin üretilen dizinin sonunda olması durumunda bir eşleşmenin tetikleneceğini unutmayın. Başka bir deyişle, bu diziler bir eşleşme tetiklemeyecektir:
- [“stop”, “at”]
- [“st”, “op”, “at”]
- [“st”, “opera”, “tion”]
Bunların eşleşmemesinin nedeni, durdurma dizisinin son token ile örtüşmemesidir. Durdurma dizisini bozmadan dizinin sonundan bir veya daha fazla token kaldırabiliyorsanız, bu kriter o durdurma dizisiyle eşleşmez. Bu, tasarım gereğidir; bu kontrol her token üretildikten sonra çalıştırıldığından, geçerli bir durdurma dizisi üretilirse onu kaçırma ihtimalimiz yoktur, ancak durdurma dizisinin geçmiş input_ids içinde bir yerde var olması nedeniyle üretimi durdurmak istemeyiz.
Peki eşleştirme aslında nasıl gerçekleştiriliyor? Bunu oldukça kafa karıştırıcı bir şekilde yapıyoruz, çünkü tüm eşleştirme sürecinin Torch veya XLA ile derlenebilir olmasını istiyoruz; bu da standart dize (string) yöntemlerini kullanamayacağımız anlamına geliyor. Ancak biraz uğraşarak dize eşleştirme işlemini saf tensör işlemleriyle yapmak mümkün. Önce standart dize işlemleriyle kullandığımız algoritmayı tanımlayarak başlayacağız, ardından bunun saf tensör işlemlerine nasıl dönüştürüldüğünü açıklayacağız.
Algoritmanın anahtarı bir gözlemdir: Durdurma dizgesi, jeton dizisinin sonuyla örtüşmek zorunda olduğundan, dizinin sonundan başlayıp geriye doğru ilerleyebiliriz. Spesifik olarak, son jetonun başlangıcı ile stop_string'in sonu arasında bir örtüşme olup olmadığını kontrol ederiz; başka bir deyişle, bazı i > 0 için stop_string[-i:] == token[:i] eşitliği sağlanmalıdır. Yukarıdaki olumlu örneklere bakarsanız, hepsinde son jetonun bu özelliği karşıladığını göreceksiniz:
- [“st”, “op”] (örtüşme “op”, örtüşme uzunluğu == 2)
- [“stop”] (örtüşme “stop”, örtüşme uzunluğu == 4)
- [“st”, “opera”] (örtüşme “op”, örtüşme uzunluğu == 2)
- [“sto”, “pper”] (örtüşme “p”, örtüşme uzunluğu == 1)
- [“las”, “topper”] (örtüşme “top”, örtüşme uzunluğu == 3)
- [“s”, “to”, “pped”] (örtüşme “p”, örtüşme uzunluğu == 1)
Bu özelliğe sahip olmayan eşleşen bir dizinin oluşturulması imkansızdır (bunu kendiniz doğrulayabilirsiniz). Ancak, son token'ın başlangıcı ile durdurma dizgesinin sonu arasındaki bu örtüşme bir eşleşme için gerekli olsa da yeterli değildir. Token dizisinin geri kalanının da durdurma dizgesiyle tutarlı olduğunu kontrol etmemiz gerekir.
Bunu nasıl yapıyoruz? Örnek olarak [“s”, “to”, “pped”] dizisini kullanalım. Son token olan “pped”in, “stop” duraklama dizgesiyle 1 karakterlik bir örtüşmeye sahip olduğunu biliyoruz. Ardından bir önceki token olan “to”ya geri gideriz. Duraklama dizgesinden zaten 1 karakter eşleştiği için, kontrol edilecek kalan kısım “sto”dur. Bir sonraki token olan “to”nun, kalan kısmın sonuyla eşleşip eşleşmediğini kontrol ederiz; eşleşir. Bu noktada duraklama dizgesinden 3 karakter eşleşmiş olur ve eşleştirilecek kalan kısım “s”tir. Yine bir önceki tokena geri gideriz, bu da “s”tir. Bu bir eşleşmedir ve böylece duraklama dizgesinin tamamı eşleşmiş olur.
Peki, tokenler durdurma dizisinin başından taşarsa nasıl çalışır? [“las”, “topper”] örneğini ele alalım. Son token olan “topper”, durdurma dizisi olan “stop” ile 3 uzunluğunda bir örtüşmeye sahiptir. Dolayısıyla, eşleştirilmesi gereken kalan durdurma dizisi “s” olur. Bir önceki token olan “las”a geri döneriz. Eşleştirilmesi gereken kalan kısım yalnızca “s” olduğundan ve uzunluğu 1 olduğundan, tokenin yalnızca son 1 karakterini, yani “s”i dikkate alırız. Bu, durdurma dizisiyle eşleşir ve böylece tüm dizi eşleşmiş olur.
Peki, bu eşleşmeleri tensör işlemleriyle nasıl hesaplarız? Basit: tüm jetonlar için gerekli bilgileri verimli bir şekilde önceden hesaplarız! Her jeton için şunları hesaplarız:
- Durdurma dizininin sonuyla örtüşmesi, varsa
- Durdurma dizisinin içinde, başlangıçtan taşan eşleşmeler de dahil olmak üzere, token'ın eşleştiği konumlar.
- Token'ın toplam uzunluğu
Örneğin, “pped” tokeni için 1 son örtüşme, iç eşleşme konumu yok ve 4 uzunluk hesaplanır. “to” tokeni için son örtüşme yok, 1 iç eşleşme konumu (sondan sayılarak) ve 2 uzunluk hesaplanır. “s” tokeni için son örtüşme yok, 3 iç eşleşme konumu (yine sondan sayılarak) ve 1 uzunluk hesaplanır.
Bu bilgiye sahip olduğumuz sürece, yukarıdaki algoritmayı herhangi bir dize karşılaştırma işlemi olmadan çalıştırabiliriz. Sadece aşağıdaki adımları uygularız:
- Son token'ın başlangıç dizisiyle bir son-örtüşmesi olup olmadığını kontrol edin
- Geriye doğru devam edin, şu ana kadar eşleşen durdurma dizisinin ne kadarını takip edin
- Her noktada, bir sonraki jetonun geçerli konumlarından birinin mevcut konum olup olmadığını kontrol edin
- Bir eşleşme başarısız olana veya durdurma dizisinin tamamı tamamen eşleşene kadar devam edin
Yine [“s”, “to”, “pped”] örneğini ele alalım. “pped” 1 uzunluğunda bir son örtüşmeye sahip olduğundan bir eşleşmeye başlayabiliriz. Şu ana kadar 1 karakter eşleştirildiğinden, bir sonraki token olan “to” için 1'in geçerli bir konum olup olmadığını kontrol ediyoruz (yine, sondan sayarak). Öyle olduğundan, “to”nun uzunluğunu konum izleyicimize ekliyoruz. Şu anda 3 karakter eşleştirdik, bu yüzden bir sonraki token olan “s” için 3'ün geçerli bir konum olup olmadığını kontrol ediyoruz. Öyle olduğundan, onun uzunluğunu konum izleyicisine ekliyoruz. Konum izleyicisi artık 4 ve bu, durdurma dizisinin uzunluğudur. Durdurma dizisinin tamamını eşleştirdik.
İkinci durumda, [“las”, “topper”] dizisinde, “topper” için 3 uzunluğunda bir son örtüşmesi vardır, bu nedenle bir eşleşmeye başlayabiliriz. Şu ana kadar 3 karakter eşleştirildi, bu yüzden bir sonraki jeton olan “las” için 3'ün geçerli bir konum olup olmadığını kontrol ediyoruz. Geçerlidir, çünkü jetonların, durdurma dizisinin başından taşan konumlarla eşleşmesine izin veriyoruz. Uzunluğunu konum izleyicisine ekliyoruz. Konum izleyicisi artık 6 ve bu, durdurma dizisinin uzunluğundan büyük! Ancak panik yapmayın - bu da durdurma dizisinin bir eşleşmesi olarak sayılır. Durdurma dizisinin tamamını eşleştirdik.
Örnekler:
>>> 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.FloatTensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
sınıf transformers.EosTokenCriteria
< source >( eos_token_id: typing.Union[int, list[int], torch.Tensor] )
Bu sınıf, “end-of-sequence” (dizinin sonu) token'ı üretildiğinde üretimi durdurmak için kullanılabilir.
Varsayılan olarak model.generation_config.eos_token_id kullanır.
__call__
< source >( input_ids: LongTensorscores: tuple[torch.FloatTensor] | Nonenew_token_length: int = 1**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))
Parametreler
- input_ids (
torch.LongTensorşeklinde(batch_size, sequence_length)) — Girdi dizisi belirteçlerinin sözlükteki indeksleri.Dizinler AutoTokenizer kullanılarak elde edilebilir. Ayrıntılar için PreTrainedTokenizer.encode() ve PreTrainedTokenizer.call() konularına bakın.
- scores (
tuple(torch.FloatTensor)) — Bir dil modelleme başlığının tahmin puanları, her üretim adımı için bir tensör içeren bir tuple olarak, her birinin şekli(batch_size, config.vocab_size). Bunlar, SoftMax öncesi her sözlük jetonu için puanlar veya SoftMax sonrası her sözlük jetonu için puanlar olabilir. Bu durdurma kriteriscoresgirdisine bağlıysa,generatefonksiyonunareturn_dict_in_generate=True, output_scores=Trueparametrelerini iletmenizden emin olun, aksi takdirdeNoneiletilir. - new_token_length (
int, isteğe bağlı, varsayılan1) — Kriterlerin kontrol edileceği token sayısı. Her batch öğesindeki en sonnew_token_lengthtoken kontrol edilecektir. - kwargs (
dict[str, Any], isteğe bağlı) — Ek durdurma kriterlerine özgü kwargs.
Dönüş değeri
torch.BoolTensor. (şekli (batch_size, 1) olan bir torch.BoolTensor)
True, belirli bir satır için üretimin durdurulacağını belirtir.
False, devam edilmesi gerektiğini belirtir.
Akışlar
sınıf transformers.TextStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = False**decode_kwargs: Any )
Parametreler
- tokenizer (
AutoTokenizer) — Tokenları çözmek için kullanılan tokenizer. - skip_prompt (
bool, isteğe bağlı, varsayılanFalse) —.generate()için istemi atlayıp atlamayacağı. Örneğin sohbet botları için faydalıdır. - decode_kwargs (
dict, isteğe bağlı) — Tokenizöründecodeyöntemine iletilecek ek anahtar kelime argümanları.
Tam kelimeler oluşturulur oluşturulmaz token(lar)ı stdout'a yazan basit bir metin akışlayıcı.
Örnekler:
>>> 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,Kalan önbelleği boşaltır ve stdout'a yeni bir satır basar.
Yeni metni stdout'a yazdırır. Akış sona eriyorsa, bir de yeni satır yazdırır.
Tokenları alır, çözer ve tam kelimeler oluşturdukları anda stdout'a basar.
sınıf transformers.TextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Parametreler
- tokenizer (
AutoTokenizer) — Tokenları çözmek için kullanılan tokenizer. - skip_prompt (
bool, isteğe bağlı, varsayılanFalse) —.generate()için istemi atlayıp atlamayacağı. Örneğin sohbet botları için faydalıdır. - timeout (
float, isteğe bağlı) — Metin kuyruğu için zaman aşımı.Noneise kuyruk sonsuza kadar bekler. Ayrı bir iş parçacığında çağrıldığında.generate()içindeki istisnaları işlemek için kullanışlıdır. - decode_kwargs (
dict, isteğe bağlı) — Tokenizöründecodeyöntemine iletilecek ek anahtar kelime argümanları.
Yazdırılmaya hazır metni bir kuyrukta saklayan ve aşağı akışlı bir uygulama tarafından bir iteratör olarak kullanılacak olan bir Streamer. Bu, üretilen metne engelsiz (non-blocking) bir şekilde erişmenin fayda sağladığı uygulamalar için (ör. etkileşimli bir Gradio demosu) kullanışlıdır.
Örnekler:
>>> 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,'Yeni metni kuyruğa koy. Akış sona eriyorsa, kuyruğa bir durma sinyali de koy.
sınıf transformers.AsyncTextIteratorStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )
Parametreler
- tokenizer (
AutoTokenizer) — Tokenları çözmek için kullanılan tokenizer. - skip_prompt (
bool, isteğe bağlı, varsayılanFalse) —.generate()için istemi atlayıp atlamayacağı. Örneğin sohbet botları için faydalıdır. - timeout (
float, isteğe bağlı) — Metin kuyruğu için zaman aşımı.Noneise kuyruk sonsuza kadar bekler. Ayrı bir iş parçacığında çağrıldığında.generate()içindeki istisnaları işlemek için kullanışlıdır. - decode_kwargs (
dict, isteğe bağlı) — Tokenizöründecodeyöntemine iletilecek ek anahtar kelime argümanları.
Yükseltilen
TimeoutError
TimeoutError— Token üretim süresi zaman aşımı değerini aşıyorsa.
Yerel bir kuyrukta yazdırılmaya hazır metni saklayan ve bir aşağı akış uygulaması tarafından asenkron bir iteratör olarak kullanılacak olan bir Streamer. Bu, üretilen metne asenkron olarak erişmenin fayda sağladığı uygulamalar için (ör. etkileşimli bir Gradio demosu) kullanışlıdır.
Örnekler:
>>> 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,Yeni metni kuyruğa koy. Akış sona eriyorsa, kuyruğa bir durma sinyali de koy.
sınıf transformers.TextDiffusionStreamer
< source >( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsesleep_time: float | None = None**decode_kwargs: Any )
Parametreler
- tokenizer (
AutoTokenizer) — Tokenları çözmek için kullanılan tokenized. - skip_prompt (
bool, isteğe bağlı, varsayılanFalse) —.generate()için istemi atlayıp atlamayacağı. Örneğin sohbet botları için faydalıdır. - sleep_time (
float, isteğe bağlı) — Ara çıktılarını görselleştirmek için faydalı olabilecek, difüzyon taslakları arasında uyku süresi. - decode_kwargs (
dict, isteğe bağlı) — Tokenizöründecodeyöntemine iletilecek ek anahtar kelime argümanları.
Metin difüzyon çıktıları yazdıran bir Streamer. Ara difüzyon adımları (taslaklar) geçicidir, sonraki taslaklar tarafından üzerine yazılır ve onaylanan metin yazdırıldığında kaldırılır.
tmux gibi bir ortamda çalışıyorsanız, taslak metin kendini üzerine yazmayı başaramayabilir.
Örnekler:
>>> 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)Kalan önbelleği boşaltır ve yeni bir satır basar.
Onaylanan jetonları alır, taslağı temizler ve bunları kalıcı olarak yazdırır.
Taslak jetonların tam dizisini alır, bunları çözer ve sarı renkte basar. Önceki taslağı üzerine yazar.
Önbellekler
Tek bir katmanın önbelleği için temel, soyut sınıf.
Katmanın tutabileceği maksimum dizi uzunluğunu döndürür. -1 değeri, maksimumun bulunmadığı veya tanımsız olduğu anlamına gelir; örneğin sınırsız olarak büyüyen dinamik bir dikkat katmanı veya dizi uzunluğu boyutu olmayan doğrusal bir dikkat katmanı.
Nesneleri koruyarak önbellek değerlerini sıfırlar
Bu katmanın önbelleğini ışın araması için yeniden sıralar.
Daha fazla token üretildikçe dinamik olarak büyüyen bir önbellek katmanıdır. Bu, üretken modeller için varsayılandır.
Anahtar ve değer durumlarını [batch_size, num_heads, seq_len, head_dim] biçiminde tensörler olarak saklar.
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
Mevcut önbellek katmanından tokens_to_remove belirteçlerini kaldırır.
Önbelleği repeats kez parti boyutunda tekrarlayın.
Önbelleğin parti boyutundaki indices değerlerini koruyun.
sınıf transformers.StaticLayer
< source >( max_cache_len: int**kwargs )
[batch_size, num_heads, max_cache_len, head_dim] biçiminde statik tensörler olarak anahtar ve değer durumlarını depolayan statik bir önbellek katmanı.
Tam destekleyici tensörlerini tembelce tahsis eder ve ardından bunları yerinde değiştirir. torch.compile desteği için tasarlanmıştır.
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
Anahtar ve değer tensörlerinin tembel başlatılması. Bu, tüm özelliklerin (dtype, device, TP durumunda num_heads vb…) çalışma zamanında doğrudan alınmasını sağlar; bu, her update için daha sonra cihazların, dtype'lerin vb. taşınmasını önlediği için son derece pratiktir (bu durum statik dynamo adreslerini de bozabilir).
İstenmeyen bir durum ise, bu fonksiyonun önceden çağrılmasını sağlamak için Cache üzerinde doğrudan early_initialization(...) çağrılabilir (örneğin torch.export için bu gereklidir). Ayrıca prefill'in kendisi derlenmiş bir bölgede sonlandığında (örneğin chunked prefill durumunda) da bu gereklidir.
sınıf transformers.StaticSlidingWindowLayer
< source >( max_cache_len: intsliding_window: int**kwargs )
[batch_size, num_heads, min(max_cache_len, sliding_window), head_dim] biçiminde anahtar ve değer durumlarını statik tensörler olarak saklayan statik bir önbellek katmanı. Tam destekleyici tensörlerini tembelce tahsis eder ve ardından bunları yerinde değiştirir. torch.compile desteği için tasarlanmıştır.
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
Anahtar ve değer tensörlerinin tembel başlatılması. Bu, tüm özelliklerin (dtype, device, TP durumunda num_heads vb…) çalışma zamanında doğrudan alınmasını sağlar; bu, her update için daha sonra cihazların, dtype'lerin vb. taşınmasını önlediği için son derece pratiktir (bu durum statik dynamo adreslerini de bozabilir).
İstenmeyen bir durum ise, bu fonksiyonun önceden çağrılmasını sağlamak için Cache üzerinde doğrudan early_initialization(...) çağrılabilir (örneğin torch.export için bu gereklidir). Ayrıca prefill'in kendisi derlenmiş bir bölgede sonlandığında (örneğin chunked prefill durumunda) da bu gereklidir.
sınıf transformers.QuantoQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
sınıf transformers.HQQQuantizedLayer
< source >( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
8-bit kayan noktalı sayılarda anahtar ve değer durumlarını depolayan bir kuantize katman. Gerginlik ölçeği, ilk update işleminden sonra dondurulur; bu nedenle yeni durumlar olduğu gibi eklenir: artık önbellek yok, yeniden kuantizasyon yok.
Daha ince taneli bir varyant, QuantizedLayer altında değil de burada yer almalıdır; çünkü baş (head) boyutu boyunca gruplama, durumların eklenebilir kalmasını sağlar ve yalnızca saklanan ölçeği bir tensöre dönüştürür.
güncelle
< source >( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]
Anahtar ve değer önbelleklerini yerinde güncelleyin ve gerekli anahtar ve değer durumlarını döndürün.
sınıf 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 )
Parametreler
- layers (
Optional, isteğe bağlı) — Önceden oluşturulmuşCacheLayerMixinveyaLinearAttentionCacheLayerMixinlistesi. Atlanırsa (None),layer_class_to_replicatekullanılır. - layer_class_to_replicate (
type[CacheLayerMixin | LinearAttentionCacheLayerMixin], isteğe bağlı) — Yalnızcalayersatlanırsa (None) kullanılır; bu durumda her katman için temel sınıf olarak kullanılır ve katmanlar,updatemevcut katman listesinden büyük birlayer_idxile çağrıldığında tembel (lazy) olarak eklenir. - offloading (
bool, isteğe bağlı, varsayılanFalse) — Katmanların GPU belleğini tasarruf etmek içincpu'ye aktarılmasının (offloading) yapılıp yapılmayacağı. - offload_only_non_sliding (
bool, isteğe bağlı, varsayılanTrue) —offloadingTrueise, bu parametre yalnızca kayan olmayan katmanların mı offload edileceğine karar verir (genellikle kayan katmanlar boyut olarak küçüktür, bu nedenle offload etmeye gerek yoktur ve atlamak daha hızlıdır).
Cache, büyük ölçüde her model katmanı için bir adet olmak üzere CacheLayerMixin nesnelerinden oluşan bir listedir. Her katmanın Cache'ini barındıran bir kapsayıcı olarak görev yapar.
güncelle
< source >( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )
layer_idx katmanı için önbelleği yeni key_states ve value_states ile günceller.
erken_başlatma
< source >( batch_size: intnum_heads: int | list[int]head_dim: int | list[int]dtype: dtypedevice: device )
Tüm katmanları önceden başlatın (aksi halde ilk update çağrısında tembelce başlatılır).
Bu, export tariflerimiz için faydalıdır, çünkü export her şeyin önceden hazır olmasını gerektirir.
Verilen katman için önbelleğin diziyi uzunluğunu döndürür.
Verilen layer_idx katmanı için döndürülecek uzunluk ve ofsete karşılık gelen bir demet (kv_length, kv_offset) döndürür.
Maskeler, ardından her katman için verilen uzunluklara (kv_length, kv_offset) ve desenlere göre hazırlanır.
Önbelleğin maksimum uzunluğunu döndürür. layer_idx sağlanmazsa (varsayılan), bu, tüm katmanlar arasındaki maksimum değeri döndürür. Aksi halde, verilen katman için desteklenen maksimum değeri döndürür.
-1 değeri, maksimumun olmadığını veya tanımsız olduğunu belirtir; örneğin sınırsız olarak büyüyebilen dinamik dikkat katmanları veya bir dizi uzunluğu boyutuna sahip olmayan doğrusal dikkat katmanları için.
Tüm katman tensörlerini özyinelemeli olarak sıfırla
Işın araması için önbelleği yeniden sırala
Mevcut Cache'ten tokens_to_remove token'larını kaldırır. Tüm geçmiş durumları bellekte tutmak zorunda olmayan katmanlar için, örneğin kayan pencere katmanları veya doğrusal dikkat katmanları için, bu işlem önbelleğe alınan durumların boyutunu da asgari çalışma boyutlarına geri sınırlar. Bu, crop(0)'ın her zaman bir no-op olmayacağı anlamına gelir; çünkü Cache'ten gereksiz durumları (yani bir sonraki forward için ihtiyaç duyulmayan durumları) yine de kaldırabilir.
Önbelleği tekrarla ve iç içe geçir
Önbellekten indeksleri seçin
sınıf 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 )
Parametreler
- ddp_cache_data (
Iterable[tuple[torch.Tensor, torch.Tensor]], isteğe bağlı) — Öncelikletorch.distributed(DDP) ile uyumluluk için eklendi. Kısaca,map(gather_map, zip(*caches))ifadesidir; yani iterable'daki her öğe, torch.distributed tarafından replikalar arasında toplanan bir katman için anahtar ve değer durumlarını içerir (shape=[global batch size, num_heads, seq_len, head_dim]). Not: Doğru çalışması için 1. argüman olması da gerekir - config (
PreTrainedConfig, isteğe bağlı) — Bu Cache'in kullanılacağı modelin yapılandırması. Verildiğinde, kayan veya hibrit katman yapısını kontrol etmek için kullanılır ve önbelleğe alınan tensörlerin bellek gereksinimini[batch_size, num_heads, min(seq_len, sliding_window), head_dim]boyutuna kadar büyük ölçüde azaltır. - offloading (
bool, isteğe bağlı, varsayılanFalse) — Katmanların GPU belleğini tasarruf etmek içincpu'ye aktarılmasının (offloading) yapılıp yapılmayacağı. - offload_only_non_sliding (
bool, isteğe bağlı, varsayılanFalse) —offloadingTrueise, bu parametre yalnızca kayan olmayan katmanların mı offload edileceğine karar verir (genellikle kayan katmanlar boyut olarak küçüktür, bu nedenle offload etmeye gerek yoktur ve atlamak daha hızlıdır).
Daha fazla token üretildikçe dinamik olarak büyüyen bir önbellek. Bu, üretken modeller için varsayılandır.
Anahtar ve değer durumlarını, her katman için bir tane olmak üzere CacheLayer listesinin bir öğesi olarak saklar. CacheLayer içindeki her tensör için beklenen şekil [batch_size, num_heads, seq_len, head_dim]'dir.
Bir yapılandırma (config) geçirilirse, kayan veya hibrit önbellek yapısı ayrıca kontrol edilir ve önbelleğe alınan tensörlerin bellek gereksinimi [batch_size, num_heads, min(seq_len, sliding_window), head_dim] değerine büyük ölçüde düşürülür.
Tüm önbellek sınıfları tarafından uygulanan ortak yöntemler hakkında ayrıntılar için Cache'e bakın.
Örnek:
>>> 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 generationsınıf transformers.StaticCache
< source >( config: PreTrainedConfigmax_cache_len: intoffloading: bool = Falseoffload_only_non_sliding: bool = True**kwargs )
Parametreler
- config (
PreTrainedConfig) — Bu Cache'in kullanılacağı modelin yapılandırması. Kayan veya hibrit katman yapısını kontrol etmek ve her katmanı buna göre başlatmak için kullanılacaktır. - max_cache_len (
int) — Bu Cache'in tutması gereken maksimum token sayısı. - offloading (
bool, isteğe bağlı, varsayılanFalse) — Katmanların GPU belleğini tasarruf etmek içincpu'ye aktarılmasının (offloading) yapılıp yapılmayacağı. - offload_only_non_sliding (
bool, isteğe bağlı, varsayılanTrue) —offloadingTrueise, bu parametre yalnızca kayan olmayan katmanların mı offload edileceğine karar verir (genellikle kayan katmanlar boyut olarak küçüktür, bu nedenle offload etmeye gerek yoktur ve atlamak daha hızlıdır).
torch.compile(model) ve torch.export() ile kullanılacak Static Cache sınıfı. config içinde olası hibrit önbellek yapısını kontrol eder ve her katmanı buna göre başlatır.
Tüm önbellek sınıfları tarafından uygulanan ortak yöntemler hakkında ayrıntılar için Cache'e bakın.
Örnek:
>>> 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()sınıf 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 )
Parametreler
- backend (
str) — Kullanılacak kuantizasyon arka ucu.("quanto", "hqq", "fp8")değerlerinden biri. - config (
PreTrainedConfig) — Bu Cache'in kullanılacağı modelin yapılandırması. - nbits (
int, isteğe bağlı, varsayılan 4) — Kantizasyon için bit sayısı. - axis_key (
int, isteğe bağlı, varsayılan 0) — Anahtarların kuantize edileceği eksen. - axis_value (
int, isteğe bağlı, varsayılan 0) — Değerlerin kuantize edileceği eksen. - q_group_size (
int, isteğe bağlı, varsayılan 64) — Kuantizasyon, hem anahtarlar hem de değerler için belirlenenq_group_sizedeğerine göre kanal başına yapılır. - residual_length (
int, isteğe bağlı, varsayılan 128) — Orijinal hassasiyet önbelleği için maksimum kapasite.
KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache makalesinde anlatılanlara benzer bir kuantizör önbelleği.
Kuantizasyon uygulayarak anahtarlar ve değerler için çok fazla bellek ayırmadan modelin daha uzun dizi uzunlukları üretmesine olanak tanır.
Önbelleğin iki tür depolama alanı vardır: biri orijinal hassasiyet için, diğeri kuantize edilmiş önbellek için.
residual length, orijinal hassasiyetli önbellek için maksimum kapasite olarak ayarlanır. Uzunluk
maksimum kapasiteyi aştığında, orijinal hassasiyetli önbellek atılır ve kuantize edilmiş önbelleğe taşınır.
Makalede anlatılanların aksine, kuantizasyon hem anahtarlar hem de değerler için kanal başına ve belirlenmiş bir
q_group_size ile yapılır.
Tüm önbellek sınıfları tarafından uygulanan ortak yöntemler hakkında ayrıntılar için Cache'e bakın.
Son beş argüman, grup bazlı tamsayı arka uçlarını yapılandırır. fp8 arka ucu, tensör başına kuantizasyon yapar ve bunları reddeder.
sınıf transformers.EncoderDecoderCache
< source >( *caches )
Parametreler
- caches (
Iterable) — Genellikle uzunluğu 2 olan bir iterable'dir ve 2Cachenesnesi içerir; ilki self-attention için, ikincisi cross-attention içindir. İsteğe bağlı olarak, uzunluğu 1 olan bir iterable de olabilir vetuple[tuple[torch.Tensor]]içerir (genellikle torch dp ve ddp ile uyumluluk için kullanılır).
Tüm kodlayıcı-çözücü önbellekleri için temel, soyut sınıf. Kendi dikkat ve çapraz dikkat önbelleklerinin kombinasyonlarını tutmak için kullanılabilir.
Tüm önbellek sınıfları tarafından uygulanan ortak yöntemler hakkında ayrıntılar için Cache'e bakın.
Örnek:
>>> 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()Önbelleği repeats kez parti boyutunda tekrarlayın. Karşılaştırmalı aramada (Hub'da) kullanılır.
Önbelleğin batch boyutundaki indices değerlerini koruyun. Karşılaştırmalı aramada (Hub'da) kullanılır.
Mevcut önbellek katmanından tokens_to_remove belirteçlerini kaldırır.
Önbellek nesnesinin maksimum dizin uzunluğunu (yani maksimum kapasitesini) döndürür
Önbelleğe alınmış durumların diziyi uzunluğunu döndürür. İsteğe bağlı olarak bir katman indeksi geçirilebilir.
Seçilen ışın indeksleri verildiğinde, ışın araması için önbelleği yeniden sıralar.
Watermark Yardımcıları
sınıf transformers.WatermarkingConfig
< source >( greenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )
Su işareti üretimi için argümanları tutan ve generate sırasında GenerationConfig'e geçirilmesi gereken sınıf.
Argümanlar hakkında daha fazla ayrıntı için bu makaleye bakın.
Aşağıdaki anahtarları kabul eder:
- greenlist_ratio (
float): Filigranlama için kullanılır. Sözlük boyutuna oranla kullanılan “yeşil” jetonların oranı. Varsayılan değer 0.25'tir. - bias (
float): Su işaretleme ile kullanılır. Seçilen “yeşil” jetonların logitlerine eklenen önyargı. Varsayılan değeri 2.0'dır. - hashing_key (
int): Filigranlama için kullanılan özetleme anahtarı. Varsayılan değeri 15485863'tür (bir milyonuncu asal sayı). - seeding_scheme (
str): Filigranlama için kullanılacak algoritma. Kabul edilen değerler:- “lefthash” (varsayılan): “green” jeton seçimi, son jetona bağlıdır (makaledeki Algoritma 2)
- “selfhash”: “green” token seçimi, mevcut tokenin kendisine bağlıdır (makaledeki Algoritma 3) Bu şemanın dezavantajı, olası tüm sonraki tokenleri dikkate alması ve “lefthash”ten daha yavaş olabilmesidir.
- context_width(
int): Tohumlama işleminde kullanılacak önceki jetonların bağlam uzunluğu. Daha yüksek bağlam uzunluğu, filigranlamayı daha dayanıklı hale getirir.
sınıf transformers.WatermarkDetector
< source >( model_config: PreTrainedConfigdevice: strwatermarking_config: typing.Union[ForwardRef('WatermarkingConfig'), dict]ignore_repeated_ngrams: bool = Falsemax_cache_size: int = 128 )
Parametreler
- model_config (
PreTrainedConfig) — Üretim sırasında kullanılacak model özel argümanlarını almak için kullanılacak model yapılandırması. - device (
str) — Sulubasmalı metin üretimi sırasında kullanılan cihaz. - watermarking_config (Union[
WatermarkingConfig,Dict]) — Metin üretirken kullanılan tam olarak aynı filigran yapılandırması ve argümanları. - ignore_repeated_ngrams (
bool, isteğe bağlı, varsayılanFalse) — Her benzersiz ngram'in yalnızca bir kez sayılıp sayılmayacağı. - max_cache_size (
int, isteğe bağlı, varsayılan 128) — Her token için çağrılan seeding/sampling algoritmalarının LRU önbellekleme için kullanılacak en büyük boyutu.
Su işaretli metinlerin tespit edilmesi için algılayıcı. Algılayıcıya, su işareti yeşil listesinin oluşturulmasını yeniden oluşturabilmek ve böylece su işaretini tespit edebilmek için metin üretimi sırasında verilen ayarların aynısının verilmesi gerekir. Buna, metin üretimi sırasında kullanılan doğru cihaz, doğru su işaretleme argümanları ve doğru belirteç (tokenizer) sözlük boyutu dahildir. Kod, orijinal repoya dayanmaktadır.
Daha fazla bilgi için makaleye bakın.
Örnekler:
>>> 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
Parametreler
- input_ids (
torch.LongTensor) — Su işareti eklenmiş metin. Algılamayı etkileyebileceğinden, istemin (prompt) kaldırılması önerilir. - z_threshold (
Dict, isteğe bağlı, varsayılan3.0) — Bu eşiğin değiştirilmesi, algılayıcının duyarlılığını değiştirir. Daha yüksek z eşiği daha düşük duyarlılık sağlar, daha düşük z eşiği ise tam tersi şekilde daha yüksek duyarlılık sağlar. - return_dict (
bool, isteğe bağlı, varsayılanFalse) —~generation.WatermarkDetectorOutputdöndürülüp döndürülmemesi. Döndürülmezse boolean tahminler döndürülür,
Dönüş değeri
WatermarkDetectorOutput veya np.ndarray
return_dict=True ise WatermarkDetectorOutput, aksi halde np.ndarray.
ma
sınıf transformers.BayesianDetectorConfig
< source >( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )
Bu, bir BayesianDetectorModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Bayesian Detector modelinin örneklenmesinde kullanılır.
Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.
sınıf transformers.BayesianDetectorModel
< source >( config )
Parametreler
- config (BayesianDetectorConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.
Su işareti algılama için Bayes sınıflandırıcısı.
Bu algılayıcı, bir filigran puanı hesaplamak için Bayes kuralını kullanır; bu puan, posterior olasılıkların P(watermarked|g_values) ve P(unwatermarked|g_values) oranının logaritmasının sigmoididir. Daha fazla ayrıntı için makaledeki BayesianScore bölümüne bakın. Makale URL'si: https://www.nature.com/articles/s41586-024-08025-4
Bu algılayıcının, Bernoulli(0.5) g-değeri dağılımı kullanan bozulmasız Turnuva tabanlı filigranlama ile çalıştığını unutmayın.
Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.
Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.
forward
< source >( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )
Sulandırılmış posterior P(watermarked|g_values) hesaplar.
sınıf 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 )
Parametreler
- ngram_len (
int) — Ngram uzunluğu. - keys (
list[int]) — Her derinlik için bir tane olacak şekilde filigran anahtarları dizisi. - context_history_size (
int, isteğe bağlı, varsayılan 1024) — Görülen bağlamları takip etmek için tutulacak tensörün boyutu. - sampling_table_seed (
int, isteğe bağlı, varsayılan 0) — Örnekleme tablosunu oluşturmak için kullanılan rastgele tohum. - sampling_table_size (
int, isteğe bağlı, varsayılan 65536) — Örnekleme tablosunun boyutu. - skip_first_ngram_calls (
bool, isteğe bağlı, varsayılanFalse) — İlk ngram çağrılarının atlanıp atlanmayacağı. - debug_mode (
bool, isteğe bağlı, varsayılanFalse) — Logitler, watermarking değişikliği uygulanmadan önce elde edilen düzgün bir dağılıma değiştirilir. Bu, uygulamanın test edilmesi içindir.
Su işareti üretimi için argümanları tutan ve generate sırasında GenerationConfig'e geçirilmesi gereken sınıf.
Argümanlar hakkında daha fazla ayrıntı için bu makaleye bakın.
Örnekler:
>>> 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)sınıf transformers.SynthIDTextWatermarkDetector
< source >( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )
Parametreler
- detector_module (BayesianDetectorModel) — Parametrelerle başlatılmış Bayesian dedektör modülü nesnesi. Kullanım için https://github.com/huggingface/transformers-research-projects/tree/main/synthid_text adresini kontrol edin.
- logits_processor (
SynthIDTextWatermarkLogitsProcessor) — Filigranlama için kullanılan logits işlemcisi. - tokenizer (
Any) — Model için kullanılan tokenizer.
SynthID metin filigranı algılayıcı sınıfı.
Bu sınıf, eğitilmiş bayesian detector modülü ile başlatılmalıdır; bu modülün eğitimini, kaydetmesini ve yüklemesini gösteren bir örnek olarak examples/synthid_text/detector_training.py betiğine bakın. Bu klasör, bu detector'ın örnek kullanım senaryosunu da sergilemektedir.
Örnekler:
>>> 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)Derleme Yardımcıları
sınıf transformers.CompileConfig
< source >( fullgraph: bool = Falsedynamic: bool | None = Nonebackend: str | collections.abc.Callable = 'inductor'mode: str = 'reduce-overhead'options: dict | None = None )
Parametreler
- fullgraph (
bool, isteğe bağlı, varsayılanFalse) — False ise (varsayılan), optimize edilecek derlenebilir bölgeleri keşfetmeye çalışır. True ise, tüm işlevin tek bir grafiğe yakalanabilir olmasını gerektirir. Bu mümkün değilse (yani, grafik kırılmaları varsa), bir hata oluşturulur. - dynamic (
boolveyaNone, isteğe bağlı) — Dinamik şekil grafiklerinin kullanılmaya çalışılıp çalışılmayacağı. - backend (
strveyaCallable, isteğe bağlı, varsayılan"inductor") — Kullanılacak arka uç. - mode (
str, isteğe bağlı, varsayılan"reduce-overhead") — Performans ve ek yük arasındaki dengeyi kontrol eder. - options (
dict, isteğe bağlı) — Arka uca iletilecek seçeneklerin sözlüğü.
generate içinde otomatik derleme kullanılırken torch.compile davranışına ilişkin argümanları tutan sınıf.
Argümanlar hakkında daha fazla ayrıntı için torch.compile bölümüne bakın.
Örnekler:
>>> 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]