Transformers documentation

أدوات التوليد

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

and get access to the augmented documentation experience

to get started

أدوات التوليد

تُدرج هذه الصفحة جميع دوال الأداة المستخدمة في generate().

توليد المخرجات

المخرجات الخاصة بـ generate() هي نسخة من فئة فرعية من ModelOutput. هذه المخرجات هي بنية بيانات تحتوي على جميع المعلومات المُعادَة بواسطة generate()، لكنها يمكن أن تُستخدم أيضاً كـ tuple أو dictionary.

إليك مثالاً:

from transformers import GPT2Tokenizer, GPT2LMHeadModel

tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
model = GPT2LMHeadModel.from_pretrained("openai-community/gpt2")

inputs = tokenizer("Hello, my dog is cute and ", return_tensors="pt")
generation_output = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)

كائن generation_output هو GenerateDecoderOnlyOutput، وكما نرى في توثيق هذه الفئة أدناه، فهذا يعني أنه يحتوي على الخصائص التالية:

  • sequences: تسلسلات الرموز المولّدة
  • scores (اختياري): درجات التنبؤ لرأس نمذجة اللغة، لكل خطوة توليد
  • hidden_states (اختياري): حالات النموذج المخفية، لكل خطوة توليد
  • attentions (اختياري): أوزان الانتباه للنموذج، لكل خطوة توليد

هنا لدينا scores لأننا مررنا output_scores=True، لكن لا نملك hidden_states وattentions لأننا لم نمرر output_hidden_states=True أو output_attentions=True.

يمكنك الوصول إلى كل سمة بالطريقة المعتادة، وإذا لم تُرجع النموذج تلك السمة، فستحصل على None. هنا على سبيل المثال، generation_output.scores هي جميع درجات التنبؤ المولّدة من رأس نمذجة اللغة، وgeneration_output.attentions هي None.

عند استخدام كائن generation_output الخاص بنا كسلسلة (tuple)، فإنه يحتفظ فقط بالخصائص التي لا تحمل قيم None. هنا، على سبيل المثال، يحتوي على عنصرين، loss ثم logits، لذا

generation_output[:2]

سيُرجع على سبيل المثال المجموعة المرتبة (generation_output.sequences, generation_output.scores).

عند استخدام كائن generation_output الخاص بنا كمعجم، فإنه يحتفظ فقط بالخصائص التي لا تحمل قيم None. هنا، على سبيل المثال، يحتوي على مفتاحين هما sequences وscores.

نوثّق هنا جميع أنواع المخرجات.

فئة transformers.generation.GenerateDecoderOnlyOutput

< >

( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )

المعاملات

  • sequences (torch.LongTensor من الشكل (batch_size, sequence_length)) — التسلسلات المولّدة. يكون البُعد الثاني (sequence_length) مساوياً لـmax_length أو أقصر منه إذا أنهت جميع الدفعات (batches) العملية مبكراً بسبب eos_token_id.
  • scores (tuple(torch.Tensor) اختياري، يُعاد عند output_scores=True) — درجات التنبؤ المعالجة لرأس نمذجة اللغة (درجات كل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مُولَّد)، حيث يكون شكل كل متجه (batch_size, config.vocab_size).
  • logits (tuple(torch.Tensor) اختياري، يُعاد عند output_logits=True) — درجات التنبؤ غير المعالجة لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مولّد)، حيث يكون شكل كل متجه (batch_size, config.vocab_size).
  • attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, num_heads, generated_length, sequence_length).
  • hidden_states (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_hidden_states=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, generated_length, hidden_size).
  • past_key_values (Cache، اختياري، يُعاد عند use_cache=True) — يعيد كاش النموذج، ويُستخدم لتسريع فك الترميز. تختلف صيغة الكاش بين النماذج، لذا راجع توثيق النموذج. عادةً، يكون كائن Cache.

مخرجات نماذج التوليد المعتمدة على المُفكِّك فقط، عند استخدام طرق غير حِزمية.

فئة transformers.generation.GenerateEncoderDecoderOutput

< >

( sequences: LongTensorscores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )

المعاملات

  • sequences (torch.LongTensor من الشكل (batch_size*num_return_sequences, sequence_length)) — التسلسلات المولّدة. يكون البُعد الثاني (sequence_length) مساوياً لـmax_length أو أقصر منه إذا أنهت جميع الدفعات (batches) العملية مبكراً بسبب eos_token_id.
  • scores (tuple(torch.Tensor) اختياري، يُعاد عند output_scores=True) — درجات التنبؤ المعالجة لرأس نمذجة اللغة (درجات كل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مُولَّد)، حيث يكون شكل كل متجه (batch_size, config.vocab_size).
  • logits (tuple(torch.Tensor) اختياري، يُعاد عند output_logits=True) — درجات التنبؤ غير المعالجة لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مولّد)، حيث يكون شكل كل متجه (batch_size, config.vocab_size).
  • encoder_attentions (tuple(torch.Tensor)، اختياري، يُعاد عند output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة من طبقات المُفكِّك) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).
  • encoder_hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج التضمينات + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).
  • decoder_attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, num_heads, generated_length, sequence_length).
  • cross_attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, num_heads, generated_length, sequence_length).
  • decoder_hidden_states (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_hidden_states=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, generated_length, hidden_size).
  • past_key_values (Cache، اختياري، يُعاد عند use_cache=True) — يعيد كاش النموذج، ويُستخدم لتسريع فك الترميز. تختلف صيغة الكاش بين النماذج، لذا راجع توثيق النموذج. عادةً، يكون كائن Cache.

مخرجات نماذج التوليد المشفّرة-المفكّكة عند استخدام طرق غير الحزمة.

فئة transformers.generation.GenerateBeamDecoderOnlyOutput

< >

( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneattentions: tuple[tuple[torch.Tensor]] | None = Nonehidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )

المعاملات

  • sequences (torch.LongTensor من الشكل (batch_size*num_return_sequences, sequence_length)) — التسلسلات المولّدة. يكون البُعد الثاني (sequence_length) مساوياً لـmax_length أو أقصر منه إذا أنهت جميع الدفعات (batches) العملية مبكراً بسبب eos_token_id.
  • sequences_scores (torch.Tensor من الشكل (batch_size*num_return_sequences)، اختياري، يُعاد عند output_scores=True) — درجات الحزمة النهائية للـsequences المولّدة.
  • scores (tuple(torch.Tensor) اختياري، يُعاد عند output_scores=True) — درجات انتقال الحزمة لكل رمز في قاموس الكلمات في كل خطوة من خطوات التوليد. تتكون درجات انتقال الحزمة من احتمالات لوغاريتمية للرموز مشروطة على لوغاريتم softmax للرموز المولّدة سابقًا في هذه الحزمة. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مولّد)، حيث يكون شكل كل متجه (batch_size*num_beams, config.vocab_size).
  • logits (tuple(torch.Tensor) اختياري، يُعاد عند output_logits=True) — درجات التنبؤ غير المعالجة لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مُولَّد)، حيث يكون شكل كل متجه (batch_size*num_beams, config.vocab_size).
  • beam_indices (torch.LongTensor، اختياري، يُعاد عند output_scores=True) — فهارس الحزم (Beam indices) لمعرّف الرمز المولّد في كل خطوة من خطوات التوليد. torch.LongTensor من الشكل (batch_size*num_return_sequences, sequence_length).
  • attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size*num_beams, num_heads, generated_length, sequence_length).
  • hidden_states (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_hidden_states=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size*num_beams*num_return_sequences, generated_length, hidden_size).
  • past_key_values (Cache، اختياري، يُعاد عند use_cache=True) — يعيد كاش النموذج، ويُستخدم لتسريع فك الترميز. تختلف صيغة الكاش بين النماذج، لذا راجع توثيق النموذج. عادةً، يكون كائن Cache.

مخرجات نماذج التوليد المعتمدة على المُفكِّك فقط، عند استخدام طرق الحزمة.

فئة transformers.generation.GenerateBeamEncoderDecoderOutput

< >

( sequences: LongTensorsequences_scores: typing.Optional[torch.Tensor] = Nonescores: tuple[torch.Tensor] | None = Nonelogits: tuple[torch.Tensor] | None = Nonebeam_indices: typing.Optional[torch.LongTensor] = Noneencoder_attentions: tuple[torch.Tensor] | None = Noneencoder_hidden_states: tuple[torch.Tensor] | None = Nonedecoder_attentions: tuple[tuple[torch.Tensor]] | None = Nonecross_attentions: tuple[tuple[torch.Tensor]] | None = Nonedecoder_hidden_states: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = None )

المعاملات

  • sequences (torch.LongTensor من الشكل (batch_size*num_return_sequences, sequence_length)) — التسلسلات المولّدة. يكون البُعد الثاني (sequence_length) مساوياً لـmax_length أو أقصر منه إذا أنهت جميع الدفعات (batches) العملية مبكراً بسبب eos_token_id.
  • sequences_scores (torch.Tensor من الشكل (batch_size*num_return_sequences)، اختياري، يُعاد عند output_scores=True) — درجات الحزمة النهائية للـsequences المولّدة.
  • scores (tuple(torch.Tensor) اختياري، يُعاد عند output_scores=True) — درجات انتقال الحزمة لكل رمز في قاموس الكلمات في كل خطوة من خطوات التوليد. تتكون درجات انتقال الحزمة من احتمالات لوغاريتمية للرموز مشروطة على لوغاريتم softmax للرموز المولّدة سابقًا في هذه الحزمة. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مولّد)، حيث يكون شكل كل متجه (batch_size*num_beams, config.vocab_size).
  • logits (tuple(torch.Tensor) اختياري، يُعاد عند output_logits=True) — درجات التنبؤ غير المعالجة لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax) في كل خطوة من خطوات التوليد. مجموعة من torch.Tensor تحتوي على ما يصل إلى max_new_tokens عنصرًا (عنصر واحد لكل رمز مُولَّد)، حيث يكون شكل كل متجه (batch_size*num_beams, config.vocab_size).
  • beam_indices (torch.LongTensor، اختياري، يُعاد عند output_scores=True) — فهارس الحزم (Beam indices) لمعرّف الرمز المولّد في كل خطوة من خطوات التوليد. torch.LongTensor من الشكل (batch_size*num_return_sequences, sequence_length).
  • encoder_attentions (tuple(torch.Tensor)، اختياري، يُعاد عند output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة من طبقات المُفكِّك) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).
  • encoder_hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لمخرجات التضمينات + واحدة لمخرجات كل طبقة) من الشكل (batch_size*num_beams*num_return_sequences, sequence_length, hidden_size).
  • decoder_attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size*num_beams*num_return_sequences, num_heads, generated_length, sequence_length).
  • cross_attentions (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_attentions=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size, num_heads, generated_length, sequence_length).
  • decoder_hidden_states (tuple(tuple(torch.Tensor))، اختياري، يُعاد عند output_hidden_states=True) — مجموعة (عنصر واحد لكل رمز مُولَّد) من المجموعات (عنصر واحد لكل طبقة من طبقات المُفكِّك) من torch.Tensor بشكل (batch_size*num_beams*num_return_sequences, generated_length, hidden_size).
  • past_key_values (Cache، اختياري، يُعاد عند use_cache=True) — يعيد كاش النموذج، ويُستخدم لتسريع فك الترميز. تختلف صيغة الكاش بين النماذج، لذا راجع توثيق النموذج. عادةً، يكون كائن Cache.

مخرجات نماذج التوليد المشفّرة-المفكّكة عند استخدام طرق الحزمة.

LogitsProcessor

يمكن استخدام LogitsProcessor لتعديل درجات التنبؤ لرأس نموذج اللغة أثناء التوليد.

فئة transformers.AlternatingCodebooksLogitsProcessor

< >

( input_start_len: intsemantic_vocab_size: intcodebook_size: int )

المعاملات

  • input_start_len (int) — طول تسلسل الإدخال الأولي.
  • semantic_vocab_size (int) — حجم المفردات للجزء الدلالي، أي عدد الرموز المرتبطة بمفردات الدلالة.
  • codebook_size (int) — عدد الرموز المرتبطة بكتاب الرموز.

LogitsProcessor يفرض التوليد بالتناوب بين كتيبي الرمزين في Bark.

هذا المعالج الخاص بالقيم اللوجستية متوافق حصريًا مع النموذج الفرعي الدقيق الخاص بـ Bark. راجع توثيق النموذج لاستعراض أمثلة.

__call__

< >

( input_ids: LongTensorscores: Tensor )

فئة transformers.ClassifierFreeGuidanceLogitsProcessor

< >

( guidance_scale )

المعاملات

  • guidance_scale (float) — مقياس التوجيه للتوجيه الحر من التصنيف (CFG). يتم تفعيل CFG عن طريق تعيين guidance_scale > 1. تشجيع النموذج على توليد عينات مرتبطة ارتباطًا وثيقًا بالموجّه المدخل، عادةً على حساب جودة أدنى.

LogitsProcessor للإرشاد الحر من التصنيف (CFG). يتم تقسيم الدرجات على بُعد الدفعة (batch dimension)، حيث يتوافق النصف الأول مع القيم اللوجستية الشرطية (المُقدَّرة من موجه الإدخال) ويتوافق النصف الثاني مع القيم اللوجستية غير الشرطية (المُقدَّرة من موجه فارغ أو ‘null’). يقوم المعالج بحساب متوسط مرجح عبر القيم اللوجستية الشرطية وغير الشرطية، مُعَدَّمًا بواسطة guidance_scale.

راجع الورقة البحثية لمزيد من المعلومات.

هذا المعالج الخاص بالقيم اللوجستية متوافق حصريًا مع MusicGen

أمثلة:

>>> from transformers import AutoProcessor, MusicgenForConditionalGeneration

>>> processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
>>> model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")

>>> inputs = processor(
...     text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
...     padding=True,
...     return_tensors="pt",
... )
>>> audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.EncoderNoRepeatNGramLogitsProcessor

< >

( encoder_ngram_size: intencoder_input_ids: LongTensor )

المعاملات

  • encoder_ngram_size (int) — جميع الـ ngrams ذات الحجم ngram_size يمكن أن تظهر فقط ضمن معرفات مدخلات المُشفِّر (encoder input ids).
  • encoder_input_ids (int) — معرّفات encoder_input_ids التي يجب ألا تتكرر ضمن معرّفات المُفكِّك (decoder).

