# Reformer

## نظرة عامة

قُدِّم نموذج Reformer في ورقة [Reformer: The Efficient Transformer](https://huggingface.co/papers/2001.04451) التي كتبها Nikita Kitaev وŁukasz Kaiser وAnselm Levskaya.

المستخلص من الورقة البحثية هو كالتالي:

*تحقق نماذج Transformer الكبيرة بشكل روتيني من نتائج متقدمة على عدد من المهام، لكن تدريب هذه النماذج قد يكون مكلفًا بشكل مفرط، خاصةً عند التعامل مع تسلسلات طويلة. نُقدّم هنا تقنيتين لتحسين كفاءة Transformers. أولاً، نستبدل الانتباه القائم على الضرب النقطي (dot-product attention) بآخر يستخدم التجزئة الحساسة للموقع (locality-sensitive hashing)، مما يغيّر تعقيده من O(L^2) إلى O(Llog(L))، حيث L هو طول التسلسل. علاوة على ذلك، نستخدم طبقات متبقية قابلة للعكس (reversible residual layers) بدلاً من الطبقات المتبقية القياسية، مما يتيح تخزين التفعيلات (activations) مرة واحدة فقط في عملية التدريب بدلاً من N مرات، حيث N هو عدد الطبقات. النموذج الناتج، Reformer، يُظهر أداءً مماثلاً لنماذج Transformer مع كفاءة أعلى بكثير في استخدام الذاكرة وسرعة أكبر بكثير على التسلسلات الطويلة.*

تمت مساهمة هذا النموذج من قِبل [patrickvonplaten](https://huggingface.co/patrickvonplaten). يمكن العثور على كود المؤلفين [هنا](https://github.com/google/trax/tree/master/trax/models/reformer).

## نصائح للاستخدام

- لا يعمل **Reformer** مع *torch.nn.DataParallel* بسبب خطأ برمجي في PyTorch، راجع [issue #36035](https://github.com/pytorch/pytorch/issues/36035).
- استخدم ترميز المواقع المحورية (انظر أدناه لمزيد من التفاصيل). إنها آلية لتجنب امتلاك مصفوفة ترميز مواقع ضخمة (عندما تكون طول التسلسل كبيرًا جدًا) من خلال تحليلها إلى مصفوفات أصغر.
- استبدل الانتباه التقليدي بانتباه LSH (التجزئة الحساسة موضعياً) (انظر أدناه لمزيد من التفاصيل). إنها تقنية لتجنب حساب حاصل الضرب الكامل للاستعلام-المفتاح في طبقات الانتباه.
- تجنّب تخزين النتائج الوسيطة لكل طبقة من خلال استخدام طبقات محوّلة قابلة للعكس للحصول عليها أثناء المرور العكسي (حيث إن طرح بقايا المتبقي من مدخل الطبقة التالية يعيد استرجاعها) أو بإعادة حسابها للنتائج داخل طبقة معينة (وهو أقل كفاءة من تخزينها لكنه يوفر الذاكرة).
- احسب عمليات التغذية الأمامية على شكل مجموعات وليس على الدفعة بأكملها.

### ترميز الموضع المحوري

تم تنفيذ ترميزات المواقع المحورية (Axial Positional Encodings) لأول مرة في مكتبة [trax](https://github.com/google/trax/blob/4d99ad4965bab1deba227539758d59f0df0fef48/trax/layers/research/position_encodings.py#L29) التابعة لشركة Google، وطوّرها مؤلفو ورقة هذا النموذج. في النماذج التي تتعامل مع تسلسلات إدخال طويلة جداً، تقوم ترميزات معرّفات المواقع التقليدية بتخزين متجه تضمين (embeddings) بحجم $d$ وهو `config.hidden_size` لكل موقع $i, \ldots, n_s$، حيث $n_s$ هو `config.max_embedding_size`. وهذا يعني أن وجود طول تسلسل $n_s = 2^{19} \approx 0.5M$ وحجم `config.hidden_size` يساوي $d = 2^{10} \approx 1000$ سيؤدي إلى مصفوفة ترميز مواقع:

$$X_{i,j}, \text{ حيث } i \in \left[1,\ldots, d\right] \text{ و } j \in \left[1,\ldots, n_s\right]$$

الذي يحتوي وحده على أكثر من 500 مليون معامل يجب تخزينها. تفكك الترميزات الموضعية المحورية $X_{i,j}$ إلى مصفوفتين:

$$X^{1}_{i,j}, \text{ حيث } i \in \left[1,\ldots, d^1\right] \text{ و } j \in \left[1,\ldots, n_s^1\right]$$

و

$$X^{2}_{i,j}, \text{ حيث } i \in \left[1,\ldots, d^2\right] \text{ و } j \in \left[1,\ldots, n_s^2\right]$$

مع:

$$d = d^1 + d^2 \text{ and } n_s = n_s^1 \times n_s^2 .$$

لذلك، ينطبق ما يلي:

$$X_{i,j} = \begin{cases} X^{1}_{i, k}, & \text{if }\ i < d^1 \text{ with } k = j \mod n_s^1 \\ X^{2}_{i - d^1, l}, & \text{if } i \ge d^1 \text{ with } l = \lfloor\frac{j}{n_s^1}\rfloor \end{cases}$$

بحدسنا، يعني هذا أن متجه تضمين الموضع $x_j \in \mathbb{R}^{d}$ أصبح الآن تركيبًا لمتجهَي تضمين مفرَّضَين: $x^1_{k, l} + x^2_{l, k}$، حيث يتم تفكيك البُعد $j$ الخاص بـ `config.max_embedding_size` إلى $k \text{ and } l$. يضمن هذا التصميم أن يكون كل متجه تضمين موضع $x_j$ فريدًا.

باستخدام المثال أعلاه مرة أخرى، يمكن لتشفير المواقع المحورية بـ $d^1 = 2^9, d^2 = 2^9, n_s^1 = 2^9, n_s^2 = 2^{10}$ أن يقلل عدد المعاملات بشكل كبير من 500 000 000 إلى $2^{18} + 2^{19} \approx 780 000$ معامل، مما يعني انخفاضاً بنسبة 85% في استهلاك الذاكرة.

عملياً، يُضبط المعامل `config.axial_pos_embds_dim` على مجموعة مرتبة $(d^1, d^2)$ يجب أن يكون مجموعها مساوياً لـ `config.hidden_size`، ويُضبط `config.axial_pos_shape` على مجموعة مرتبة $(n_s^1, n_s^2)$ يجب أن يكون حاصل ضربها مساوياً لـ `config.max_embedding_size`، والذي يجب أن يكون أثناء التدريب مساوياً لـ *طول التسلسل* الخاص بـ `input_ids`.

### انتباه ذاتي LSH

In Locality sensitive hashing (LSH) self attention the key and query projection weights are tied. Therefore, the key query embedding vectors are also tied. LSH self attention uses the locality sensitive hashing mechanism proposed in [Practical and Optimal LSH for Angular Distance](https://huggingface.co/papers/1509.02897) to assign each of the tied key query embedding vectors to one of `config.num_buckets` possible buckets. The premise is that the more "similar" key query embedding vectors (in terms of *cosine similarity*) are to each other, the more likely they are assigned to the same bucket.

يمكن تحسين دقة آلية LSH عن طريق زيادة `config.num_hashes` أو مباشرةً الحجة `num_hashes` للدالة الأمامية، بحيث يصبح ناتج الانتباه الذاتي لـ LSH أقرب إلى ناتج الانتباه الذاتي الكامل "العادي". ثم تُرتَّب الدلاء وتُقسَّم إلى مقاطع متجهات تضمين الاستعلام والمفتاح، حيث يكون طول كل مقطع `config.lsh_chunk_length`. لكل مقطع، تنتبه متجهات تضمين الاستعلام إلى متجهات المفاتيح الخاصة به (المرتبطة ذاتياً) وإلى متجهات تضمين المفاتيح للمقاطع المجاورة السابقة بعدد `config.lsh_num_chunks_before` والمقاطع المجاورة التالية بعدد `config.lsh_num_chunks_after`.

لمزيد من المعلومات، راجع [الورقة الأصلية](https://huggingface.co/papers/2001.04451) أو هذا [المقال الرائع](https://www.pragmatic.ml/reformer-deep-dive/).

لاحظ أن `config.num_buckets` يمكن أيضًا تحليله إلى قائمة $(n_{\text{buckets}}^1, n_{\text{buckets}}^2)$. بهذه الطريقة، بدلاً من إسناد متجهات تضمين مفاتيح الاستعلام إلى أحد $(1,\ldots, n_{\text{buckets}})$، يتم إسنادها إلى أحد $(1-1,\ldots, n_{\text{buckets}}^1-1, \ldots, 1-n_{\text{buckets}}^2, \ldots, n_{\text{buckets}}^1-n_{\text{buckets}}^2)). وهذا أمر بالغ الأهمية للتسلسلات الطويلة جدًا لتوفير الذاكرة.

عند تدريب نموذج من الصفر، يُوصى بإبقاء `config.num_buckets=None`، بحيث يتم حساب قيمة جيدة لـ `num_buckets` على الفور اعتمادًا على طول التسلسل. ثم تُحفظ هذه القيمة تلقائيًا في الإعدادات وينبغي إعادة استخدامها للاستدلال.

باستخدام الانتباه الذاتي LSH، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب المصفوفات للاستعلام-المفتاح من $\mathcal{O}(n_s \times n_s)$ إلى $\mathcal{O}(n_s \times \log(n_s))$، وهو ما يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج transformer، حيث $n_s$ هو طول التسلسل.

### الانتباه الذاتي المحلي

الانتباه الذاتي المحلي هو في الأساس طبقة انتباه ذاتي «عادية» مع إسقاطات للمفتاح والاستعلام والقيمة، لكنها مقسمة بحيث أن متجهات تضمين الاستعلام في كل مقطع بطول `config.local_chunk_length` تنتبه فقط إلى متجهات تضمين المفتاح في مقطعها وإلى متجهات تضمين المفتاح في `config.local_num_chunks_before` المقاطع المجاورة السابقة و`config.local_num_chunks_after` المقاطع المجاورة التالية.

باستخدام الانتباه الذاتي المحلي، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب المصفوفات للاستعلام-المفتاح من $\mathcal{O}(n_s \times n_s)$ إلى $\mathcal{O}(n_s \times \log(n_s))$، وهو ما يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج الترانسفورمر، حيث $n_s$ هو طول التسلسل.

### التدريب

أثناء التدريب، يجب التأكد من أن طول التسلسل مضبوط على قيمة يمكن قسمة على المضاعف المشترك الأصغر لـ `config.lsh_chunk_length` و `config.local_chunk_length`، وأن معاملات الترميزات الموضعية المحورية مضبوطة بشكل صحيح كما هو موضح أعلاه. نموذج Reformer فعّال جداً من حيث الذاكرة، مما يتيح تدريب النموذج بسهولة على تسلسلات تصل إلى 64000 رمز.

للتدريب، يجب استخدام [ReformerModelWithLMHead](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerModelWithLMHead) على النحو التالي:

```python
input_ids = tokenizer.encode("This is a sentence from the training data", return_tensors="pt").to(model.device)
loss = model(input_ids, labels=input_ids)[0]
```

## الموارد

- [دليل مهمة تصنيف النصوص](../tasks/sequence_classification)
- [دليل مهمة الإجابة عن الأسئلة](../tasks/question_answering)
- [دليل مهمة نمذجة اللغة السببية](../tasks/language_modeling)
- [دليل مهمة نمذجة اللغة المقنّعة](../tasks/masked_language_modeling)

## ReformerConfig[[transformers.ReformerConfig]]

#### transformers.ReformerConfig[[transformers.ReformerConfig]]

```python
transformers.ReformerConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, attention_head_size: int = 64, attn_layers: list[str] | tuple[str, ...] = ('local', 'lsh', 'local', 'lsh', 'local', 'lsh'), axial_norm_std: float = 1.0, axial_pos_embds: bool = True, axial_pos_shape: list[int] | tuple[int, ...] = (64, 64), axial_pos_embds_dim: list[int] | tuple[int, ...] = (64, 192), chunk_size_lm_head: int = 0, eos_token_id: int | list[int] | None = 2, feed_forward_size: int = 512, hash_seed: int | None = None, hidden_act: str = 'relu', hidden_dropout_prob: float | int = 0.05, hidden_size: int = 256, initializer_range: float = 0.02, is_decoder: bool = False, layer_norm_eps: float = 1e-12, local_num_chunks_before: int = 1, local_num_chunks_after: int = 0, local_attention_probs_dropout_prob: float | int = 0.05, local_attn_chunk_length: int = 64, lsh_attn_chunk_length: int | None = 64, lsh_attention_probs_dropout_prob: float | None = 0.0, lsh_num_chunks_before: int | None = 1, lsh_num_chunks_after: int | None = 0, max_position_embeddings: int = 4096, num_attention_heads: int = 12, num_buckets: int | list[int] | None = None, num_hashes: int = 1, vocab_size: int = 320, tie_word_embeddings: bool = False, use_cache: bool = True, classifier_dropout: float | int | None = None, bos_token_id: int | None = None, pad_token_id: int | None = 0)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/configuration_reformer.py#L25)

**المعاملات:**

attention_head_size (`int`، *اختياري*، القيمة الافتراضية 64) : بُعد متجهات المفتاح والاستعلام والقيمة المُسقطَة

attn_layers (`list[str]`، *اختياري*، القيمة الافتراضية `["local", "lsh", "local", "lsh", "local", "lsh"]`) : قائمة بأنواع طبقات الانتباه بترتيب تصاعدي. يمكن الاختيار بين طبقة LSHSelfAttention (`"lsh"`) وطبقة LocalSelfAttention (`"local"`). لمزيد من المعلومات حول طبقة LSHSelfAttention، راجع [انتباه LSH الذاتي](reformer#lsh-self-attention). لمزيد من المعلومات حول طبقة LocalSelfAttention، راجع [الانتباه الذاتي المحلي](reformer#local-self-attention).

axial_norm_std (`float`، *اختياري*، القيمة الافتراضية 1.0) : الانحراف المعياري لـ normal_initializer المستخدم لتصفيفات أوزار الترميزات الموضعية المحورية.

axial_pos_embds (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام تضمينات المواقع المحورية أم لا. لمزيد من المعلومات حول كيفية عمل تضمينات المواقع المحورية، راجع [تضمينات المواقع المحورية](reformer#axial-positional-encodings).

axial_pos_shape (`list[int]`، *اختياري*، القيمة الافتراضية `[64, 64]`) : أبعاد المواقع لتشفيرات المواقع المحورية. أثناء التدريب، يجب أن يكون حاصل ضرب أبعاد المواقع مساوياً لطول التسلسل. لمزيد من المعلومات حول كيفية عمل تضمينات المواقع المحورية، راجع [تشفيرات المواقع المحورية](reformer#axial-positional-encodings).

axial_pos_embds_dim (`list[int]`، *اختياري*، القيمة الافتراضية `[64, 192]`) : أبعاد التضمين لتشفيرات المواقع المحورية. يجب أن يكون مجموع أبعاد التضمين مساويًا لحجم الخفاء. لمزيد من المعلومات حول كيفية عمل تضمينات المواقع المحورية، راجع [تشفيرات المواقع المحورية](reformer#axial-positional-encodings).

chunk_size_lm_head (`int`، *اختياري*، القيمة الافتراضية 0) : حجم الدفعة (chunk size) لطبقة الرأس الأمامية (feed forward) النهائية لنموذج اللغة. حجم دفعة يساوي 0 يعني أن طبقة التغذية الأمامية غير مقسمة إلى دفعات. حجم دفعة يساوي n يعني أن طبقة التغذية الأمامية تعالج n < sequence_length من التضمينات (embeddings) في كل مرة. لمزيد من المعلومات حول تقسيم طبقة التغذية الأمامية إلى دفعات، راجع [كيف يعمل تقسيم طبقة التغذية الأمامية إلى دفعات؟](../glossary#feed-forward-chunking).

eos_token_id (`Union[int, list[int]]`، *اختياري*، القيمة الافتراضية `2`) : معرّف الرمز المستخدم لنهاية البث في المفردات.

feed_forward_size (`int`، *اختياري*، القيمة الافتراضية 512) : بُعد طبقة feed_forward في كتلة الانتباه المتبقي.

hash_seed (`int`, *اختياري*) : البذرة التي يمكن استخدامها لجعل التجزئة الحساسة المحلية في `LSHSelfAttention` حتمية. يجب ضبط هذا الإعداد لأغراض الاختبار فقط. أما لأغراض التقييم والتدريب، فيجب ترك `hash_seed` كـ `None` لضمان دوران عشوائي بالكامل في مخطط التجزئة الحساسة المحلية.

hidden_act (`str`، *اختياري*، الافتراضي هو `relu`) : دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، `"gelu"`، `"relu"`، `"silu"`، وغيرها.

hidden_dropout_prob (`Union[float, int]`، *اختياري*، القيمة الافتراضية `0.05`) : احتمال الإسقاط (dropout) لجميع الطبقات المتصلة بالكامل في التضمينات (embeddings) والمشفّر (encoder) والمجمّع (pooler).

hidden_size (`int`، *اختياري*، القيمة الافتراضية `256`) : بُعد التمثيلات المخفية.

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

is_decoder (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان النموذج يُستخدم كمُفكِّك أم لا. إذا كان `False`، يُستخدم النموذج كمُشفِّر.

layer_norm_eps (`float`، *اختياري*، القيمة الافتراضية `1e-12`) : قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة.

local_num_chunks_before (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الكتل المجاورة السابقة التي يجب الانتباه إليها في طبقة `LocalSelfAttention` لنفسها.

local_num_chunks_after (`int`، *اختياري*، القيمة الافتراضية 0) : عدد الكتل المجاورة التالية التي يجب الانتباه إليها في طبقة `LocalSelfAttention` بالإضافة إلى الكتلة نفسها.

local_attention_probs_dropout_prob (`float`، *اختياري*، القيمة الافتراضية 0.1) : نسبة الإسقاط (dropout) لاحتمالات الانتباه في `LocalSelfAttention`.

local_attn_chunk_length (`int`، *اختياري*، القيمة الافتراضية 64) : طول كل جزء في طبقات الانتباه المحلي.

lsh_attn_chunk_length (`int`, *اختياري*, القيمة الافتراضية 64) : طول المقطع الذي ينتبه إلى نفسه في `LSHSelfAttention`. يقلل التقطيع من تعقيد الذاكرة من طول التسلسل مضروبًا في طول التسلسل (الانتباه الذاتي) إلى طول المقطع مضروبًا في طول المقطع مضروبًا في طول التسلسل مقسومًا على طول المقطع (الانتباه الذاتي المقطّع).

lsh_attention_probs_dropout_prob (`float`، *اختياري*، القيمة الافتراضية 0.1) : نسبة الإسقاط (dropout) لاحتمالات الانتباه في `LSHSelfAttention`.

lsh_num_chunks_before (`int`، *اختياري*، القيمة الافتراضية 1) : عدد الكتل المجاورة السابقة التي يجب الانتباه إليها في طبقة `LSHSelfAttention` لنفسها.

lsh_num_chunks_after (`int`, *اختياري*، القيمة الافتراضية 0) : عدد الكتل المجاورة التالية التي يجب الانتباه إليها في طبقة `LSHSelfAttention` لنفسها.

max_position_embeddings (`int`، *اختياري*، القيمة الافتراضية `4096`) : الحد الأقصى لطول التسلسل الذي قد يُستخدم به هذا النموذج على الإطلاق.

num_attention_heads (`int`، *اختياري*، القيمة الافتراضية `12`) : عدد رؤوس الانتباه في كل طبقة انتباه داخل مُفكِّك Transformer.

num_buckets (`int` أو `list[int]`، *اختياري*) : عدد الدلاء التي يمكن "تجزئة" متجهات الاستعلام الرئيسية فيها باستخدام مخطط التجزئة الحساسة للموقع. يتم تجزئة كل متجه استعلام رئيسي في تجزئة ضمن `1, ..., num_buckets`. يمكن أيضًا تحليل عدد الدلاء إلى قائمة لتحسين تعقيد الذاكرة. في هذه الحالة، يتم تجزئة كل متجه استعلام رئيسي في تجزئة ضمن `1-1, 1-2, ..., num_buckets[0]-1, ..., num_buckets[0]-num_buckets[1]` إذا تم تحليل `num_buckets` إلى عاملين. يجب أن يساوي عدد الدلاء (أو حاصل ضرب العوامل) تقريبًا طول التسلسل / lsh_chunk_length. إذا لم يتم تعيين `num_buckets`، يتم حساب قيمة جيدة على الفور.

num_hashes (`int`، *اختياري*، القيمة الافتراضية 1) : عدد جولات التجزئة (مثل عدد الدورانات العشوائية) في مخطط التجزئة الحساسة للموقع. كلما زاد `num_hashes`، أصبحت `LSHSelfAttention` أكثر دقة، لكن عملية التجزئة تصبح أكثر استهلاكًا للذاكرة والوقت.

vocab_size (`int`، *اختياري*، القيمة الافتراضية `320`) : حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطة `input_ids`.

tie_word_embeddings (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب ربط ترميزات الأوزان وفقاً لخريطة `tied_weights_keys` الخاصة بالنموذج.

use_cache (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان `config.is_decoder=True` أو عندما يكون النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.

classifier_dropout (`Union[float, int]`، *اختياري*) : نسبة dropout للمصنّف.

bos_token_id (`int`, *اختياري*) : معرّف الرمز المستخدم لبدء البث في المفردات.

pad_token_id (`int`، *اختياري*، القيمة الافتراضية `0`) : معرّف الرمز المستخدم للتعبئة في المفردات.

هذه فئة الإعدادات (configuration class) لتخزين إعدادات نموذج ReformerModel. تُستخدم لاستحداث نموذج Reformer وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ [google/reformer-crime-and-punishment](https://huggingface.co/google/reformer-crime-and-punishment)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

أمثلة:

```python
>>> from transformers import ReformerConfig, ReformerModel

>>> # Initializing a Reformer configuration
>>> configuration = ReformerConfig()

>>> # Initializing a Reformer model (with random weights)
>>> model = ReformerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## ReformerTokenizer[[transformers.ReformerTokenizer]]

#### transformers.ReformerTokenizer[[transformers.ReformerTokenizer]]

```python
transformers.ReformerTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, eos_token: str = '</s>', unk_token: str = '<unk>', _spm_precompiled_charsmap: str | None = None, additional_special_tokens: list | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/tokenization_reformer.py#L31)

**المعاملات:**

vocab_file (`str`) : ملف [SentencePiece](https://github.com/google/sentencepiece) (يحمل عادةً امتداد *.spm*) يحتوي على المفردات اللازمة لإنشاء مُجزِّئ.

eos_token (`str`، *اختياري*، القيمة الافتراضية `"</s>"`) : رمز نهاية التسلسل. عند بناء تسلسل باستخدام الرموز الخاصة، هذا ليس الرمز المستخدم لنهاية التسلسل. الرمز المستخدم هو `sep_token`.

unk_token (`str`، *اختياري*، القيمة الافتراضية `"<unk>"`) : رمز المجهول. الرمز غير الموجود في قاموس الكلمات لا يمكن تحويله إلى معرّف، لذا يُعيَّن هذا الرمز بدلاً منه.

pad_token (`str`، *اختياري*، القيمة الافتراضية هي `"<pad>"`) : الرمز المستخدم للتعبئة، على سبيل المثال عند تجميع تسلسلات ذات أطوال مختلفة.

additional_special_tokens (`list[str]`، *اختياري*) : رموز خاصة إضافية يستخدمها مُجزِّئ النص.

vocab (`str` أو `dict[str, int]`، *اختياري*) : قاموس مفردات مخصص. إذا لم يُقدَّم، يتم تحميل المفردات من `vocab_file`.

merges (`str` أو `list[str]`، *اختياري*) : قائمة دمج مخصصة. إذا لم تُقدَّم، يتم تحميل عمليات الدمج من `vocab_file`.

أنشئ مُرمِّز Reformer (مدعوم بمكتبة tokenizers من HuggingFace). مبني على [BPE](https://huggingface.co/docs/tokenizers/python/latest/components.html?highlight=bpe#models).

يرث هذا المُجزِّئ من [TokenizersBackend](/docs/transformers/main/ar/main_classes/tokenizer#transformers.TokenizersBackend) التي تحتوي على معظم الدوال الرئيسية. ينبغي على المستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الدوال.

#### save_vocabulary[[transformers.ReformerTokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory: str, filename_prefix: str | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/tokenization_utils_tokenizers.py#L546)

## ReformerModel[[transformers.ReformerModel]]

#### transformers.ReformerModel[[transformers.ReformerModel]]

```python
transformers.ReformerModel(config: ReformerConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L1931)

**المعاملات:**

config ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Reformer الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.ReformerModel.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, past_buckets_states: transformers.models.reformer.modeling_reformer.ReformerDynamicCache | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L1951)

**المعاملات:**

input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`) : Indices of input sequence tokens in the vocabulary. During training the input_ids sequence_length has to be a multiple of the relevant model's chunk lengths (lsh's, local's or both). During evaluation, the indices are automatically padded to be a multiple of the chunk length.  Indices can be obtained using [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). See [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) and [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) for details.  [What are input IDs?](../glossary#input-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

position_ids (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

num_hashes (`int`, *اختياري*) : عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. تعيين هذا الحجة يلغي الافتراضي المعرّف في `config.num_hashes`. لمزيد من المعلومات، راجع `num_hashes` في [ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig).

past_buckets_states (`ReformerDynamicCache`، *اختياري*) : قائمة من `tuple(torch.LongTensor, torch.Tensor` بطول `config.n_layers`، حيث يكون العنصر الأول هو *buckets* السابقة من الشكل `(batch_size, num_heads, num_hashes, sequence_length)`) والعنصر الثاني هو *hidden_states* السابقة من الشكل `(batch_size, sequence_length, hidden_size)`). يحتوي على حالات مخفية وحاويات محسوبة مسبقًا (مهم فقط لـ LSH Self-Attention). يمكن استخدامه لتسريع فك الترميز التسلسلي.

use_cache (`bool`، *اختياري*) : إذا تم ضبطه على `True`، تُعاد حالات المفاتيح والقيم `past_key_values` ويمكن استخدامها لتسريع فك الترميز (انظر `past_key_values`).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** `ReformerModelOutput` أو `tuple(torch.Tensor)`

`ReformerModelOutput` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعدادات ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) والمدخلات.

تتجاوز طريقة [ReformerModel](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerModel) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

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

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, num_predict, hidden_size)`) -- تسلسل حالات الخفاء في الطبقة الأخيرة من النموذج.

  يتوافق `num_predict` مع `target_mapping.shape[1]`. إذا كان `target_mapping` هو `None`، فإن `num_predict` يتوافق مع `sequence_length`.
- **past_buckets_states** (`list[tuple(torch.LongTensor, torch.Tensor)]`، *اختياري*، يُعاد عند تمرير `use_cache=True` أو عند `config.use_cache=True`) -- قائمة من `tuple(torch.LongTensor, torch.Tensor` بطول `config.n_layers`، حيث يكون العنصر الأول هو *buckets* السابقة من الشكل `(batch_size, num_heads, num_hashes, sequence_length)`) والعنصر الثاني هو *hidden_states* السابقة من الشكل `(batch_size, sequence_length, hidden_size)`).

  تحتوي على دلاء (buckets) وحالات مخفية (hidden-states) محسوبة مسبقاً يمكن استخدامها (انظر مدخل `past_buckets_states`) لتسريع فك الترميز التسلسلي.
- **hidden_states** (`tuple[torch.Tensor]`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة (Tuple) من `torch.Tensor` (واحدة لكل من مخرجات الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لكل من مخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple[torch.Tensor]`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

## ReformerModelWithLMHead[[transformers.ReformerModelWithLMHead]]

#### transformers.ReformerModelWithLMHead[[transformers.ReformerModelWithLMHead]]

```python
transformers.ReformerModelWithLMHead(config: ReformerConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2150)

**المعاملات:**

config ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Reformer مع رأس `language modeling` في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.ReformerModelWithLMHead.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, past_buckets_states: list[tuple[torch.Tensor]] | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, labels: typing.Optional[torch.Tensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2176)

**المعاملات:**

input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`) : Indices of input sequence tokens in the vocabulary. During training the input_ids sequence_length has to be a multiple of the relevant model's chunk lengths (lsh's, local's or both). During evaluation, the indices are automatically padded to be a multiple of the chunk length.  Indices can be obtained using [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). See [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) and [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) for details.  [What are input IDs?](../glossary#input-ids)

position_ids (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

num_hashes (`int`, *اختياري*) : عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. تعيين هذا الحجة يلغي الافتراضي المعرّف في `config.num_hashes`. لمزيد من المعلومات، راجع `num_hashes` في [ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig).

past_buckets_states (`list[tuple(torch.LongTensor, torch.Tensor)]`، *اختياري*) : قائمة من `tuple(torch.LongTensor, torch.Tensor` بطول `config.n_layers`، حيث يكون العنصر الأول هو *buckets* السابقة من الشكل `(batch_size, num_heads, num_hashes, sequence_length)`) والعنصر الثاني هو *hidden_states* السابقة من الشكل `(batch_size, sequence_length, hidden_size)`). يحتوي على حالات مخفية ودلاء محسوبة مسبقًا (مهم فقط لـ LSH Self-Attention). يمكن استخدامه لتسريع فك الترميز التسلسلي.

use_cache (`bool`، *اختياري*) : إذا تم ضبطه على `True`، تُعاد حالات المفاتيح والقيم `past_key_values` ويمكن استخدامها لتسريع فك الترميز (انظر `past_key_values`).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

labels (`torch.LongTensor` من الشكل `(batch_size,)`، *اختياري*) : تسميات لحساب خسارة تصنيف/انحدار التسلسل. يجب أن تكون الفهارس ضمن `[-100, 0, ..., config.vocab_size - 1]`. يتم تجاهل (إخفاء) جميع التسميات المضبوطة على `-100`، ولا تُحسب الخسارة إلا للتسميات ضمن `[0, ..., config.vocab_size]`

logits_to_keep (`Union[int, torch.Tensor]`، *اختياري*، القيمة الافتراضية `0`) : إذا كان `int`، يتم حساب القيم اللوجستية (logits) لآخر `logits_to_keep` رموز. إذا كانت `0`، يتم حساب القيم اللوجستية لجميع `input_ids` (حالة خاصة). لا تكون قيم اللوجستيات للرمز الأخير فقط ضرورية للتوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة، وهو ما يصبح ذا أهمية كبيرة للترتيبات الطويلة أو لحجم المفردات الكبير. إذا كان `torch.Tensor`، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول الترتيب. وهذا مفيد عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول الترتيب).

**يعيد:** [CausalLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.CausalLMOutput) أو `tuple(torch.Tensor)`

[CausalLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.CausalLMOutput) أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) والمدخلات.

تتجاوز طريقة [ReformerModelWithLMHead](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerModelWithLMHead) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

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

- **loss** (`torch.Tensor` من الشكل `(1,)`، *اختياري*، يُعاد عند توفير `labels`) -- خسارة نمذجة اللغة (لتوقع الرمز التالي).
- **logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length, config.vocab_size)`) -- درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
>>> import torch
>>> from transformers import AutoTokenizer, ReformerModelWithLMHead

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerModelWithLMHead.from_pretrained("google/reformer-crime-and-punishment")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> loss = outputs.loss
>>> logits = outputs.logits
```

## ReformerForMaskedLM[[transformers.ReformerForMaskedLM]]

#### transformers.ReformerForMaskedLM[[transformers.ReformerForMaskedLM]]

```python
transformers.ReformerForMaskedLM(config: ReformerConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2287)

**المعاملات:**

config ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Reformer مع رأس `language modeling` في الأعلى."

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.ReformerForMaskedLM.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, labels: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2307)

**المعاملات:**

input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`) : Indices of input sequence tokens in the vocabulary. During training the input_ids sequence_length has to be a multiple of the relevant model's chunk lengths (lsh's, local's or both). During evaluation, the indices are automatically padded to be a multiple of the chunk length.  Indices can be obtained using [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). See [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) and [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) for details.  [What are input IDs?](../glossary#input-ids)

position_ids (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

num_hashes (`int`, *اختياري*) : عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. تعيين هذا الحجة يلغي الافتراضي المعرّف في `config.num_hashes`. لمزيد من المعلومات، راجع `num_hashes` في [ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig).

labels (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : تسميات لحساب خسارة نمذجة اللغة المقنّعة. يجب أن تكون الفهارس ضمن `[-100, 0, ..., config.vocab_size]` (انظر `input_ids` docstring) يتم تجاهل الرموز التي تكون فهارسها مضبوطة على `-100` (مقنّعة)، ولا تُحسب الخسارة إلا للرموز التي تحمل تسميات    يستخدم هذا المثال نقطة تفتيش وهمية لأننا لا نملك أي نموذج مُدرَّب مسبقًا متاحًا لمهمة نمذجة اللغة المقنّعة مع بنية Reformer.

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [MaskedLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.MaskedLMOutput) أو `tuple(torch.Tensor)`

[MaskedLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.MaskedLMOutput) أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) والمدخلات.

تتجاوز طريقة [ReformerForMaskedLM](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerForMaskedLM) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

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

- **loss** (`torch.Tensor` من الشكل `(1,)`، *اختياري*، يُعاد عند توفير `labels`) -- خسارة نمذجة اللغة المقنّعة (MLM).
- **logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length, config.vocab_size)`) -- درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForMaskedLM

>>> tokenizer = AutoTokenizer.from_pretrained("hf-internal-testing/tiny-random-reformer")
>>> model = ReformerForMaskedLM.from_pretrained("hf-internal-testing/tiny-random-reformer")

>>> # add mask_token
>>> tokenizer.add_special_tokens({"mask_token": "[MASK]"})
>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="pt")

>>> # resize model's embedding matrix
>>> model.resize_token_embeddings(new_num_tokens=model.config.vocab_size + 1)
>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # retrieve index of [MASK]
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]

