# ميزات التوليد

يدعم واجهة [generate()](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationMixin.generate) بعض الميزات لبناء التطبيقات فوقها.

ستوضح لك هذه الدليل كيفية استخدام هذه الميزات.

## البث

يبدأ Streaming بإرجاع النص فور توليده، فلا يتعين عليك الانتظار لرؤية الاستجابة المولّدة كاملة دفعة واحدة. وهو أمر مهم في التطبيقات الموجهة للمستخدمين لأنه يقلل من زمن الاستجابة المُدرَك ويسمح للمستخدمين بمراقبة تقدم عملية التوليد.

    

> [!TIP]
> تعرف على المزيد حول البث في وثائق [Text Generation Inference](https://huggingface.co/docs/text-generation-inference/en/conceptual/streaming).

أنشئ مثيلًا من [TextStreamer](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer) باستخدام مُجزّئ الرموز. مرّر [TextStreamer](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer) إلى معامل `streamer` في [generate()](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationMixin.generate) لبثّ المخرجات كلمةً تلو الأخرى.

```py
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt")
streamer = TextStreamer(tokenizer)

_ = model.generate(**inputs, streamer=streamer, max_new_tokens=20)
```

يتوافق معامل `streamer` مع أي فئة تتضمن طريقتي [put()](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer.put) و[end()](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer.end). تُستخدم [put()](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer.put) لدفع الرموز الجديدة، بينما تُستخدم [end()](/docs/transformers/main/ar/internal/generation_utils#transformers.TextStreamer.end) للإشارة إلى نهاية التوليد. يمكنك إنشاء فئة streamer خاصة بك طالما أنها تتضمن هاتين الطريقتين، أو يمكنك استخدام فئات streamer الأساسية في Transformers.

## الوسم المائي

تُعدّ تقنية العلامة المائية مفيدة للكشف عما إذا كان النص مُولَّدًا آليًا. في مكتبة Transformers، يقوم [استراتيجية العلامة المائية](https://hf.co/papers/2306.04634) بتلوين مجموعة فرعية من الرموز (tokens) باللون الأخضر بشكل عشوائي. عند توليد الرموز الخضراء، يُضاف انحياز صغير إلى قيم logits الخاصة بها، مما يزيد من احتمالية توليدها. يمكنك اكتشاف النص المولَّد آليًا من خلال مقارنة نسبة الرموز الخضراء في النص بالنسب المعتادة للرموز الخضراء الموجودة في النصوص التي يكتبها البشر.

تُوفّر ميزة العلامة المائية لأي نموذج توليدي في Transformers دون الحاجة إلى نموذج تصنيف إضافي للكشف عن النص المُعلَّم.

أنشئ [WatermarkingConfig](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkingConfig) بقيمة الانحياز التي ستُضاف إلى القيم اللوجستية (logits) وخوارزمية العلامة المائية. يستخدم المثال أدناه خوارزمية `"selfhash"`، حيث يعتمد اختيار الرموز الخضراء على الرمز الحالي فقط. مرّر [WatermarkingConfig](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkingConfig) إلى [generate()](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationMixin.generate).

> [!TIP]
> تكتشف فئة [WatermarkDetector](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkDetector) نسبة الرموز الخضراء في النص المولّد، ولهذا يُوصى بإزالة نص الاستدعاء إذا كان أطول بكثير من النص المولّد. كما يمكن أن يكون للتعبئة تأثير على [WatermarkDetector](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkDetector).

```py
from transformers import AutoTokenizer, AutoModelForCausalLM, WatermarkDetector, WatermarkingConfig

model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
tokenizer = AutoTokenizer.from_pretrained("openai-community/gpt2")
tokenizer.pad_token_id = tokenizer.eos_token_id
tokenizer.padding_side = "left"

inputs = tokenizer(["This is the beginning of a long story", "Alice and Bob are"], padding=True, return_tensors="pt")
input_len = inputs["input_ids"].shape[-1]

watermarking_config = WatermarkingConfig(bias=2.5, seeding_scheme="selfhash")
out = model.generate(**inputs, watermarking_config=watermarking_config, do_sample=False, max_length=20)
```

أنشئ مثيلًا من [WatermarkDetector](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkDetector) ومرر مخرجات النموذج إليه للكشف عما إذا كان النص مولّدًا آليًا. يجب أن يكون [WatermarkDetector](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkDetector) مطابقًا لـ [WatermarkingConfig](/docs/transformers/main/ar/internal/generation_utils#transformers.WatermarkingConfig) المستخدم أثناء التوليد.

```py
detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config)
detection_out = detector(out, return_dict=True)
detection_out.prediction
array([True, True])
```