LogitsProcessor يعمل بشكل مشابه لـ NoRepeatNGramLogitsProcessor، لكنه يُطبَّق حصريًا لمنع تكرار n-grams الموجودة في الاستعلام.

صُمم لتعزيز الطابع التفاعلي في نموذج اللغة، من خلال منع توليد مجموعات الكلمات (n-grams) الموجودة في جولات المحادثة السابقة.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.EncoderRepetitionPenaltyLogitsProcessor

< >

( penalty: floatencoder_input_ids: LongTensor )

المعاملات

  • penalty (float) — المعامل الخاص بعقوبة التكرار. القيمة 1.0 تعني عدم وجود عقوبة. القيم أعلى من 1.0 تكافئ رموز الموجّه. القيم بين 0.0 و 1.0 تعاقب رموز الموجّه.
  • encoder_input_ids (torch.LongTensor) — معرّفات encoder_input_ids التي يجب تكرارها ضمن معرّفات المُفكِّك.

LogitsProcessor يعمل بشكل مشابه لـ RepetitionPenaltyLogitsProcessor، لكن مع عقوبة عكسية تُطبَّق على الرموز الموجودة في الاستعلام. بمعنى آخر، تزيد العقوبة التي تتجاوز 1.0 من احتمالات اختيار الرموز التي كانت موجودة في الاستعلام.

صُمِّم لتجنب الهلوسة في المهام المستندة إلى المدخلات، مثل تلخيص النصوص. وعلى الرغم من أنه كان مخصصًا في الأصل لنماذج المُشفِّر-المُفكِّك (encoder-decoder)، إلا أنه يمكن استخدامه أيضًا مع النماذج التي تعتمد على المُفكِّك فقط، مثل نماذج اللغة الكبيرة (LLMs).

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.EpsilonLogitsWarper

< >

( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )

المعاملات

  • epsilon (float) — إذا تم ضبطه على قيمة > 0، فسيتم الاحتفاظ فقط بأكثر الرموز التي تبلغ احتمالاتها epsilon أو أعلى لتوليد النص.
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — الحد الأدنى لعدد الرموز التي لا يمكن تصفيتها.

LogitsProcessor الذي يقوم بتعيّن إبسيلون، أي تقييد الرموز التي تحقق prob >= epsilon. يأخذ أكبر عدد من الرموز المحدد بـ min_tokens_to_keep إذا لم تحقق أي رموز هذا الشرط. راجع Truncation Sampling as Language Model Desmoothing لمزيد من المعلومات.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With epsilon sampling, the output gets restricted to high-probability tokens. Note that this is similar to
>>> # Top P sampling, which restricts tokens based on their cumulative probability.
>>> # Pro tip: The paper recommends using `epsilon_cutoff` values between 3e-4 and 9e-4
>>> outputs = model.generate(**inputs, do_sample=True, epsilon_cutoff=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.EtaLogitsWarper

< >

( epsilon: floatfilter_value: float = -infmin_tokens_to_keep: int = 1device: str = 'cpu' )

المعاملات

  • epsilon (float) — قيمة من نوع float تقع ضمن المدى (0, 1). معامل فائق يُستخدم لحساب قيمة القطع الديناميكي eta. تتراوح القيم المقترحة من الورقة البحثية بين 3e-4 و 4e-3 اعتمادًا على حجم النموذج.
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — تُضبط جميع القيم التي يُكتشف أنها أقل من قيمة القطع الديناميكي، eta، على قيمة float هذه. يُعد هذا المعامل مفيدًا عندما تحتاج القيم اللوجستية (logits) إلى التعديل للرموز ذات الاحتمال المنخفض جدًا والتي يجب استبعادها من التوليد بالكامل.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — يحدد الحد الأدنى لعدد الرموز التي يجب الاحتفاظ بها للتوليد، بغض النظر عن احتمالاتها. على سبيل المثال، إذا تم تعيين min_tokens_to_keep إلى 1، فسيتم دائمًا الاحتفاظ برمز واحد على الأقل للتوليد، حتى لو كانت احتمالات جميع الرموز أقل من حد القطع eta.
  • device (str، اختياري، الافتراضي "cpu") — الجهاز الذي سيتم تخصيص الموترات (tensors) عليه.

LogitsProcessor الذي يُنفّذ تقنية eta-sampling، وهي تقنية تُستخدم لتصفية الرموز التي تكون احتمالاتها أقل من قيمة حدّية ديناميكية، eta، تُحسب بناءً على مزيج من المعامل epsilon وإنتروبيا احتمالات الرموز، أي eta := min(epsilon, sqrt(epsilon * e^-entropy(probabilities))). يأخذ أكبر عدد من الرموز ضمن حدّ min_tokens_to_keep إذا لم تتوافر أي رموز تحقق هذا الشرط. يعالج هذا المعالج مشكلة ضعف الجودة في النصوص الطويلة المولّدة بواسطة نماذج اللغة العصبية، مما يؤدي إلى نصوص أكثر تماسكاً وانسيابية. راجع Truncation Sampling as Language Model Desmoothing لمزيد من المعلومات. ملاحظة: يجب تعيين do_sample إلى True لكي يعمل هذا LogitsProcessor.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.ExponentialDecayLengthPenalty

< >

( exponential_decay_length_penalty: tupleeos_token_id: typing.Union[int, list[int], torch.Tensor]input_ids_seq_length: int )

المعاملات

  • exponential_decay_length_penalty (tuple(int, float)) — يجب أن يتكون هذا المصفوف من: (start_index, decay_factor) حيث يشير start_index إلى نقطة بدء العقوبة، ويمثل decay_factor معامل الاضمحلال الأسي
  • eos_token_id (Union[int, list[int], torch.Tensor]) — المعرّف (أو المعرّفات) لرمز نهاية التسلسل.
  • input_ids_seq_length (int) — طول تسلسل الإدخال.

LogitsProcessor يزيد بشكل أُسّي من درجة eos_token_id بعد بلوغ start_index. وهذا يتيح توليد تسلسلات أقصر دون الحاجة إلى حدّ صارم، مما يسمح بتوقّع eos_token في موضع ذي معنى.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")

>>> text = "Just wanted to let you know, I"
>>> inputs = tokenizer(text, return_tensors="pt")

>>> # Let's consider that we want short sentences, so we limit `max_length=30`. However, we observe that the answer
>>> # tends to end abruptly.
>>> set_seed(1)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.9, max_length=30, pad_token_id=50256)
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010. Although