>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> predicted_token = tokenizer.decode(predicted_token_id)
```

```python
>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-[MASK] tokens
>>> labels = torch.where(
...     inputs.input_ids == tokenizer.mask_token_id, labels[:, : inputs["input_ids"].shape[-1]], -100
... )

>>> outputs = model(**inputs, labels=labels)
>>> loss = round(outputs.loss.item(), 2)
```

## ReformerForSequenceClassification[[transformers.ReformerForSequenceClassification]]

#### transformers.ReformerForSequenceClassification[[transformers.ReformerForSequenceClassification]]

```python
transformers.ReformerForSequenceClassification(config: ReformerConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2425)

**المعاملات:**

config ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Reformer مع رأس تصنيف/انحدار تسلسلي في الأعلى (طبقة خطية فوق المخرجات المجمعة) على سبيل المثال لمهام GLUE.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.ReformerForSequenceClassification.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, labels: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2439)

**المعاملات:**

input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`) : Indices of input sequence tokens in the vocabulary. During training the input_ids sequence_length has to be a multiple of the relevant model's chunk lengths (lsh's, local's or both). During evaluation, the indices are automatically padded to be a multiple of the chunk length.  Indices can be obtained using [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). See [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) and [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) for details.  [What are input IDs?](../glossary#input-ids)

position_ids (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

num_hashes (`int`, *اختياري*) : عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. تعيين هذا الحجة يلغي الافتراضي المعرّف في `config.num_hashes`. لمزيد من المعلومات، راجع `num_hashes` في [ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig).

labels (`torch.LongTensor` من الشكل `(batch_size,)`، *اختياري*) : تسميات لحساب خسارة تصنيف/انحدار التسلسل. يجب أن تكون الفهارس ضمن `[0, ..., config.num_labels - 1]`. إذا كان `config.num_labels == 1` يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كان `config.num_labels > 1` يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [SequenceClassifierOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) أو `tuple(torch.Tensor)`

[SequenceClassifierOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) أو مجموعة مرتبة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) والمدخلات.

تُعيد طريقة [ReformerForSequenceClassification](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerForSequenceClassification) الخاصة بالتقديم (forward) تعريف الطريقة الخاصة `__call__`.

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

- **loss** (`torch.Tensor` من الشكل `(1,)`, *اختياري*، يُعاد عند تقديم `labels`) -- خسارة التصنيف (أو الانحدار إذا كان config.num_labels==1).
- **logits** (`torch.Tensor` من الشكل `(batch_size, config.num_labels)`) -- درجات التصنيف (أو الانحدار إذا كان config.num_labels==1) (قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال على تصنيف بوسم واحد:

```python
>>> import torch
>>> from transformers import AutoTokenizer, ReformerForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForSequenceClassification.from_pretrained("google/reformer-crime-and-punishment")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> label = model.config.id2label[predicted_class_id]
```

```python
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = ReformerForSequenceClassification.from_pretrained(
...     "google/reformer-crime-and-punishment", num_labels=num_labels
... )

>>> labels = torch.tensor(1)
>>> loss = model(**inputs, labels=labels).loss
```

## ReformerForQuestionAnswering[[transformers.ReformerForQuestionAnswering]]

#### transformers.ReformerForQuestionAnswering[[transformers.ReformerForQuestionAnswering]]

```python
transformers.ReformerForQuestionAnswering(config: ReformerConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2572)

**المعاملات:**

config ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Reformer transformer مع رأس تصنيف نطاقات في الأعلى لمهام الإجابة الاستخراجية على الأسئلة مثل SQuAD (طبقة خطية فوق مخرجات الحالات المخفية لحساب `span start logits` و`span end logits`).

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.ReformerForQuestionAnswering.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, num_hashes: int | None = None, start_positions: typing.Optional[torch.Tensor] = None, end_positions: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, output_attentions: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/reformer/modeling_reformer.py#L2584)

**المعاملات:**

input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`) : Indices of input sequence tokens in the vocabulary. During training the input_ids sequence_length has to be a multiple of the relevant model's chunk lengths (lsh's, local's or both). During evaluation, the indices are automatically padded to be a multiple of the chunk length.  Indices can be obtained using [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). See [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) and [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) for details.  [What are input IDs?](../glossary#input-ids)

position_ids (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

num_hashes (`int`, *اختياري*) : عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. تعيين هذا الحجة يلغي الافتراضي المعرّف في `config.num_hashes`. لمزيد من المعلومات، راجع `num_hashes` في [ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig).

start_positions (`torch.Tensor` بأبعاد `(batch_size,)`، *اختياري*) : تسميات لموضع (فهرس) بداية النطاق المُسمّى لحساب خسارة تصنيف الرموز. تُثبَّت المواضع على طول التسلسل (`sequence_length`). المواضع خارج التسلسل لا تُؤخذ في الاعتبار عند حساب الخسارة.

end_positions (`torch.Tensor` بأبعاد `(batch_size,)`، *اختياري*) : تسميات لموضع (فهرس) نهاية المقطع المُسمّى لحساب خسارة تصنيف الرموز. تُثبَّت المواضع على طول التسلسل (`sequence_length`). المواضع خارج التسلسل لا تُؤخذ في الاعتبار عند حساب الخسارة.

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [QuestionAnsweringModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.QuestionAnsweringModelOutput) أو `tuple(torch.Tensor)`

[QuestionAnsweringModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.QuestionAnsweringModelOutput) أو مجموعة مرتبة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([ReformerConfig](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerConfig)) والمدخلات.

تُعيد طريقة [ReformerForQuestionAnswering](/docs/transformers/main/ar/model_doc/reformer#transformers.ReformerForQuestionAnswering) الخاصة بالتقديم (forward) تعريف الطريقة الخاصة `__call__`.

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

- **loss** (`torch.Tensor` بشكل `(1,)`، *اختياري*، يُعاد عند توفير `labels`) -- خسارة استخراج النطاق الكلي هي مجموع دالة Cross-Entropy لموقعي البداية والنهاية.
- **start_logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length)`) -- درجات بداية المقطع (قبل SoftMax).
- **end_logits** (`torch.Tensor` بأبعاد `(batch_size, sequence_length)`) -- درجات نهاية المقطع (قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
>>> from transformers import AutoTokenizer, ReformerForQuestionAnswering
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/reformer-crime-and-punishment")
>>> model = ReformerForQuestionAnswering.from_pretrained("google/reformer-crime-and-punishment")

>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"

>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()

>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
...

>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])

>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
...
```