>>> # To promote the appearance of the EOS token at the right time, we add the `exponential_decay_length_penalty =
>>> # (start_index, decay_factor)`. Instead of cutting at max_tokens, the output comes to an end before and usually
>>> # with more meaning. What happens is that starting from `start_index` the EOS token score will be increased
>>> # by `decay_factor` exponentially. However, if you set a high decay factor, you may also end up with abruptly
>>> # ending sequences.
>>> set_seed(1)
>>> outputs = model.generate(
...     **inputs,
...     do_sample=True,
...     temperature=0.9,
...     max_length=30,
...     pad_token_id=50256,
...     exponential_decay_length_penalty=(15, 1.6),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network
which<|endoftext|>

>>> # With a small decay factor, you will have a higher chance of getting a meaningful sequence.
>>> set_seed(1)
>>> outputs = model.generate(
...     **inputs,
...     do_sample=True,
...     temperature=0.9,
...     max_length=30,
...     pad_token_id=50256,
...     exponential_decay_length_penalty=(15, 1.01),
... )
>>> print(tokenizer.batch_decode(outputs)[0])
Just wanted to let you know, I received a link to an ebook, the book How To Start A Social Network which was
published in 2010.<|endoftext|>

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.ForcedBOSTokenLogitsProcessor

< >

( bos_token_id: int )

المعاملات

  • bos_token_id (int) — معرّف الرمز الذي يُفرض كرمز أولي مُولَّد.

LogitsProcessor يفرض الرمز المحدد ليكون الرمز الأول المولّد. يُستخدم مع نماذج المُشفِّر-المُفكِّك (encoder-decoder).

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.ForcedEOSTokenLogitsProcessor

< >

( max_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )

المعاملات

  • max_length (int) — الحد الأقصى لطول التسلسل الذي سيتم توليده.
  • eos_token_id (Union[int, list[int], torch.Tensor]) — المعرّف (أو المعرّفات) لرمز نهاية التسلسل.
  • device (str، اختياري، الافتراضي "cpu") — الجهاز الذي سيتم تخصيص الموترات (tensors) عليه.

LogitsProcessor يفرض أن يكون الرمز المحدد هو الرمز الأخير المولّد عند الوصول إلى max_length.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.InfNanRemoveLogitsProcessor

< >

( )

LogitsProcessor الذي يزيل جميع قيم nan وinf لتجنب فشل طريقة التوليد. لاحظ أنه يجب استخدام معالج اللوجيت فقط عند الضرورة لأنه قد يُبطئ طريقة التوليد.

لا يحتوي معالج القيم اللوجستية هذا على مثال لـgenerate، إذ لا ينبغي أن توجد مجموعة صحيحة من الأعلام تبرر استخدامه.

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.LogitNormalization

< >

( )

LogitsProcessor لتطبيع الدرجات باستخدام log-softmax. من المهم تطبيع الدرجات أثناء بحث الحزمة، بعد تطبيق معالجات أو مشوّهات logits، لأن خوارزمية البحث المستخدمة في هذه المكتبة لا تقوم بذلك (إنها تقوم بذلك فقط قبل ذلك، لكن قد تحتاج إلى إعادة تطبيع) لكنها لا تزال تفترض أن الدرجات مُطبَّعة عند مقارنة الفرضيات.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.LogitsProcessor

< >

( )

فئة أساسية مجردة لجميع معالجات اللوغيت التي يمكن تطبيقها أثناء التوليد.

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.LogitsProcessorList

< >

( iterable = () )

يمكن استخدام هذه الفئة لإنشاء قائمة من LogitsProcessor لمعالجة مدخلات scores من نوع tensor لاحقًا. ترث هذه الفئة من list وتضيف طريقة call محددة لتطبيق كل LogitsProcessor على المدخلات.

__call__

< >

( input_ids: LongTensorscores: Tensor**kwargs ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام beam search، أو log softmax لكل رمز في المفردات عند استخدام beam search
  • kwargs (dict[str, Any]، اختياري) — معاملات إضافية محددة لمعالج القيم اللوجستية.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.MinLengthLogitsProcessor

< >

( min_length: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )

المعاملات

  • min_length (int) — الحد الأدنى للطول الذي إذا انخفضت عنه قيمة eos_token_id يتم تعيينها إلى -float("Inf").
  • eos_token_id (Union[int, list[int], torch.Tensor]) — المعرّف (أو المعرّفات) لرمز نهاية التسلسل.
  • device (str، اختياري، الافتراضي "cpu") — الجهاز الذي سيتم تخصيص الموترات (tensors) عليه.

LogitsProcessor يفرض حدًا أدنى للطول عن طريق تعيين احتمال EOS إلى 0. لاحظ أنه، بالنسبة للنماذج التي تحتوي على مُفكِّك فقط مثل معظم نماذج اللغة الكبيرة، فإن الطول يشمل الاستعلام.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.MinNewTokensLengthLogitsProcessor

< >

( prompt_length_to_skip: intmin_new_tokens: inteos_token_id: typing.Union[int, list[int], torch.Tensor]device: str = 'cpu' )

المعاملات

  • prompt_length_to_skip (int) — طول الرموز المدخلة. ليس حجة صالحة عند الاستخدام مع generate لأنه سيحدد طول الإدخال تلقائيًا.
  • min_new_tokens (int) — الحد الأدنى لطول الرموز الجديدة الذي إذا انخفضت عنه قيمة eos_token_id يتم تعيينها إلى -float("Inf").
  • eos_token_id (Union[int, list[int], torch.Tensor]) — المعرّف (أو المعرّفات) لرمز نهاية التسلسل.
  • device (str، اختياري، الافتراضي "cpu") — الجهاز الذي سيتم تخصيص الموترات (tensors) عليه.

LogitsProcessor يفرض حدًا أدنى لطول الرموز الجديدة عن طريق ضبط احتمال رمز EOS (نهاية التسلسل) على 0. على عكس MinLengthLogitsProcessor، يتجاهل هذا المعالج النص التمهيدي.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.MinPLogitsWarper

< >

( min_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )

المعاملات

  • min_p (float) — أدنى احتمال للرمز، والذي يُضرب في احتمال الرمز الأكثر احتمالاً. يجب أن يكون قيمة بين 0 و 1. القيم النموذجية تقع في نطاق 0.01-0.2، وهي انتقائية بمقدار مماثل لضبط top_p في نطاق 0.99-0.8 (استخدم عكس القيم المعتادة لـ top_p).
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — الحد الأدنى لعدد الرموز التي لا يمكن تصفيتها.

LogitsProcessor الذي يُنفّذ min-p، أي يحتفظ بجميع الرموز التي تتجاوز حدًّا أدنى من الاحتمال، مُقيَّسًا باحتمال الرمز الأكثر احتمالًا. ونتيجةً لذلك، يصبح المرشّح أكثر صرامةً في وجود رموز ذات احتمالات عالية، وهو ما يُعدّ مؤشرًا على مخرَج واثق لا ينبغي الانحراف عنه.

يُستخدم غالبًا معًا مع TemperatureLogitsWarper. يُستخدم كبديل لـ TopPLogitsWarper و TopKLogitsWarper.

أنشأه @menhguin و @kalomaze (معرّفات GitHub). تم تكييف الكود من هذا الطلب الخارجي

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With `min_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `min_p` in the 0.01-0.2 range.
>>> outputs = model.generate(**inputs, do_sample=True, min_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensorscores: Tensor )

فئة transformers.NoBadWordsLogitsProcessor

< >

( bad_words_ids: listeos_token_id: typing.Union[int, list[int], torch.Tensor, NoneType] = None )

المعاملات

  • bad_words_ids (list[list[int]]) — قائمة قوائم معرّفات الرموز التي لا يُسمح بتوليدها.
  • eos_token_id (Union[int, list[int], torch.Tensor]، اختياري) — المعرّف أو المعرّفات لرمز نهاية التسلسل.

LogitsProcessor يفرض عدم اختيار تسلسلات محددة أبداً.

للحصول على معرّفات الرموز (token ids) للكلمات التي يجب ألا تظهر في النص المولّد، تأكد من تعيين add_prefix_space=True عند تهيئة مُجزّئ الرموز (tokenizer)، واستخدم tokenizer(bad_words, add_special_tokens=False).input_ids. يُدعم الحُجّة add_prefix_space فقط لبعض مُجزّئات الرموز البطيئة، إذ إن سلوكيات بادئة مُجزّئات الرموز السريعة تأتي من pre tokenizers. اقرأ المزيد هنا.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["In a word, the cake is a"], return_tensors="pt")

>>> output_ids = model.generate(inputs["input_ids"], max_new_tokens=5, pad_token_id=tokenizer.eos_token_id)
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a mess.

>>> # Now let's take the bad words out. Please note that the tokenizer is initialized differently
>>> tokenizer_with_prefix_space = AutoTokenizer.from_pretrained("openai-community/gpt2", add_prefix_space=True)


>>> def get_tokens_as_list(word_list):
...     "Converts a sequence of words into a list of tokens"
...     tokens_list = []
...     for word in word_list:
...         tokenized_word = tokenizer_with_prefix_space([word], add_special_tokens=False).input_ids[0]
...         tokens_list.append(tokenized_word)
...     return tokens_list


>>> bad_words_ids = get_tokens_as_list(word_list=["mess"])
>>> output_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=5, bad_words_ids=bad_words_ids, pad_token_id=tokenizer.eos_token_id
... )
>>> print(tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0])
In a word, the cake is a bit of a surprise.

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.NoRepeatNGramLogitsProcessor

< >

( ngram_size: int )

المعاملات

  • ngram_size (int) — جميع الـ ngrams ذات الحجم ngram_size يمكن أن تظهر مرة واحدة فقط.

تُعدّ N-grams مجموعات من “n” كلمات أو أحرف أو رموز متتالية مأخوذة من تسلسل نصي. بالنظر إلى الجملة: “She runs fast”, ستكون ثنائيات الكلمات (n=2) هي (“she”, “runs”) و (“runs”, “fast”). في توليد النصوص، يوفر تجنب تكرار تسلسلات الكلمات مخرجات أكثر تنوعاً. يفرض LogitsProcessor هذا عدم تكرار n-grams عن طريق تعيين درجات الرموز المحظورة إلى سالب ما لا نهاية، مما يستبعد تلك الرموز من الاعتبار عند معالجة الدرجات بشكل إضافي. لاحظ أنه، بالنسبة لنماذج المُفكِّك فقط مثل معظم LLMs، يُؤخذ الأمر (prompt) أيضاً في الاعتبار للحصول على n-grams. Fairseq.

استخدم عقوبات n-gram بحذر. على سبيل المثال، معاقبة ثنائيات الكلمات (bigrams) في مقال عن مدينة نيويورك قد يؤدي إلى نتائج غير مرغوبة حيث يظهر اسم المدينة مرة واحدة فقط في النص بأكمله. مرجع

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.PrefixConstrainedLogitsProcessor

< >

( prefix_allowed_tokens_fn: Callablenum_beams: int )

المعاملات

  • prefix_allowed_tokens_fn (Callable[[int, torch.Tensor], list[int]]) — تقيّد هذه الدالة بحث الحزمة (beam search) بالرموز المسموح بها فقط في كل خطوة. تستقبل هذه الدالة حجتين: inputs_ids ومعرّف الدفعة batch_id. يجب أن تُرجع قائمة بالرموز المسموح بها لخطوة التوليد التالية، مشروطةً بالرموز المولَّدة سابقًا inputs_ids ومعرّف الدفعة batch_id.

LogitsProcessor الذي يفرض التوليد المقيد وهو مفيد للتوليد المقيد المشروط بالبداية. راجع Autoregressive Entity Retrieval لمزيد من المعلومات.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("bigscience/bloomz-560m")
>>> tokenizer = AutoTokenizer.from_pretrained("bigscience/bloomz-560m")

>>> inputs = tokenizer("Alice and Bob", return_tensors="pt")

>>> # By default, it continues generating according to the model's logits
>>> outputs = model.generate(**inputs, max_new_tokens=5)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob are friends

>>> # We can constrain it with `prefix_allowed_tokens_fn` to force a certain behavior based on a prefix.
>>> # For instance, we can force an entire entity to be generated when its beginning is detected.
>>> entity = tokenizer(" Bob Marley", return_tensors="pt").input_ids[0]  # 3 tokens
>>> def prefix_allowed_tokens_fn(batch_id, input_ids):
...     '''
...     Attempts to generate 'Bob Marley' when 'Bob' is detected.
...     In this case, `batch_id` is not used, but you can set rules for each batch member.
...     '''
...     if input_ids[-1] == entity[0]:
...         return [entity[1].item()]
...     elif input_ids[-2] == entity[0] and input_ids[-1] == entity[1]:
...         return [entity[2].item()]
...     return list(range(tokenizer.vocab_size))  # If no match, allow all tokens

>>> outputs = model.generate(**inputs, max_new_tokens=5, prefix_allowed_tokens_fn=prefix_allowed_tokens_fn)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
Alice and Bob Marley

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.RepetitionPenaltyLogitsProcessor

< >

( penalty: floatprompt_ignore_length: typing.Union[int, torch.Tensor, NoneType] = None )

المعاملات

  • penalty (float) — المعامل الخاص بعقوبة التكرار. القيمة 1.0 تعني عدم وجود عقوبة. القيم أعلى من 1.0 تفرض عقوبة على الرموز التي تم توليدها سابقًا. القيم بين 0.0 و 1.0 تمنح مكافأة للرموز التي تم توليدها سابقًا.
  • prompt_ignore_length (int أو torch.LongTensor، اختياري) — عدد الرموز الأولية التي يجب تجاهلها، مع إمكانية تحديد ذلك لكل عنصر في الدفعة.

LogitsProcessor يمنع تكرار الرموز السابقة من خلال عقوبة. تُطبَّق هذه العقوبة مرة واحدة كحد أقصى لكل رمز. لاحظ أنه، بالنسبة لنماذج المُفكِّك فقط مثل معظم نماذج اللغة الكبيرة، تشمل الرموز المُعتبَرة النص المُدخل (prompt) افتراضيًا.

في الورقة الأصلية، يقترح المؤلفون استخدام عقوبة بحوالي 1.2 لتحقيق توازن جيد بين التوليد الصادق وغياب التكرار. لعقاب التكرار وتقليله، استخدم قيم penalty أعلى من 1.0، حيث إن القيمة الأعلى تعاقب بشكل أقوى. لمكافأة التكرار وتشجيعه، استخدم قيم penalty بين 0.0 و1.0، حيث إن القيمة الأدنى تكافئ بشكل أقوى.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, RepetitionPenaltyLogitsProcessor

>>> # Initializing the model and tokenizer for it
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
>>> inputs = tokenizer(["I'm not going to"], return_tensors="pt")

>>> # This shows a normal generate without any specific parameters
>>> summary_ids = model.generate(**inputs)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to be able to do that

>>> # This generates a penalty for repeated tokens
>>> penalized_ids = model.generate(**inputs, repetition_penalty=1.1)
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'll just have to go out and play

>>> # We can also exclude the input prompt by creating an instance of this class
>>> # with a `prompt_ignore_length` and passing it as a custom logit processor
>>> rep_pen_processor = RepetitionPenaltyLogitsProcessor(
...     penalty=1.1,
...     prompt_ignore_length=inputs["input_ids"].shape[-1]
... )
>>> penalized_ids = model.generate(**inputs, logits_processor=[rep_pen_processor])
>>> print(tokenizer.batch_decode(penalized_ids, skip_special_tokens=True)[0])
I'm not going to be able to do that. I'm going to have to go through a lot of things, and

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.SequenceBiasLogitsProcessor

< >

( sequence_bias: list )

المعاملات

  • sequence_bias (list[list[Union[list[int], float]]]) — قائمة من القوائم تُطابق تسلسلًا من الرموز مع حدّ انحيازها (مثلًا [[[10, 45], -2.0], [[64], -7.5]]). تزيد الانحيازات الموجبة من احتمالية اختيار التسلسل، بينما تفعل الانحيازات السالبة العكس. إذا كان طول التسلسل يساوي 1، فسيتم تطبيق انحيازه دائمًا. وإلا، فلن يُطبَّق الانحياز إلا إذا كان التسلسل المعني على وشك الاكتمال (في خطوة اختيار الرمز بعد تطبيق هذا المعالج).

LogitsProcessor يطبّق انحيازًا إضافيًا على التسلسلات. يُطبَّق الانحياز على الرمز الأخير من تسلسل عندما يمكن للرمز المولَّد التالي إكماله. ونتيجةً لذلك، للاستفادة القصوى من انحياز التسلسلات التي تتجاوز رمزًا واحدًا، يُنصح باستخدام طرق الحزمة (لتجاوز التسلسلات المكتملة جزئيًا ذات الانحياز السالب بسلاسة) وتطبيق الانحياز على بادئاتها (لضمان تطبيق الانحياز في مرحلة أبكر).

على مستوى الرموز، فإن تحيّز كلمة يختلف عن تحيّز كلمة يسبقها مسافة. إذا أردت تحيّز “foo” في منتصف الجملة، فمن المرجح أنك ستحتاج إلى إضافة مسافة بادئة وتحيّز ” foo” بدلاً من ذلك. راجع قسم المرمّز (tokenizer) في دورة معالجة اللغة الطبيعية لدينا لمعرفة السبب: https://huggingface.co/learn/nlp-course/chapter2/4?fw=pt

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
>>> inputs = tokenizer(["The full name of Donald is Donald"], return_tensors="pt")

>>> summary_ids = model.generate(inputs["input_ids"], max_new_tokens=4, do_sample=False)
>>> print(tokenizer.batch_decode(summary_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.

>>> def get_tokens(word):
...     return tokenizer([word], add_special_tokens=False).input_ids[0]

>>> # IMPORTANT: Remember our tip about adding spaces before words to bias them correctly.
>>> sequence_bias = [[get_tokens("Trump"), -10.0],]  # will fail to apply bias
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Trump Sr.

>>> sequence_bias = [[get_tokens(" Trump"), -10.0],]  # will work
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald John Harper. He

>>> # We can also add a positive bias to nudge the model towards specific tokens or continuations. This technique
>>> # is also more effective when paired up with beam search.
>>> sequence_bias = [[get_tokens(" Donald Duck"), 10.0],]
>>> biased_ids = model.generate(
...     inputs["input_ids"], max_new_tokens=4, num_beams=4, do_sample=False, sequence_bias=sequence_bias
... )
>>> print(tokenizer.batch_decode(biased_ids, skip_special_tokens=True)[0])
The full name of Donald is Donald Duck. He is

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.SuppressTokensAtBeginLogitsProcessor

< >

( begin_suppress_tokensbegin_indexdevice: str = 'cpu' )

SuppressTokensAtBeginLogitsProcessor يثبّت قائمة من الرموز فور بدء دالة generate في التوليد باستخدام رموز begin_index. يجب أن يضمن ذلك عدم توليد الرموز المعرّفة بواسطة begin_suppress_tokens في البداية. أُنشئ في الأصل لـ Whisper.

أمثلة:

>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")

>>> # Whisper has `begin_suppress_tokens` set by default (= `[220, 50256]`). 50256 is the EOS token, so this means
>>> # it can't generate and EOS token in the first iteration, but it can in the others.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[0][0, 50256])
tensor(-inf)
>>> print(outputs.scores[-1][0, 50256])  # in other places we can see some probability mass for EOS
tensor(29.9010)

>>> # If we disable `begin_suppress_tokens`, we can generate EOS in the first iteration.
>>> outputs = model.generate(
...     **inputs, return_dict_in_generate=True, output_scores=True, begin_suppress_tokens=None
... )
>>> print(outputs.scores[0][0, 50256])
tensor(11.2027)

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.SuppressTokensLogitsProcessor

< >

( suppress_tokensdevice: str = 'cpu' )

يمكن استخدام هذا المعالج لإخفاء قائمة من الرموز. سيقوم المعالج بإعداد احتمالات السجل الخاصة بها إلى -inf بحيث لا يتم توليدها. تم إنشاؤه في الأصل لـ Whisper.

أمثلة:

>>> from transformers import AutoProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[0]["audio"]["array"], return_tensors="pt")

>>> # Whisper has a long list of suppressed tokens. For instance, in this case, the token 1 is suppressed by default.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True)
>>> print(outputs.scores[1][0, 1])  # 1 (and not 0) is the first freely generated token
tensor(-inf)

>>> # If we disable `suppress_tokens`, we can generate it.
>>> outputs = model.generate(**inputs, return_dict_in_generate=True, output_scores=True, suppress_tokens=None)
>>> print(outputs.scores[1][0, 1])
tensor(6.0678)

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.SynthIDTextWatermarkLogitsProcessor

< >

( ngram_len: intkeys: listsampling_table_size: intsampling_table_seed: intcontext_history_size: intdevice: deviceskip_first_ngram_calls: bool = Falsedebug_mode: bool = False )

المعاملات

  • ngram_len (int) — طول الـ Ngram.
  • keys (list[int]) — تسلسل من مفاتيح العلامة المائية، مفتاح واحد لكل عمق.
  • sampling_table_size (int) — حجم جدول العينة.
  • sampling_table_seed (int) — بذرة عشوائية لتوليد جدول العينة.
  • context_history_size (int) — حجم المصفوفة (Tensor) المستخدمة لتتبع السياقات التي تم رؤيتها.
  • device (torch.device) — الجهاز المستخدم.
  • skip_first_ngram_calls (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تخطي استدعاءات ngram الأولى.
  • debug_mode (bool، اختياري، القيمة الافتراضية False) — تُعدَّل القيم (Logits) لتصبح موحّدة قبل تطبيق تعديل العلامة المائية. يُستخدم هذا لاختبار التنفيذ.

معالج logits يطبّق تقنيات العلامة المائية لنماذج توليد النص. يسهّل هذا الصنف تطبيق العلامة المائية SynthID للنص، وهي طريقة لزرع إشارات غير محسوسة في النص المولّد للمساعدة في اكتشاف المحتوى الاصطناعي. يعمل عن طريق التلاعب الدقيق باحتمالات اختيار الرموز أثناء توليد النص بطريقة يمكن استعادتها لاحقًا بشكل موثوق للتحقق.

الميزات الرئيسية:

  • إدارة الحالة: يحافظ على حالة داخلية لتتبع تسلسلات الرموز وتوليد مفاتيح العلامة المائية ديناميكيًا.

  • توليد المفاتيح: يحسب التجزئات (hashes) بناءً على تسلسلات الرموز (tokens) ومعلمات العلامة المائية لإنشاء مفاتيح فريدة لكل موضع.

  • عينة قيمة G: يستخدم جدول عينات محسوبًا مسبقًا لاختيار قيم العلامة المائية (قيم g) بناءً على المفاتيح المولّدة.

  • تعديل الدرجة: يطبّق قيم g المحسوبة لتعديل احتمالات الرموز أثناء التوليد، مما يُدمج العلامة المائية.

  • معالجة تكرار السياق: تتضمن منطقًا لتجنب وضع علامة مائية على الرموز في السياقات المتكررة، مما يحافظ على الطابع الطبيعي للنص.

  • إخفاء رمز نهاية الجملة: يدعم إخفاء رموز نهاية الجملة لمنع تضمينها في عمليات حساب العلامة المائية.

  • دوال الأداة: توفر دوالًا لحساب قيم g مباشرةً، والتحقق من تكرار السياق، وإنشاء أقنعة رموز EOS، وتقدير متوسط قيم g المتوقع.

راجع رابط الورقة: https://www.nature.com/articles/s41586-024-08025-4 لمزيد من التفاصيل حول هذا الموضوع.

أمثلة:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig

>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b', padding_side="left")
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b')

>>> # SynthID Text configuration
>>> watermarking_config = SynthIDTextWatermarkingConfig(
...     keys=[654, 400, 836, 123, 340, 443, 597, 160, 57],
...     ngram_len=5,
... )

>>> # Generation with watermarking
>>> tokenized_prompts = tokenizer(["Once upon a time, "], return_tensors="pt", padding=True)
>>> output_sequences = model.generate(
...     **tokenized_prompts, watermarking_config=watermarking_config, do_sample=True, max_new_tokens=10
... )
>>> watermarked_text = tokenizer.batch_decode(output_sequences, skip_special_tokens=True)

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.TemperatureLogitsWarper

< >

( temperature: float )

المعاملات

  • temperature (float) — قيمة عشرية موجبة تمامًا تُستخدم لضبط توزيع القيم اللوجستية. تقلل القيمة الأصغر من 1 من العشوائية (والعكس صحيح)، حيث يُعادل 0 نقل كل الكتلة الاحتمالية إلى الرمز الأكثر احتمالًا.

LogitsProcessor لدرجة الحرارة (تحجيم توزيع احتمالات المخرجات بشكل أُسّي)، مما يعني عمليًا أنه يمكنه التحكم في عشوائية الرموز المتوقعة. يُستخدم غالبًا معًا مع TopPLogitsWarper و TopKLogitsWarper.

تأكد من تضمين do_sample=True في معاملات generate وإلا فلن يكون لقيمة درجة الحرارة أي تأثير.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.TopHLogitsWarper

< >

( top_h: floatfilter_value: float = -inf )

المعاملات

  • top_h (float) — معامل التوسيع للعتبة القائمة على الإنتروبيا (tau). يجب أن يكون ضمن المدى (0, 1].
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.

LogitsProcessor الذي يطبّق أخذ العينات Top-H، وهو أسلوب فكّ ترميز يختار بشكل تكيفي مجموعة فرعية من الرموز ذات الاحتمالية العالية بناءً على قيود الإنتروبيا والاحتمالية التراكمية.

تحدد هذه الطريقة ديناميكيًا عدد الرموز التي يجب الاحتفاظ بها من خلال تحليل فرق الإنتروبيا للتوزيع المختار، مما يحقق التوازن بين الاستكشاف والاستغلال. تضمن الطريقة أن يحافظ النص المولَّد على التناسق والتماسك معًا.

مرجع: لمزيد من التفاصيل، راجع فك الترميز Top-H: تكييف الإبداع والاتساق باستخدام إنتروبيا محدودة في توليد النص (NeurIPS 2025): https://arxiv.org/abs/2509.02510

مثال:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> outputs = model.generate(**inputs, do_sample=True, top_h=0.4)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — معرّفات الرموز المدخلة.
  • scores (torch.Tensor من الشكل (batch_size, vocab_size)) — قيم اللوغيت الخام من النموذج.

يعيد

torch.Tensor من الشكل (batch_size, vocab_size)

القيم الناتجة (Logits) بعد المعالجة حيث يتم إخفاء الرموز غير الصالحة باستخدام -inf.

يقوم بترشيح القيم اللوجستية (logits) باستخدام أخذ العينة Top-H.

فئة transformers.TopKLogitsWarper

< >

( top_k: intfilter_value: float = -infmin_tokens_to_keep: int = 1 )

المعاملات

  • top_k (int) — عدد رموز المفردات ذات أعلى احتمالات التي يجب الاحتفاظ بها للتصفية باستخدام top-k.
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — الحد الأدنى لعدد الرموز التي لا يمكن تصفيتها.

LogitsProcessor الذي يُنفّذ top-k، أي تقييد العناصر على أعلى k عناصر من حيث الاحتمالية. يُستخدم غالبًا معًا مع TemperatureLogitsWarper وTopPLogitsWarper.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: A, B, C, D", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E — S — O, P — R

>>> # With `top_k` sampling, the output gets restricted the k most likely tokens.
>>> # Pro tip: In practice, LLMs use `top_k` in the 5-50 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_k=2)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: A, B, C, D, E, F, G, H, I

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.TopPLogitsWarper

< >

( top_p: floatfilter_value: float = -infmin_tokens_to_keep: int = 1 )

المعاملات

  • top_p (float) — إذا تم ضبطه على قيمة < 1، فإن مجموعة الرموز الأكثر احتمالاً الأصغر التي تضيف احتمالاتها إلى top_p أو أعلى هي التي تُحتفظ بها للتوليد.
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — الحد الأدنى لعدد الرموز التي لا يمكن تصفيتها.

LogitsProcessor الذي يُنفّذ top-p، أي تقييد النماذج على الرموز العلوية التي يبلغ مجموعها prob_cut_off <= prob_cut_off. يُستخدم غالباً مع TemperatureLogitsWarper وTopKLogitsWarper.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, set_seed

>>> set_seed(1)
>>> model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")

>>> inputs = tokenizer("A sequence: 1, 2", return_tensors="pt")

>>> # With sampling, the output is unexpected -- sometimes too unexpected.
>>> outputs = model.generate(**inputs, do_sample=True)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3 | < 4 (left-hand pointer) ;
<BLANKLINE>
<BLANKLINE>

>>> # With `top_p` sampling, the output gets restricted to high-probability tokens.
>>> # Pro tip: In practice, LLMs use `top_p` in the 0.9-0.95 range.
>>> outputs = model.generate(**inputs, do_sample=True, top_p=0.1)
>>> print(tokenizer.batch_decode(outputs, skip_special_tokens=True)[0])
A sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.TypicalLogitsWarper

< >

( mass: float = 0.9filter_value: float = -infmin_tokens_to_keep: int = 1 )

المعاملات

  • mass (float، اختياري، القيمة الافتراضية 0.9) — قيمة typical_p بين 0 و 1 شاملة الطرفين، القيمة الافتراضية 0.9.
  • filter_value (float، اختياري، القيمة الافتراضية -inf) — سيتم تعيين جميع القيم المفلترة إلى قيمة float هذه.
  • min_tokens_to_keep (int، اختياري، القيمة الافتراضية 1) — الحد الأدنى لعدد الرموز التي لا يمكن تصفيتها.

LogitsProcessor الذي يُنفّذ فك الترميز النموذجي. مستوحى من طريقة استخدام البشر للغة، يُعطي الأولوية للرموز التي تكون احتمالية السجل (log probability) الخاصة بها قريبة من إنتروبيا توزيع احتمالات الرموز. وهذا يعني أن الرموز الأكثر احتمالاً قد تُستبعد أثناء العملية.

راجع التفكيك النموذجي لتوليد اللغة الطبيعية لمزيد من المعلومات.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.UnbatchedClassifierFreeGuidanceLogitsProcessor

< >

( guidance_scale: floatmodelunconditional_ids: typing.Optional[torch.LongTensor] = Noneunconditional_attention_mask: typing.Optional[torch.LongTensor] = Noneuse_cache: bool = True )

المعاملات

  • guidance_scale (float) — مقياس التوجيه للتوجيه الحر من التصنيف (CFG). يتم تفعيل CFG عن طريق تعيين guidance_scale != 1. تشجيع مقياس توجيه أعلى يدفع النموذج إلى توليد عينات مرتبطة ارتباطًا وثيقًا بالموجّه المُدخل، وعادةً على حساب جودة أدنى. القيمة الأصغر من 1 لها تأثير عكسي، مع جعل الموجّه السلبي المُقدَّم عبر negative_prompt_ids (إن وُجد) يعمل كموجّه إيجابي.
  • model (PreTrainedModel) — النموذج الذي يحسب الدرجات غير الشرطية. يُفترض أن يكون هو نفسه النموذج الذي يحسب الدرجات الشرطية. يجب أن يستخدم كلا النموذجين نفس مُجزِّئ النص.
  • unconditional_ids (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) — فهارس رموز تسلسل الإدخال في قاموس الكلمات للفرع غير الشرطي. إذا لم يُضبط، فسيتم افتراض الرمز الأخير من الموجه.
  • unconditional_attention_mask (torch.LongTensor of shape (batch_size, sequence_length), اختياري) — قناع الانتباه الخاص بـ unconditional_ids.
  • use_cache (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تخزين المفاتيح/القيم مؤقتًا (cache) أثناء تمرير الأمامي (forward pass) للموجّه السلبي (negative prompt).

معالج القيم غير المعيارية (Logits) للإرشاد الحر من التصنيف (CFG). يقوم المعالج بحساب متوسط مرجح عبر الدرجات المستمدة من القيم غير المعيارية الشرطية على الموجه والقيم غير المعيارية غير الشرطية (أو السلبية) على الموجه، مع التوسيط بواسطة guidance_scale. تُحسب الدرجات غير الشرطية داخليًا عن طريق تقديم model مع فرع unconditional_ids.

راجع الورقة البحثية لمزيد من المعلومات.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Today, a dragon flew over Paris, France,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=1.5)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 50 people and injuring more than 100'

>>> # with a negative prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=2, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Today, a dragon flew over Paris, France, killing at least 130 people. French media reported that'

>>> # with a positive prompt
>>> neg_inputs = tokenizer(["A very happy event happened,"], return_tensors="pt")
>>> out = model.generate(inputs["input_ids"], guidance_scale=0, negative_prompt_ids=neg_inputs["input_ids"])
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
"Today, a dragon flew over Paris, France, and I'm very happy to be here. I"

__call__

< >

( input_idsscores )

فئة transformers.WhisperTimeStampLogitsProcessor

< >

( generate_config: GenerationConfigbegin_index: int_detect_timestamp_from_logprob: bool | None = None )

المعاملات

  • generate_config (GenerateConfig) — إعدادات التوليد المستخدمة لتوليد المخرجات. المعلمات التالية مطلوبة: eos_token_id (int, اختياري, الافتراضي 50257): المعرّف الخاص برمz نهاية التسلسل. no_timestamps_token_id (int, اختياري, الافتراضي 50363): المعرّف الخاص برمz "<|notimestamps|>". max_initial_timestamp_index (int, اختياري, الافتراضي 1): يُستخدم لضبط القيمة القصوى للوقت الزمني الأولي. يُستخدم هذا لمنع النموذج من توقّع أوقات زمنية بعيدة جداً في المستقبل.
  • begin_index (int) — مؤشر الرمز (Token) الخاص بالرمز الأول الذي يولّده النموذج.
  • _detect_timestamp_from_logprob (bool, اختياري) — ما إذا كان يمكن التنبؤ بالطوابع الزمنية من الاحتمالات اللوغاريتمية (logprobs) لجميع الطوابع الزمنية.

LogitsProcessor يعدّل القيم الأولية (logits) الخاصة بتوليد الطوابع الزمنية في النص المنقول. عندما تصل رموز الإدخال إلى عتبة محددة، يضبط المعالج القيم على سالب ما لا نهاية. يضمن المعالج ظهور رموز الطوابع الزمنية في أزواج، وذلك عبر إخفاء القيم الأولية التي من شأنها كسر نمط هذا الاقتران. يتم ذلك للحفاظ على اتساق وبنية الطوابع الزمنية المولّدة. كما يضمن أنه عندما تكون الاحتمالية المتوقعة لعينة أي من رموز الطوابع الزمنية أكبر من أي رمز غير طابع زمني فردي، تُضبط القيم الأولية للرموز غير الزمنية على سالب ما لا نهاية. يتم ذلك لضمان توليد الطوابع الزمنية بدلاً من الرموز المحتملة الأخرى.

راجع الورقة البحثية لمزيد من المعلومات.

أمثلة:

>>> import torch
>>> from transformers import AutoProcessor, WhisperForConditionalGeneration, GenerationConfig
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor(ds[3]["audio"]["array"], return_tensors="pt")
>>> input_features = inputs.input_features

>>> #Displaying timestamps
>>> generated_ids = model.generate(inputs=input_features, return_timestamps=True)
>>> transcription = processor.batch_decode(generated_ids, decode_with_timestamps=True)[0]
>>> print("Transcription:", transcription)
Transcription: <|startoftranscript|><|0.00|> He has grave doubts whether Sir Frederick Layton's work is really Greek after all, and can<|6.44|><|6.44|> discover in it but little of rocky Ithaca.<|9.44|><|endoftext|>


>>> #No timestamps & change EOS:
>>> #This allows the user to select a specific token to terminate the sequence on, in this case it's the word "can"(460)
>>> model.generation_config.eos_token_id = 460
>>> generated_ids = model.generate(inputs=input_features,return_timestamps=False)
>>> transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print("Transcription:", transcription)
Transcription:  He has grave doubts whether Sir Frederick Layton's work is really Greek after all and can

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

فئة transformers.WatermarkLogitsProcessor

< >

( vocab_sizedevicegreenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )

المعاملات

  • vocab_size (int) — حجم قاموس مُجزِّئ رموز النموذج. يُستخدم لحساب نسبة الرموز “الخضراء”.
  • device (str) — الجهاز الذي يُخصَّص عليه النموذج.
  • greenlist_ratio (float, اختياري، اختياري، القيمة الافتراضية 0.25) — نسبة الرموز “الخضراء” المستخدمة إلى حجم المفردات. القيمة الافتراضية هي 0.25.
  • bias (float, اختياري، اختياري، القيمة الافتراضية 2.0) — الانحياز المضاف إلى قيم logits للرموز “الخضراء” المحددة. يُنصح بخفض قيمة bias إذا تدهورت جودة توليد النص. القيم الموصى بها تقع ضمن النطاق [0.5, 2.0]. القيمة الافتراضية هي 2.0.
  • hashing_key (int, اختياري، اختياري، القيمة الافتراضية 15485863) — المفتاح المستخدم للتجزئة. إذا كنت تنشر هذه العلامة المائية، فننصحك باستخدام مفتاح خاص آخر. القيمة الافتراضية هي 15485863 (العدد الأولي المليون).
  • seeding_scheme (str, اختياري، اختياري, الافتراضي هو "lefthash") — مخطط البذر المستخدم لاختيار الرموز "الخضراء". يقبل القيم التالية:
    • “lefthash” (الافتراضي): يعتمد اختيار الرموز “green” على الرمز الأخير (الخوارزمية 2 من الورقة البحثية)
    • “selfhash”: يعتمد اختيار الرموز “الخضراء” على الرمز الحالي نفسه (الخوارزمية 3 من الورقة البحثية) السلبي في هذا المخطط أنه يأخذ في الاعتبار جميع الرموز التالية المحتملة، وقد يكون أبطأ من “lefthash”. طول سياق الرموز السابقة المستخدمة في التهيئة. كلما زاد طول السياق، زادت متانة العلامة المائية.
  • context_width (int، اختياري، القيمة الافتراضية 1) — عدد الرموز السابقة المستخدمة عند تعيين البذرة.

معالج logits لتعليم النص المولّد. يعدّل المعالج درجات مخرجات النموذج عن طريق إضافة انحياز صغير إلى مجموعة عشوائية من الرموز "الخضراء" قبل توليد الرمز التالي. يعتمد اختيار الرموز "الخضراء" على seeding_scheme المستخدم. استُند الكود إلى المستودع الأصلي.

يمكن اكتشاف النص الذي يولّده هذا LogitsProcessor باستخدام WatermarkDetector. راجع call() للتفاصيل،

راجع الورقة البحثية لمزيد من المعلومات.

أمثلة:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkingConfig

>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> inputs = tokenizer(["Alice and Bob are"], return_tensors="pt")

>>> # normal generation
>>> out = model.generate(inputs["input_ids"], max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both in the same room.\n\n"I\'m not sure if you\'re'

>>> # watermarked generation
>>> watermarking_config = WatermarkingConfig(bias=2.5, context_width=2, seeding_scheme="selfhash")
>>> out = model.generate(inputs["input_ids"], watermarking_config=watermarking_config, max_length=20, do_sample=False)
>>> tokenizer.batch_decode(out, skip_special_tokens=True)[0]
'Alice and Bob are both still alive and well and the story is pretty much a one-hour adventure'

>>> # to detect watermarked text use the WatermarkDetector class
>>> from transformers import WatermarkDetector
>>> detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config= watermarking_config)
>>> detection_preds = detector(out)
>>> detection_preds
array([ True])

__call__

< >

( input_ids: LongTensorscores: Tensor ) → torch.Tensor of shape (batch_size, config.vocab_size)

المعاملات

  • input_ids (torch.LongTensor من الشكل (batch_size, sequence_length)) — فهارس رموز تسلسل الإدخال في قاموس الكلمات. ما هي معرّفات الإدخال؟
  • scores (torch.Tensor من الشكل (batch_size, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة. يمكن أن تكون هذه القيم logits لكل عنصر في المفردات عند عدم استخدام بحث الحزمة (beam search)، أو log softmax لكل رمز في المفردات عند استخدام بحث الحزمة.

يعيد

torch.Tensor من الشكل (batch_size, config.vocab_size)

درجات التنبؤ المعالجة.

StoppingCriteria

يمكن استخدام StoppingCriteria لتغيير وقت إيقاف التوليد (باستثناء رمز EOS). يرجى ملاحظة أن هذا متاح حصريًا لتنفيذات PyTorch الخاصة بنا.

فئة transformers.StoppingCriteria

< >

( )

فئة أساسية مجردة لجميع معايير التوقف التي يمكن تطبيقها أثناء التوليد.

إذا كان معيار التوقف لديك يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate.

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). يمكن أن تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

فئة transformers.StoppingCriteriaList

< >

( iterable = () )

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). يمكن أن تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

فئة transformers.MaxLengthCriteria

< >

( max_length: intmax_position_embeddings: int | None = None )

المعاملات

  • max_length (int) — الحد الأقصى للطول الذي يمكن أن تصل إليه تسلسل الإخراج بعدد الرموز.
  • max_position_embeddings (int، اختياري) — الحد الأقصى لطول النموذج، كما هو محدد بواسطة خاصية config.max_position_embeddings الخاصة بالنموذج.

يمكن استخدام هذه الفئة لإيقاف التوليد في أي وقت يتجاوز فيه العدد الكلي للرموز المولَّدة max_length. يرجى ملاحظة أنه في نماذج التحويل (transformers) التي تعتمد على المُفكِّك فقط، فإن هذا يشمل رموز الاستدعاء الأولية.

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). يمكن أن تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

فئة transformers.MaxTimeCriteria

< >

( max_time: floatinitial_timestamp: float | None = None )

المعاملات

  • max_time (float) — الحد الأقصى المسموح به للوقت بالثواني للتوليد.
  • initial_timestamp (float، اختياري، القيمة الافتراضية time.time()) — بداية وقت التوليد المسموح به.

يمكن استخدام هذه الفئة لإيقاف التوليد في أي وقت يتجاوز فيه التوليد الكامل مدة زمنية معينة. بشكل افتراضي، يبدأ احتساب الوقت عند تهيئة هذه الدالة. يمكنك تجاوز ذلك عن طريق تمرير initial_timestamp.

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). يمكن أن تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

فئة transformers.StopStringCriteria

< >

( tokenizer: PreTrainedTokenizerBasestop_strings: str | list[str] )

المعاملات

  • tokenizer (PreTrainedTokenizer) — المُرمِّز المرتبط بالنموذج (مطلوب لاستخراج قاموس الرموز وتقسيم سلاسل الإنهاء)
  • stop_strings (Union[str, list[str]]) — قائمة من النصوص التي يجب أن تُنهي التوليد. إذا تم تمرير نص واحد، فسيتم معالجته كأنه قائمة تحتوي على عنصر واحد.

يمكن استخدام هذه الفئة لإيقاف التوليد كلما تم توليد تسلسلات نصية محددة. إنها تعالج النصوص مع قاموس المُجزِّئ (tokenizer) للعثور على المواضع التي يمكن فيها للرموز (tokens) إكمال نصوص الإيقاف بشكل صالح.

تُوقف عملية التوليد فور توليد رمز يكمل أيًا من سلاسل التوقف. نريد التقاط أي حالة تكون فيها سلسلة التوقف موجودة في المخرجات المفكوكة، مما يعني أننا يجب أن نلتقط أيضًا الحالات التي تتضمن “امتدادات” من طرف واحد أو كلا الطرفين. لجعل هذا أكثر وضوحًا، بالنسبة لسلسلة التوقف “stop”, فإن أيًا من تسلسلات الرموز التالية سيُطلق التطابق:

  • [“st”, “op”]
  • [“stop”]
  • [“st”, “opera”]
  • [“sto”, “pper”]
  • [“las”, “topper”]
  • [“s”, “to”, “pped”]

لاحظ أن التطابق لن يُستثار إلا إذا كانت سلسلة التوقف في نهاية التسلسل المولّد. بكلمات أخرى، لن تُستثير هذه التسلسلات تطابقاً:

  • [“stop”, “at”]
  • [“st” ، “op” ، “at”]
  • [“st”, “opera”, “tion”]

السبب في عدم تطابق هذه الحالات هو أن سلسلة التوقف لا تتداخل مع الرمز الأخير. إذا كان بإمكانك إزالة رمز واحد أو أكثر من نهاية التسلسل دون إتلاف سلسلة التوقف، فلن يطابق هذا المعيار تلك السلسلة. هذا مصمم بهذه الطريقة؛ لأن هذا الفحص يُنفَّذ بعد توليد كل رمز، فلا يمكن أن نفوت سلسلة توقف صالحة إذا تم توليدها، لكننا لا نريد إيقاف التوليد لمجرد وجود سلسلة التوقف في مكان ما ضمن مدخلات input_ids السابقة.

لكن كيف يتم المطابقة فعليًا؟ نقوم بذلك بطريقة مربكة إلى حد ما، لأننا نريد أن تكون عملية المطابقة بأكملها قابلة للتجميع باستخدام Torch أو XLA، مما يعني أننا لا نستطيع استخدام طرق السلاسل القياسية. ومع ذلك، من الممكن، مع بعض الجهد، إجراء مطابقة السلاسل باستخدام عمليات المصفوفات البحتة. سنبدأ بوصف الخوارزمية التي نستخدمها مع عمليات السلاسل القياسية، ثم في النهاية سنشرح كيف يتم تحويل ذلك إلى عمليات مصفوفات بحتة.

المفتاح في الخوارزمية هو ملاحظة: بما أن سلسلة التوقف يجب أن تتداخل مع نهاية تسلسل الرموز، يمكننا البدء من نهاية التسلسل والتحرك إلى الخلف. تحديداً، نتحقق من وجود تداخل بين بداية الرمز الأخير ونهاية stop_string، أو بصيغة أخرى، stop_string[-i:] == token[:i] لبعض i > 0. إذا نظرت إلى الأمثلة الإيجابية أعلاه، فسترى أن الرمز الأخير في جميعها يحقق هذه الخاصية:

  • [“st”، “op”] (التداخل هو “op”، طول التداخل == 2)
  • [“stop”] (التداخل هو “stop” ، طول التداخل == 4)
  • [“st”, “opera”] (التداخل هو “op”، طول التداخل == 2)
  • [“sto”, “pper”] (التداخل هو “p”، طول التداخل == 1)
  • [“las”, “topper”] (التداخل هو “top”، وطول التداخل == 3)
  • [“s”, “to”, “pped”] (الحرف المتداخل هو “p” وطول التداخل == 1)

من المستحيل بناء تسلسل مطابق لا يتسم بهذه الخاصية (يمكنك التحقق من ذلك بنفسك). ومع ذلك، على الرغم من أن هذا التداخل بين بداية الرمز الأخير ونهاية سلسلة التوقف ضروري للمطابقة، إلا أنه غير كافٍ. نحتاج أيضًا إلى التحقق من أن بقية تسلسل الرموز متسقة مع سلسلة التوقف.

How do we do that? Let’s use [“s”, “to”, “pped”] as an example. We know that the final token, “pped”, has an overlap of 1 with the stop string, “stop”. We then go back to the previous token, “to”. Since we have already matched 1 character from the stop string, the remainder to check is “sto”. We check that the next token “to” matches the end of the remainder, which it does. We have now matched 3 characters from the stop string, and the remainder to match is “s”. We go back to the previous token again, which is also “s”. This is a match, and so we have matched the entire stop string.

كيف يعمل الأمر عندما تتجاوز الرموز بداية سلسلة التوقف؟ لنأخذ مثال [“las”, “topper”]. الرمز الأخير، “topper”، يتداخل مع سلسلة التوقف، “stop”، بمقدار 3. وبالتالي، فإن الجزء المتبقي من سلسلة التوقف للمطابقة هو “s”. نعود إلى الرمز السابق، “las”. بما أن الجزء المتبقي للمطابقة هو “s” فقط، بطول 1، فإننا نأخذ في الاعتبار حرفًا واحدًا فقط من نهاية الرمز، وهو “s”. يتطابق هذا مع سلسلة التوقف، وبالتالي يتم مطابقة السلسلة بأكملها.

كيف نحسب هذه التطابقات باستخدام عمليات المصفوفات؟ ببساطة: نحسب مسبقًا وبكفاءة المعلومات اللازمة لجميع الرموز! لكل رمز، نحسب:

  • تداخلها مع نهاية سلسلة التوقف، إن وُجد
  • المواضع داخل سلسلة التوقف التي يتطابق فيها الرمز، بما في ذلك التطابقات التي تمتد خارج البداية.
  • الطول الكلي للرمز

على سبيل المثال، بالنسبة للرمز “pped”, نحسب تداخلاً نهائياً بقيمة 1، ولا توجد مواضع مطابقة داخلية، وطولاً يساوي 4. بالنسبة للرمز “to”, نحسب عدم وجود تداخل نهائي، وموضعاً داخلياً واحداً للمطابقة بقيمة 1 (عند العد من النهاية)، وطولاً يساوي 2. بالنسبة للرمز “s”, نحسب عدم وجود تداخل نهائي، وموضعاً داخلياً واحداً للمطابقة بقيمة 3 (مرة أخرى عند العد من النهاية)، وطولاً يساوي 1.

ما دام لدينا هذه المعلومات، يمكننا تنفيذ الخوارزمية أعلاه دون أي عمليات مقارنة نصوص. ما علينا سوى تنفيذ الخطوات التالية:

  • تحقق مما إذا كان الرمز الأخير يحتوي على تداخل نهائي مع السلسلة الافتتاحية
  • تابع التراجع، مع تتبع مقدار سلسلة التوقف التي تم تطابقها حتى الآن
  • في كل نقطة، تحقق مما إذا كان الرمز التالي يحتوي على الموقع الحالي كأحد مواقعِه الصالحة
  • استمر حتى يفشل التطابق، أو حتى يتم تطابق سلسلة التوقف بالكامل

Again, consider [“s”, “to”, “pped”] as an example. “pped” has an end overlap of 1, so we can begin a match. We have matched 1 character so far, so we check that the next token “to”, has 1 as a valid position (again, counting from the end). It does, so we add the length of “to” to our position tracker. We have now matched 3 characters, so we check that the next token “s” has 3 as a valid position. It does, so we add its length to the position tracker. The position tracker is now 4, which is the length of the stop string. We have matched the entire stop string.

في الحالة الثانية، [“las”, “topper”]، يحتوي “topper” على تداخل نهائي يبلغ 3، لذا يمكننا بدء المطابقة. لقد قمنا بمطابقة 3 أحرف حتى الآن، لذا نتحقق من أن الرمز التالي “las” لديه 3 كموضع صالح. وهذا صحيح، لأننا نسمح للأعلام بمطابقة المواضع التي تتجاوز بداية سلسلة التوقف. نضيف طولها إلى متتبع الموضع. أصبح متتبع الموضع الآن 6، وهو أكبر من طول سلسلة التوقف! لا تقلق، فهذا يُحسب أيضًا كمطابقة لسلسلة التوقف. لقد قمنا بمطابقة سلسلة التوقف بأكملها.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | None**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). يمكن أن تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

فئة transformers.EosTokenCriteria

< >

( eos_token_id: typing.Union[int, list[int], torch.Tensor] )

المعاملات

  • eos_token_id (Union[int, list[int], torch.Tensor]) — المعرّف (أو المعرّفات) لرمز نهاية التسلسل.

يمكن استخدام هذه الفئة لإيقاف التوليد في أي وقت يتم فيه إنشاء رمز “نهاية التسلسل”. افتراضيًا، تستخدم model.generation_config.eos_token_id.

__call__

< >

( input_ids: LongTensorscores: tuple[torch.Tensor] | Nonenew_token_length: int = 1**kwargs ) → torch.BoolTensor. (torch.BoolTensor of shape (batch_size, 1))

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات.

    يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • scores (tuple(torch.Tensor)) — درجات التنبؤ لرأس نمذجة اللغة، على شكل tuple يحتوي على tensor واحد لكل خطوة توليد، حيث يكون شكل كل منها (batch_size, config.vocab_size). قد تكون هذه الدرجات لكل رمز في المفردات قبل SoftMax أو بعد SoftMax. إذا كان معيار التوقف هذا يعتمد على مدخل scores، فتأكد من تمرير return_dict_in_generate=True, output_scores=True إلى generate، وإلا فسيتم تمرير None.
  • new_token_length (int، اختياري، القيمة الافتراضية 1) — عدد الرموز التي سيتم فحصها مقابل المعايير. سيتم فحص أحدث new_token_length رموز في كل عنصر من عناصر الدفعة.
  • kwargs (dict[str, Any], اختياري) — معلمات إضافية محددة لمعايير التوقف.

يعيد

torch.BoolTensor. (torch.BoolTensor من الشكل (batch_size, 1))

True يشير إلى أننا نتوقف عن التوليد لصف معين. False يشير إلى أنه يجب علينا المتابعة.

بثّات

فئة transformers.TextStreamer

< >

( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = False**decode_kwargs: Any )

المعاملات

  • tokenizer (AutoTokenizer) — المُرمِّز المستخدم لفك ترميز الرموز.
  • skip_prompt (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تجاوز الأمر الموجّه إلى .generate() أم لا. مفيد على سبيل المثال في روبوتات الدردشة.
  • decode_kwargs (dict، اختياري) — معلمات إضافية بالكلمات المفتاحية تمريرها إلى طريقة decode في مُرمِّز الرموز.

بث نصي بسيط يطبع الرموز إلى الإخراج القياسي فور اكتمال الكلمات.

أمثلة:

>>> 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,

نهاية

< >

( )

يفرّغ أي ذاكرة مؤقتة متبقية ويكتب سطرًا جديدًا إلى الإخراج القياسي.

on_finalized_text

< >

( text: strstream_end: bool = False )

يطبع النص الجديد إلى stdout. إذا كان التدفق في نهايته، يطبع أيضًا سطرًا جديدًا.

put

< >

( value )

يستقبل الرموز، ويفكك تشفيرها، ثم يطبعها في الإخراج القياسي فور تشكيلها كلمات كاملة.

فئة transformers.TextIteratorStreamer

< >

( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )

المعاملات

  • tokenizer (AutoTokenizer) — المُرمِّز المستخدم لفك ترميز الرموز.
  • skip_prompt (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تجاوز الأمر الموجّه إلى .generate() أم لا. مفيد على سبيل المثال في روبوتات الدردشة.
  • timeout (float, اختياري) — مهلة زمنية لطابور النص. إذا كانت None، فسيبقى الطابور محجوزًا بشكل غير محدود. مفيد للتعامل مع الاستثناءات في .generate()، عندما يُستدعى في خيط منفصل.
  • decode_kwargs (dict، اختياري) — معلمات إضافية بالكلمات المفتاحية تمريرها إلى طريقة decode في مُرمِّز الرموز.

بثّ (Streamer) يخزّن النص الجاهز للطباعة في طابور (queue)، ليُستخدم من قبل تطبيق تالٍ كمُتسلسِل (iterator). وهذا مفيد للتطبيقات التي تستفيد من الوصول إلى النص المولّد بطريقة غير حاصِرة (non-blocking) (مثل عرض تفاعلي في Gradio).

أمثلة:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer
>>> from threading import Thread

>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")
>>> streamer = TextIteratorStreamer(tok)

>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
>>> thread = Thread(target=model.generate, kwargs=generation_kwargs)
>>> thread.start()
>>> generated_text = ""
>>> for new_text in streamer:
...     generated_text += new_text
>>> generated_text
'An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,'

on_finalized_text

< >

( text: strstream_end: bool = False )

ضع النص الجديد في الطابور. إذا كان البث على وشك الانتهاء، فضع إشارة التوقف في الطابور أيضًا.

فئة transformers.AsyncTextIteratorStreamer

< >

( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsetimeout: float | None = None**decode_kwargs: Any )

المعاملات

  • tokenizer (AutoTokenizer) — المُرمِّز المستخدم لفك ترميز الرموز.
  • skip_prompt (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تجاوز الأمر الموجّه إلى .generate() أم لا. مفيد على سبيل المثال في روبوتات الدردشة.
  • timeout (float, اختياري) — مهلة زمنية لطابور النص. إذا كانت None، فسيبقى الطابور محجوزًا بشكل غير محدود. مفيد للتعامل مع الاستثناءات في .generate()، عندما يُستدعى في خيط منفصل.
  • decode_kwargs (dict، اختياري) — معلمات إضافية بالكلمات المفتاحية تمريرها إلى طريقة decode في مُرمِّز الرموز.

يرفع

TimeoutError

  • TimeoutError — إذا تجاوز وقت توليد الرموز القيمة المحددة للوقت الأقصى.

بثّ (Streamer) يخزّن النص الجاهز للطباعة في طابور (queue)، ليُستخدم من قبل تطبيق تالٍ كمُكرِّر غير متزامن (async iterator). يُعدّ هذا مفيدًا للتطبيقات التي تستفيد من الوصول إلى النص المولَّد بشكل غير متزامن (مثلًا في عرض تفاعلي باستخدام Gradio).

أمثلة:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, AsyncTextIteratorStreamer
>>> from threading import Thread
>>> import asyncio

>>> tok = AutoTokenizer.from_pretrained("openai-community/gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> inputs = tok(["An increasing sequence: one,"], return_tensors="pt")

>>> # Run the generation in a separate thread, so that we can fetch the generated text in a non-blocking way.
>>> async def main():
...     # Important: AsyncTextIteratorStreamer must be initialized inside a coroutine!
...     streamer = AsyncTextIteratorStreamer(tok)
...     generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=20)
...     thread = Thread(target=model.generate, kwargs=generation_kwargs)
...     thread.start()
...     generated_text = ""
...     async for new_text in streamer:
...         generated_text += new_text
>>>     print(generated_text)
>>> asyncio.run(main())
An increasing sequence: one, two, three, four, five, six, seven, eight, nine, ten, eleven,

on_finalized_text

< >

( text: strstream_end: bool = False )

ضع النص الجديد في الطابور. إذا كان البث على وشك الانتهاء، فضع إشارة التوقف في الطابور أيضًا.

فئة transformers.TextDiffusionStreamer

< >

( tokenizer: PreTrainedTokenizerBaseskip_prompt: bool = Falsesleep_time: float | None = None**decode_kwargs: Any )

المعاملات

  • tokenizer (AutoTokenizer) — المُرمِّز المستخدم لفك ترميز الرموز.
  • skip_prompt (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تجاوز الأمر الموجّه إلى .generate() أم لا. مفيد على سبيل المثال في روبوتات الدردشة.
  • sleep_time (float، اختياري) — المدة الزمنية للنوم بين مسودات الانتشار، والتي قد تساعد في تصور المخرجات الوسيطة.
  • decode_kwargs (dict، اختياري) — معلمات إضافية بالكلمات المفتاحية تمريرها إلى طريقة decode في مُرمِّز الرموز.

بثّات تُطبع مخرجات انتشار النص. خطوات الانتشار الوسيطة (المسودات) مؤقتة وتُستبدل بالمسودات اللاحقة، وتُحذف عند طباعة النص المؤكَّد.

إذا كنت تعمل في بيئة مثل tmux، فقد يفشل النص المسودة في الكتابة فوق نفسه.

أمثلة:

>>> from transformers import DiffusionGemmaForBlockDiffusion, AutoProcessor, TextDiffusionStreamer

>>> model = DiffusionGemmaForBlockDiffusion.from_pretrained(
...     "google/diffusiongemma-26B-A4B-it", device_map="auto",
... )
>>> processor = AutoProcessor.from_pretrained("google/diffusiongemma-26B-A4B-it")

>>> chat = [{"role": "user", "content": "Why is the sky blue?"},]
>>> input_ids = processor.apply_chat_template(
...     chat, tokenize=True, return_tensors="pt", add_generation_prompt=True
... )
>>> streamer = TextDiffusionStreamer(tokenizer=processor.tokenizer)
>>> model.generate(input_ids.to(model.device), max_new_tokens=512, streamer=streamer)

نهاية

< >

( )

يفرّغ أي ذاكرة مؤقتة متبقية ويخرج سطرًا جديدًا.

put

< >

( value )

يستقبل الرموز المؤكدة، ويمسح المسودة، ثم يطبعها بشكل دائم.

put_draft

< >

( value**kwargs )

يستقبل تسلسل الرموز المسودة الكامل، ويفكّك ترميزها، ثم يطبعها باللون الأصفر. يكتب فوق المسودة السابقة.

الذاكرة المؤقتة

فئة transformers.CacheLayerMixin

< >

( **kwargs )

Base, abstract class for a single layer’s cache.

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs )

get_seq_length

< >

( )

get_mask_sizes

< >

( query_length: int )

get_max_length

< >

( )

يعيد أقصى طول تسلسل يمكن للطبقة احتواؤه. القيمة -1 تعني عدم وجود حد أقصى، أو أن الحد الأقصى غير معرّف، على سبيل المثال طبقة انتباه ديناميكية تنمو بلا حدود أو طبقة انتباه خطي لا تحتوي على بُعد لطول التسلسل.

إعادة تعيين

< >

( )

يعيد تعيين قيم ذاكرة التخزين المؤقت مع الحفاظ على الكائنات

reorder_cache

< >

( beam_idx: LongTensor )

يعيد ترتيب ذاكرة التخزين المؤقت لهذه الطبقة للبحث بالحزمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

فئة transformers.DynamicLayer

< >

( **kwargs )

طبقة تخزين مؤقت تنمو ديناميكيًا كلما تم توليد المزيد من الرموز. هذا هو الافتراضي للنماذج التوليدية. تخزن حالات المفتاح والقيمة كمُتجهات (tensors) بشكل [batch_size, num_heads, seq_len, head_dim].

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

crop

< >

( tokens_to_remove: int )

أزل رموز tokens_to_remove من طبقة التخزين المؤقت الحالية.

batch_repeat_interleave

< >

( repeats: int )

كرر الكاش repeats مرات في بُعد الدفعة.

batch_select_indices

< >

( indices: Tensor )

احتفظ فقط بـindices في بُعد الدفعة (batch dimension) للكاش.

فئة transformers.StaticLayer

< >

( max_cache_len: int**kwargs )

المعاملات

  • max_cache_len (int) — الحد الأقصى لعدد الرموز التي يمكن تخزينها، ويُستخدم للتهيئة المسبقة للمصفوفات.

طبقة تخزين مؤقت ثابتة تحفظ حالات المفاتيح والقيم كمُتجهات ثابتة من الشكل [batch_size, num_heads, max_cache_len, head_dim]. تقوم بتخصيص مُتجهات الدعم الكاملة الخاصة بها بشكل كسول، ثم تعدّلها في مكانها. صُممت لدعم torch.compile.

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

تهيئة كسولة لمصفوفات المفاتيح والقيم. يتيح ذلك الحصول على جميع الخصائص (dtype، device، num_heads في حالة TP إلخ…) وقت التشغيل مباشرةً، وهو أمر عملي للغاية لأنه يتجنب نقل الأجهزة وأنواع البيانات (dtypes) إلخ لاحقًا لكل update (والذي قد يكسر عناوين dynamo الثابتة أيضًا).

إذا لم يكن هذا مرغوبًا فيه، يمكن استدعاء early_initialization(...) مباشرةً على كائن Cache، مما يؤدي إلى استدعاء هذه الدالة مسبقًا (وهو أمر مطلوب على سبيل المثال لـ torch.export). كما أن هذا الأمر مطلوب في كل مرة ينتهي فيها prefill نفسه داخل منطقة مُجمّعة (compiled region) (مثلًا عند استخدام prefill المقسّم).

فئة transformers.StaticSlidingWindowLayer

< >

( max_cache_len: intsliding_window: int**kwargs )

المعاملات

  • max_cache_len (int) — الحد الأقصى لعدد الرموز التي يمكن تخزينها، ويُستخدم للتهيئة المسبقة للمصفوفات.
  • sliding_window (int) — حجم النافذة المنزلقة.

طبقة تخزين مؤقت ثابتة تحفظ حالات المفاتيح والقيم كمُتجهات ثابتة من الشكل [batch_size, num_heads, min(max_cache_len, sliding_window), head_dim]. تقوم بتخصيص مُتجهات الدعم الكاملة الخاصة بها بشكل كسول، ثم تعدّلها في مكانها. صُممت لدعم torch.compile.

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

تهيئة كسولة لمصفوفات المفاتيح والقيم. يتيح ذلك الحصول على جميع الخصائص (dtype، device، num_heads في حالة TP إلخ…) وقت التشغيل مباشرةً، وهو أمر عملي للغاية لأنه يتجنب نقل الأجهزة وأنواع البيانات (dtypes) إلخ لاحقًا لكل update (والذي قد يكسر عناوين dynamo الثابتة أيضًا).

إذا لم يكن هذا مرغوبًا فيه، يمكن استدعاء early_initialization(...) مباشرةً على كائن Cache، مما يؤدي إلى استدعاء هذه الدالة مسبقًا (وهو أمر مطلوب على سبيل المثال لـ torch.export). كما أن هذا الأمر مطلوب في كل مرة ينتهي فيها prefill نفسه داخل منطقة مُجمّعة (compiled region) (مثلًا عند استخدام prefill المقسّم).

فئة transformers.QuantoQuantizedLayer

< >

( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

فئة transformers.HQQQuantizedLayer

< >

( nbits: int = 4axis_key: int = 0axis_value: int = 0q_group_size: int = 64residual_length: int = 128 )

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

فئة transformers.Fp8QuantizedLayer

< >

( )

طبقة مُكمّمة تخزّن حالات المفتاح والقيمة بنقطة عائمة 8 بت. يتم تجميد معامل التدرّج لكل متجه بعد أول update، لذا تُضاف الحالات الجديدة كما هي: بدون ذاكرة مؤقتة متبقية، وبدون إعادة تكميم.

تنتمي نسخة أكثر دقة هنا بدلاً من وضعها تحت QuantizedLayer ، إذ إن التجميع على طول بُعد الرأس يحافظ على قابلية إضافة الحالات ويحوّل المقياس المخزَّن إلى متجه فقط.

تحديث

< >

( key_states: Tensorvalue_states: Tensor*args**kwargs ) → tuple[torch.Tensor, torch.Tensor]

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.

يعيد

tuple[torch.Tensor, torch.Tensor]

حالات المفتاح والقيمة.

حدّث كاشات المفتاح والقيمة في مكانها، وأعدّ حالات المفاتيح والقيم اللازمة.

lazy_initialization

< >

( key_states: Tensorvalue_states: Tensor )

فئة transformers.Cache

< >

( layers: list[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin | transformers.cache_utils.DummyLayer] | None = Nonelayer_class_to_replicate: type[transformers.cache_utils.CacheLayerMixin | transformers.cache_utils.LinearAttentionCacheLayerMixin] | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = True )

المعاملات

  • layers (Optional، اختياري) — قائمة بطبقات CacheLayerMixin أو LinearAttentionCacheLayerMixin مُنشأة مسبقًا. إذا تم تجاهله (None)، فسيتم استخدام layer_class_to_replicate.
  • layer_class_to_replicate (type[CacheLayerMixin | LinearAttentionCacheLayerMixin]، اختياري) — يُستخدم فقط إذا تم إهمال layers (None)، وفي هذه الحالة سيُستخدم كالفئة الأساسية لكل طبقة، وستُضاف الطبقات بشكل كسول (lazy) بمجرد استدعاء update مع layer_idx أكبر من قائمة الطبقات الحالية.
  • offloading (bool، اختياري، الافتراضي False) — ما إذا كان سيتم تنفيذ نقل الطبقات إلى cpu، لتوفير ذاكرة وحدة معالجة الرسوميات.
  • offload_only_non_sliding (bool، اختياري، القيمة الافتراضية True) — إذا كان offloading هو True، فإن هذا الخيار يحدد ما إذا كان سيتم نقل الطبقات غير المنزلقة فقط (لأن الطبقات المنزلقة عادةً ما تكون صغيرة الحجم، فلا حاجة لنقلها، وتخطيها أسرع).

يُعدّ Cache في الغالب قائمة من كائنات CacheLayerMixin، واحدة لكل طبقة في النموذج. وهو يعمل كحاوية لـ Cache لكل طبقة.

تحديث

< >

( key_states: Tensorvalue_states: Tensorlayer_idx: int*args**kwargs )

المعاملات

  • key_states (torch.Tensor) — حالات المفاتيح الجديدة للتخزين المؤقت.
  • value_states (torch.Tensor) — حالات القيمة الجديدة التي سيتم تخزينها مؤقتًا.
  • layer_idx (int) — مؤشر الطبقة التي سيتم تخزين حالاتها.

يحدّث ذاكرة التخزين المؤقت بحالات المفاتيح الجديدة key_states وحالات القيم value_states للطبقة layer_idx.

early_initialization

< >

( batch_size: intnum_heads: int | list[int]head_dim: int | list[int]dtype: dtypedevice: device )

قم بتهيئة جميع الطبقات مسبقًا (وإلا فستُهيأ بشكل كسول عند أول استدعاء لـupdate). يُعد هذا مفيدًا لوصفات export لدينا، حيث أن export يتطلب كل شيء مسبقًا.

get_seq_length

< >

( layer_idx: int = 0 )

يعيد طول التسلسل للكاش الخاص بالطبقة المحددة.

get_mask_sizes

< >

( query_length: intlayer_idx: int )

تُرجع هذه الدالة مجموعة (tuple) (kv_length, kv_offset) تتوافق مع الطول والإزاحة اللذين سيُرجعان للطبقة المحددة عند layer_idx. ثم تُجهَّز الأقنعة (masks) وفقاً للأطوال (kv_length, kv_offset) والأنماط المحددة لكل طبقة.

get_max_length

< >

( layer_idx: int | None = None )

يعيد الطول الأقصى للذاكرة المؤقتة. إذا لم يُقدَّم layer_idx (الافتراضي)، فإن هذا يعيد القيمة القصوى عبر جميع الطبقات. وإلا، يعيد القيمة القصوى المدعومة للطبقة المحددة. قيمة -1 تعني عدم وجود حد أقصى، أو حد أقصى غير معرّف، على سبيل المثال لطبقات الانتباه الديناميكي التي يمكن أن تنمو بلا حدود، أو طبقات الانتباه الخطي التي لا تملك بُعدًا لطول التسلسل.

إعادة تعيين

< >

( )

إعادة تعيين جميع متجهات الطبقات بشكل تكراري

reorder_cache

< >

( beam_idx: LongTensor )

إعادة ترتيب ذاكرة التخزين المؤقت للبحث بالحزمة

crop

< >

( tokens_to_remove: int )

أزل رموز tokens_to_remove من الذاكرة المؤقتة (Cache) الحالية. بالنسبة للطبقات التي لا تحتاج إلى الاحتفاظ بجميع الحالات السابقة في الذاكرة، مثل طبقات النافذة المنزلقة أو طبقات الانتباه الخطي، فإن هذا سيُقيّد أيضًا حجم الحالات المخزنة مؤقتًا ليعود إلى حجمها التشغيلي الأدنى. وهذا يعني أن crop(0) لن يكون بالضرورة دائمًا عملية لا تؤثر في شيء (no-op)، إذ قد يزال ما يزال حالات غير مفيدة (أي الحالات غير المطلوبة للتالي forward) من الذاكرة المؤقتة.

batch_repeat_interleave

< >

( repeats: int )

كرر ذاكرة التخزين المؤقت وابدلها

batch_select_indices

< >

( indices: Tensor )

اختيار الفهارس من ذاكرة التخزين المؤقت

فئة transformers.DynamicCache

< >

( ddp_cache_data: collections.abc.Iterable[tuple[typing.Optional[torch.Tensor], ...]] | None = Noneconfig: transformers.configuration_utils.PreTrainedConfig | None = Noneoffloading: bool = Falseoffload_only_non_sliding: bool = False )

المعاملات

  • ddp_cache_data (Iterable[tuple[torch.Tensor, torch.Tensor]]، اختياري) — أُضيف في الأصل لضمان التوافق مع torch.distributed (DDP). باختصار، هو map(gather_map, zip(*caches))، أي أن كل عنصر في القابل للتكرار يحتوي على حالات المفتاح والقيمة لطبقة تم تجميعها عبر النسخ بواسطة torch.distributed (الشكل=[حجم الدفعة العالمية، عدد الرؤوس، طول التسلسل، بُعد الرأس]). ملاحظة: يجب أن يكون الحجة الأولى أيضًا حتى يعمل بشكل صحيح
  • config (PreTrainedConfig، اختياري) — إعدادات النموذج الذي سيُستخدم هذا الكاش (Cache) له. إذا تم تمريرها، فستُستخدم للتحقق من بنية الطبقات المنزلقة أو الهجينة، مما يقلل بشكل كبير من متطلبات الذاكرة للموترات المخزنة مؤقتًا إلى [batch_size, num_heads, min(seq_len, sliding_window), head_dim].
  • offloading (bool، اختياري، الافتراضي False) — ما إذا كان سيتم تنفيذ نقل الطبقات إلى cpu، لتوفير ذاكرة وحدة معالجة الرسوميات.
  • offload_only_non_sliding (bool، اختياري، القيمة الافتراضية False) — إذا كان offloading هو True، فإن هذا الخيار يحدد ما إذا كان سيتم نقل الطبقات غير المنزلقة فقط (لأن الطبقات المنزلقة عادةً ما تكون صغيرة الحجم، فلا حاجة إلى نقلها، وتخطيها أسرع).

ذاكرة مؤقتة تنمو ديناميكيًا مع توليد المزيد من الرموز. هذا هو الافتراضي للنماذج التوليدية. تخزن حالات المفتاح والقيمة كقائمة من CacheLayer، واحدة لكل طبقة. الشكل المتوقع لكل متجه في CacheLayers هو [batch_size, num_heads, seq_len, head_dim]. إذا تم تمرير إعداد، فسيتم أيضًا التحقق من بنية ذاكرة المؤقت المنزلقة أو الهجينة، مما يقلل بشكل كبير من متطلبات الذاكرة للمتجهات المخزنة المؤقتًا إلى [batch_size, num_heads, min(seq_len, sliding_window), head_dim].

راجع Cache للاطلاع على التفاصيل المتعلقة بالطرق الشائعة التي تنفذها جميع فئات الكاش.

مثال:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, DynamicCache

>>> model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
>>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")

>>> inputs = tokenizer(text="My name is Qwen2", return_tensors="pt")

>>> # Prepare a cache class and pass it to model's forward
>>> past_key_values = DynamicCache(config=model.config)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation

فئة transformers.StaticCache

< >

( config: PreTrainedConfigmax_cache_len: intoffloading: bool = Falseoffload_only_non_sliding: bool = True**kwargs )

المعاملات

  • config (PreTrainedConfig) — إعدادات النموذج الذي سيُستخدم هذا الكاش (Cache) معه. ستُستخدم للتحقق من بنية الطبقات المنزلقة أو الهجينة، وتهيئة كل طبقة وفقًا لذلك.
  • max_cache_len (int) — الحد الأقصى لعدد الرموز التي يجب أن يحتفظ بها هذا الكاش.
  • offloading (bool، اختياري، الافتراضي False) — ما إذا كان سيتم تنفيذ نقل الطبقات إلى cpu، لتوفير ذاكرة وحدة معالجة الرسوميات.
  • offload_only_non_sliding (bool، اختياري، القيمة الافتراضية True) — إذا كان offloading هو True، فإن هذا الخيار يحدد ما إذا كان سيتم نقل الطبقات غير المنزلقة فقط (لأن الطبقات المنزلقة عادةً ما تكون صغيرة الحجم، فلا حاجة لنقلها، وتخطيها أسرع).

فئة Static Cache للاستخدام مع torch.compile(model) وtorch.export(). ستفحص config بحثًا عن هيكل ذاكرة مؤقتة هجينة محتمل، وتُهيّئ كل طبقة وفقًا لذلك.

راجع Cache للاطلاع على التفاصيل المتعلقة بالطرق الشائعة التي تنفذها جميع فئات الكاش.

مثال:

>>> from transformers import AutoTokenizer, AutoModelForCausalLM, StaticCache

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")

>>> inputs = tokenizer(text="My name is Llama", return_tensors="pt")

>>> # Prepare a cache class and pass it to model's forward
>>> # Leave empty space for 10 new tokens, which can be used when calling forward iteratively 10 times to generate
>>> max_generated_length = inputs.input_ids.shape[1] + 10
>>> past_key_values = StaticCache(config=model.config, max_cache_len=max_generated_length)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
StaticCache()

فئة transformers.QuantizedCache

< >

( backend: strconfig: PreTrainedConfignbits: int | None = Noneaxis_key: int | None = Noneaxis_value: int | None = Noneq_group_size: int | None = Noneresidual_length: int | None = None )

المعاملات

  • backend (str) — خلفية التكميم (quantization backend) المستخدمة. أحد ("quanto", "hqq", "fp8").
  • config (PreTrainedConfig) — إعدادات النموذج الذي سيُستخدم هذا الكاش (Cache) معه.
  • nbits (int، اختياري، القيمة الافتراضية 4) — عدد البتات للكمّية.
  • axis_key (int، اختياري، القيمة الافتراضية 0) — المحور الذي سيتم عليه تكميم المفاتيح.
  • axis_value (int، اختياري، القيمة الافتراضية 0) — المحور الذي سيتم عليه تكميم القيم.
  • q_group_size (int، اختياري، القيمة الافتراضية 64) — يتم تنفيذ التكميم لكل قناة وفقاً لقيمة q_group_size محددة لكل من المفاتيح والقيم.
  • residual_length (int، اختياري، القيمة الافتراضية 128) — الحد الأقصى لسعة ذاكرة التخزين المؤقت للدقة الأصلية.

مخزن مُكمِّم (Quantizer cache) مماثل لما هو موصوف في ورقة KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache. يتيح هذا المخزن للنموذج توليد تسلسلات أطول دون تخصيص ذاكرة كبيرة للمفاتيح والقيم عبر تطبيق التكميم. يحتوي المخزن على نوعين من التخزين، أحدهما للدقة الأصلية والآخر للمخزن المُكمَّم. يتم تعيين residual length كسعة قصوى للمخزن ذي الدقة الأصلية. عندما يتجاوز الطول السعة القصوى، يُستبعد المخزن ذي الدقة الأصلية ويُحوَّل إلى المخزن المُكمَّم. يتم إجراء التكميم لكل قناة (per-channel) مع تعيين q_group_size لكل من المفاتيح والقيم، على عكس ما تم وصفه في الورقة.

راجع Cache للاطلاع على التفاصيل المتعلقة بالطرق الشائعة التي تنفذها جميع فئات الكاش.

تُهيّك الحُجج الخمسة الأخيرة الخوادم الصحيحة (integer) على مستوى المجموعات. يكمّم خادم fp8 على مستوى المصفوفة (per-tensor) ويرفضها.

فئة transformers.EncoderDecoderCache

< >

( *caches )

المعاملات

  • caches (Iterable) — عادةً ما يكون قابلًا للتكرار بطول 2، ويحتوي على كائنين من Cache، الأول لانتباه الذات (self-attention)، والثاني لانتباه التقاطع (cross-attention). يمكن أن يكون أيضًا، بشكل اختياري، قابلًا للتكرار بطول 1، ويحتوي على tuple[tuple[torch.Tensor]] (يُستخدم عادةً للتوافق مع torch dp و ddp).

فئة أساسية مجردة لجميع ذاكرات التخزين (الكاش) الخاصة بالمشفّرات-المفكّكات. يمكن استخدامها لحمل تركيبات من ذاكرات الانتباه الذاتي وذاكرة الانتباه المتقاطع.

راجع Cache للاطلاع على التفاصيل المتعلقة بالطرق الشائعة التي تنفذها جميع فئات الكاش.

مثال:

>>> from transformers import AutoProcessor, AutoModelForCausalLM, DynamicCache, EncoderDecoderCache

>>> model = AutoModelForCausalLM.from_pretrained("openai/whisper-small")
>>> processor = AutoProcessor.from_pretrained("openai/whisper-small")

>>> inputs = processor(audio=YOUR-AUDIO, return_tensors="pt")

>>> # Prepare cache classes for encoder and decoder and pass it to model's forward
>>> self_attention_cache = DynamicCache(config=self.config)
>>> cross_attention_cache = DynamicCache(config=self.config)
>>> past_key_values = EncoderDecoderCache(self_attention_cache, cross_attention_cache)
>>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True)
>>> outputs.past_key_values # access cache filled with key/values from generation
EncoderDecoderCache()

batch_repeat_interleave

< >

( repeats: int )

كرر الكاش repeats مرات في بُعد الدفعة. يُستخدم في البحث التبايني (على Hub).

batch_select_indices

< >

( indices: Tensor )

احتفظ فقط بـindices في بُعد الدفعة (batch dimension) للكاش. يُستخدم في البحث التبايني (على Hub).

crop

< >

( tokens_to_remove: int )

أزل رموز tokens_to_remove من طبقة التخزين المؤقت الحالية.

get_max_length

< >

( layer_idx: int | None = None )

يعيد أقصى طول للتسلسل (أي السعة القصوى) لكائن التخزين المؤقت

get_seq_length

< >

( layer_idx: int = 0 )

يعيد طول التسلسل للحالات المخزنة مؤقتًا. يمكن تمرير فهرس طبقة بشكل اختياري.

reorder_cache

< >

( beam_idx: LongTensor )

يعيد ترتيب ذاكرة التخزين المؤقت للبحث بالحزمة، بناءً على فهارس الحزم المحددة.

أدوات العلامة المائية

فئة transformers.WatermarkingConfig

< >

( greenlist_ratio: float = 0.25bias: float = 2.0hashing_key: int = 15485863seeding_scheme: str = 'lefthash'context_width: int = 1 )

فئة تحتوي على حُجج توليد العلامة المائية، ويجب تمريرها إلى GenerationConfig أثناء generate. راجع هذا الورق لمزيد من التفاصيل حول الحُجج.

يقبل المفاتيح التالية:

  • greenlist_ratio (float): يُستخدم للتعليم المائي. نسبة الرموز “الخضراء” المستخدمة إلى حجم المفردات. القيمة الافتراضية هي 0.25.
  • bias (float): يُستخدم مع العلامة المائية. هو الانحياز المضاف إلى قيم اللوجيت (logits) للرموز “الخضراء” المحددة. القيمة الافتراضية هي 2.0.
  • hashing_key (int): مفتاح التجزئة المستخدم للتعليم المائي. القيمة الافتراضية هي 15485863 (العدد الأولي المليون).
  • seeding_scheme (str): الخوارزمية المستخدمة للتعليم المائي. تقبل القيم التالية:
    • “lefthash” (الافتراضي): يعتمد اختيار الرموز “green” على الرمز الأخير (الخوارزمية 2 من الورقة البحثية)
    • “selfhash”: يعتمد اختيار الرموز “green” على الرمز الحالي نفسه (الخوارزمية 3 من الورقة البحثية) السلبي في هذا المخطط أنه يأخذ في الاعتبار جميع الرموز التالية المحتملة، وقد يكون أبطأ من “lefthash”.
  • context_width(int): طول السياق للرموز السابقة المستخدمة في التهيئة. كلما زاد طول السياق، أصبحت العلامة المائية أكثر متانة.

__call__

( *args**kwargs )

استدعاء self كدالة.

فئة transformers.WatermarkDetector

< >

( model_config: PreTrainedConfigdevice: strwatermarking_config: typing.Union[ForwardRef('WatermarkingConfig'), dict]ignore_repeated_ngrams: bool = Falsemax_cache_size: int = 128 )

المعاملات

  • model_config (PreTrainedConfig) — إعدادات النموذج التي ستُستخدم للحصول على الحُجج الخاصة بالنموذج المستخدمة أثناء التوليد.
  • device (str) — الجهاز الذي تم استخدامه أثناء توليد النص المُعلَّم.
  • watermarking_config (Union[WatermarkingConfig, Dict]) — نفس إعدادات وحوامل العلامة المائية المستخدمة تمامًا عند توليد النص.
  • ignore_repeated_ngrams (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم احتساب كل ngram فريد مرة واحدة فقط أم لا.
  • max_cache_size (int، اختياري، القيمة الافتراضية 128) — الحد الأقصى للحجم المستخدم لتخزين مؤقت (LRU caching) لخوارزميات البذر/العينة التي تُستدعى لكل رمز.

كاشف للنص المولّد الذي يحمل علامة مائية. يجب تزويد الكاشف بالإعدادات نفسها تمامًا التي تم تقديمها أثناء توليد النص، وذلك لتكرار توليد قائمة العلامة المائية الخضراء وبالتالي اكتشاف العلامة المائية. ويشمل ذلك الجهاز الصحيح الذي تم استخدامه أثناء توليد النص، وحوامل العلامة المائية الصحيحة، وحجم مفردات المُرمِّز الصحيح. استُند الكود إلى المستودع الأصلي.

راجع الورقة البحثية لمزيد من المعلومات.

أمثلة:

>>> 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__

< >

( input_ids: LongTensorz_threshold: float = 3.0return_dict: bool = False ) → WatermarkDetectorOutput or np.ndarray

المعاملات

  • input_ids (torch.LongTensor) — النص المُولَّد المُعلَّم مائيًا. يُنصح بإزالة المُوجِّه (prompt) لأنه قد يؤثر على عملية الكشف.
  • z_threshold (Dict، اختياري، القيمة الافتراضية 3.0) — تغيير هذا العتبة سيغيّر حساسية الكاشف. عتبة z الأعلى تعطي حساسية أقل، والعكس صحيح لعتبة z الأدنى.
  • return_dict (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب إرجاع ~generation.WatermarkDetectorOutput أم لا. إذا لم يكن كذلك، فسيُرجع تنبؤات منطقية،

يعيد

WatermarkDetectorOutput أو np.ndarray

WatermarkDetectorOutput إذا كان return_dict=True وإلا np.ndarray.

ma

فئة transformers.BayesianDetectorConfig

< >

( watermarking_depth: int | None = Nonebase_rate: float = 0.5**kwargs )

المعاملات

  • watermarking_depth (int، اختياري) — عدد طبقات البطولة.
  • base_rate (float، اختياري، القيمة الافتراضية 0.5) — الاحتمال المسبق P(w) لأن يكون النص مُعلَّمًا مائيًا.

هذه فئة الإعدادات المخزنة لإعدادات BayesianDetectorModel. تُستخدم لتوليد نموذج Bayesian Detector وفقًا للحجج المحددة.

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

فئة transformers.BayesianDetectorModel

< >

( config )

المعاملات

  • config (BayesianDetectorConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. إن التهيئة باستخدام ملف الإعداد لا تُحمّل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

مصنّف بايزي لكشف العلامة المائية.

يستخدم هذا الكاشف قاعدة بايز لحساب درجة العلامة المائية، وهي دالة سيجمويد (sigmoid) للوغاريتم الطبيعي لنسبة الاحتمالات اللاحقة P(watermarked|g_values) إلى P(unwatermarked|g_values). يرجى الرجوع إلى القسم الخاص بـ BayesianScore في الورقة البحثية لمزيد من التفاصيل. رابط الورقة البحثية: https://www.nature.com/articles/s41586-024-08025-4

لاحظ أن هذا الكاشف يعمل فقط مع علامات مائية غير مشوهة تعتمد على نظام البطولات (Tournament) باستخدام توزيع g-value من نوع Bernoulli(0.5).

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( g_values: Tensormask: Tensorlabels: typing.Optional[torch.Tensor] = Noneloss_batch_weight = 1return_dict = False )

المعاملات

  • g_values (torch.Tensor من الشكل (batch_size, seq_len, watermarking_depth, ...)) — قيم g (بقيم 0 أو 1)
  • mask — مصفوفة ثنائية الشكل [batch_size, seq_len] تُحدد القيم g التي يجب استخدامها. تُستبعد قيم g التي تكون قيمة القناع الخاصة بها 0.

يحسب التوزيع اللاحق المُعلَّم مائيًا P(watermarked|g_values).

فئة transformers.SynthIDTextWatermarkingConfig

< >

( ngram_len: intkeys: listcontext_history_size: int = 1024sampling_table_seed: int = 0sampling_table_size: int = 65536skip_first_ngram_calls: bool = Falsedebug_mode: bool = False )

المعاملات

  • ngram_len (int) — طول الـ Ngram.
  • keys (list[int]) — تسلسل من مفاتيح العلامة المائية، مفتاح واحد لكل عمق.
  • context_history_size (int، اختياري، القيمة الافتراضية 1024) — حجم المصفوفة (Tensor) المستخدمة لتتبع السياقات التي تم رؤيتها.
  • sampling_table_seed (int، اختياري، القيمة الافتراضية 0) — بذرة عشوائية لتوليد جدول العينة.
  • sampling_table_size (int، اختياري، القيمة الافتراضية 65536) — حجم جدول العينة.
  • skip_first_ngram_calls (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تخطي استدعاءات ngram الأولى.
  • debug_mode (bool، اختياري، القيمة الافتراضية False) — تُعدَّل القيم (Logits) لتصبح موحّدة قبل تطبيق تعديل العلامة المائية. يُستخدم هذا لاختبار التنفيذ.

فئة تحتوي على حُجج توليد العلامة المائية، ويجب تمريرها إلى GenerationConfig أثناء generate. راجع هذا الورق لمزيد من التفاصيل حول الحُجج.

أمثلة:

>>> 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)

فئة transformers.SynthIDTextWatermarkDetector

< >

( detector_module: BayesianDetectorModellogits_processor: SynthIDTextWatermarkLogitsProcessortokenizer: Any )

المعاملات

فئة كاشف علامة SynthID المائية للنص.

يجب تهيئة هذه الفئة باستخدام وحدة الكاشف البايزي المدرّب، راجع سكربت التحقق في examples/synthid_text/detector_training.py على سبيل المثال في التدريب/الحفظ/التحميل لهذه الوحدة الكاشفة. كما تُظهر المجلد حالة استخدام نموذجية لهذا الكاشف.

أمثلة:

>>> 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)

__call__

< >

( tokenized_outputs: Tensor )

أدوات الترجمة

فئة transformers.CompileConfig

< >

( fullgraph: bool = Falsedynamic: bool | None = Nonebackend: str | collections.abc.Callable = 'inductor'mode: str = 'reduce-overhead'options: dict | None = None )

المعاملات

  • fullgraph (bool، اختياري، القيمة الافتراضية False) — إذا كانت القيمة False (الافتراضية)، فسيتم محاولة اكتشاف المناطق القابلة للتجميع التي سيتم تحسينها. أما إذا كانت True، فيُشترط أن يكون بالإمكان التقاط الدالة بأكملها في رسم بياني واحد. وإذا لم يكن ذلك ممكنًا (أي إذا كانت هناك انقطاعات في الرسم البياني)، فسيتم رفع خطأ.
  • dynamic (bool أو None، اختياري) — ما إذا كان يجب محاولة استخدام رسوم بيانية بأشكال ديناميكية.
  • backend (str أو Callable، اختياري، القيمة الافتراضية "inductor") — الخلفية (Backend) المستخدمة.
  • mode (str، اختياري، القيمة الافتراضية "reduce-overhead") — يتحكم في التوازن بين الأداء والتكلفة الإضافية.
  • options (dict، اختياري) — قاموس من الخيارات التي تُمرَّر إلى الخلفية.

فئة تحتوي على الحُجج المتعلقة بسلوك torch.compile عند استخدام التجميع التلقائي في generate. راجع torch.compile لمزيد من التفاصيل حول الحُجج.

أمثلة:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, CompileConfig

>>> tokenizer = AutoTokenizer.from_pretrained('google/gemma-2-2b')
>>> model = AutoModelForCausalLM.from_pretrained('google/gemma-2-2b').cuda()

>>> # Automatic compile configuration, used with static cache
>>> compile_config = CompileConfig(dynamic=True)

>>> # Generation with static cache and compile config
>>> input = tokenizer.encode("Hello there, how", return_tensors="pt").cuda()
>>> output = model.generate(
...     input, do_sample=False, max_new_tokens=300, cache_implementation="static", compile_config=compile_config
... )
>>> output_text = tokenizer.batch_decode(output, skip_special_tokens=True)[0]

__call__

( *args**kwargs )

استدعاء self كدالة.

Update on GitHub