Transformers documentation

Reformer

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

نُشر هذا النموذج في أوراق HF في 13 يناير 2020، وأُضيف إلى مكتبة Hugging Face Transformers في 16 نوفمبر 2020.

Reformer

نظرة عامة

قُدِّم نموذج Reformer في ورقة Reformer: The Efficient Transformer التي كتبها 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. يمكن العثور على كود المؤلفين هنا.

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

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

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

تم تنفيذ الترميزات الموضعية المحورية (Axial Positional Encodings) لأول مرة في مكتبة trax التي طوّرها مؤلفو ورقة هذا النموذج. في النماذج التي تتعامل مع تسلسلات إدخال طويلة جدًا، تخزّن ترميزات معرّفات المواقع التقليدية متجه تمثيل (embedding) بحجم dd حيث يكون config.hidden_size لكل موقع $i, \ldots, n_s$، مع nsn_s يكون config.max_embedding_size. وهذا يعني أن وجود طول تسلسل ns=219≈0.5Mn_s = 2^{19} \approx 0.5M و config.hidden_size بحجم d=210≈1000d = 2^{10} \approx 1000 سيؤدي إلى مصفوفة ترميز موضعي: Xi,j, with i∈[1,…,d] and j∈[1,…,ns]X_{i,j}, \text{ with } i \in \left[1,\ldots, d\right] \text{ and } j \in \left[1,\ldots, n_s\right]

الذي يحتوي وحده على أكثر من 500 مليون معامل يجب تخزينها. تفكّك الترميزات الموضعية المحورية Xi,jX_{i,j} إلى مصفوفتين: Xi,j1, with i∈[1,…,d1] and j∈[1,…,ns1]X^{1}_{i,j}, \text{ with } i \in \left[1,\ldots, d^1\right] \text{ and } j \in \left[1,\ldots, n_s^1\right]

و Xi,j2, with i∈[1,…,d2] and j∈[1,…,ns2]X^{2}_{i,j}, \text{ with } i \in \left[1,\ldots, d^2\right] \text{ and } j \in \left[1,\ldots, n_s^2\right]

حيث: d=d1+d2 and ns=ns1×ns2.d = d^1 + d^2 \text{ and } n_s = n_s^1 \times n_s^2 .

لذلك، ينطبق ما يلي: Xi,j={Xi,k1,if  i<d1 with k=jmod  ns1Xi−d1,l2,if i≥d1 with l=⌊jns1⌋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}

بشكل حدسي، هذا يعني أن متجه تضمين الموضع xj∈Rdx_j \in \mathbb{R}^{d} هو الآن تركيب لمتضمّنين مُفكَّكَيْن: $x^1{k, l} + x^2{l, k}$، حيث يتم تفكيك بُعد config.max_embedding_size jj إلى $k \text{ و } l$. يضمن هذا التصميم أن يكون كل متضمّن موضع xjx_j فريدًا.

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

في الممارسة العملية، يُضبط المعامل config.axial_pos_embds_dim على مجموعة (d1,d2)(d^1, d^2) يجب أن يكون مجموعها مساوياً لـ config.hidden_size و config.axial_pos_shape يُضبط على مجموعة (ns1,ns2)(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 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 في دالة forward، بحيث يصبح ناتج الانتباه الذاتي LSH أقرب إلى ناتج الانتباه الذاتي الكامل «العادي». ثم تُرتَّب الدلاء وتُقسَّم إلى مقاطع متتابعة من متجهات تضمين الاستعلام والمفتاح، حيث يكون طول كل مقطع config.lsh_chunk_length. بالنسبة لكل مقطع، تنتبه متجهات تضمين الاستعلام إلى متجهات المفاتيح الخاصة به (المرتبطة ذاتياً) وإلى متجهات تضمين المفاتيح الموجودة في config.lsh_num_chunks_before مقاطع مجاورة سابقة وconfig.lsh_num_chunks_after مقاطع مجاورة تالية.

لمزيد من المعلومات، راجع الورقة الأصلية أو هذا المقال الرائع.

لاحظ أن 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، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب مصفوفات الاستعلام والمفتاح من O(ns×ns)\mathcal{O}(n_s \times n_s) إلى $\mathcal{O}(n_s \times \log(n_s))$، وهو ما يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج الترانسفورمر، حيث nsn_s هو طول التسلسل.

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

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

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

التدريب

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

للتدريب، يجب استخدام ReformerModelWithLMHead على النحو التالي:

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]

الموارد

ReformerConfig

فئة transformers.ReformerConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneattention_head_size: int = 64attn_layers: list[str] | tuple[str, ...] = ('local', 'lsh', 'local', 'lsh', 'local', 'lsh')axial_norm_std: float = 1.0axial_pos_embds: bool = Trueaxial_pos_shape: list[int] | tuple[int, ...] = (64, 64)axial_pos_embds_dim: list[int] | tuple[int, ...] = (64, 192)chunk_size_lm_head: int = 0eos_token_id: int | list[int] | None = 2feed_forward_size: int = 512hash_seed: int | None = Nonehidden_act: str = 'relu'hidden_dropout_prob: float | int = 0.05hidden_size: int = 256initializer_range: float = 0.02is_decoder: bool = Falselayer_norm_eps: float = 1e-12local_num_chunks_before: int = 1local_num_chunks_after: int = 0local_attention_probs_dropout_prob: float | int = 0.05local_attn_chunk_length: int = 64lsh_attn_chunk_length: int | None = 64lsh_attention_probs_dropout_prob: float | None = 0.0lsh_num_chunks_before: int | None = 1lsh_num_chunks_after: int | None = 0max_position_embeddings: int = 4096num_attention_heads: int = 12num_buckets: int | list[int] | None = Nonenum_hashes: int = 1vocab_size: int = 320tie_word_embeddings: bool = Falseuse_cache: bool = Trueclassifier_dropout: float | int | None = Nonebos_token_id: int | None = Nonepad_token_id: int | None = 0 )

المعاملات

  • attention_head_size (int، اختياري، القيمة الافتراضية 64) — أبعاد متجهات المفاتيح والاستعلام والقيم المُسقطَة
  • attn_layers (list[str]، اختياري، القيمة الافتراضية ["local", "lsh", "local", "lsh", "local", "lsh"]) — قائمة بأنواع طبقات الانتباه مرتبة تصاعديًا. يمكن اختيارها من بين طبقة LSHSelfAttention ("lsh") وطبقة LocalSelfAttention ("local"). لمزيد من المعلومات حول طبقة LSHSelfAttention، راجع انتباه LSH الذاتي. ولمزيد من المعلومات حول طبقة LocalSelfAttention، راجع الانتباه الذاتي المحلي.
  • axial_norm_std (float, اختياري، القيمة الافتراضية 1.0) — انحراف المعيار لـ normal_initializer المستخدم في تهيئة مصفوفات الأوزان لتشفيرات المواقع المحورية.
  • axial_pos_embds (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم استخدام ترميزات الموضع المحوري أم لا. لمزيد من المعلومات حول كيفية عمل ترميزات الموضع المحوري، راجع ترميز الموضع المحوري.
  • axial_pos_shape (list[int]، اختياري، القيمة الافتراضية [64, 64]) — أبعاد الموضع لتشفيرات الموضع المحورية. أثناء التدريب، يجب أن يكون حاصل ضرب أبعاد الموضع مساوياً لطول التسلسل. لمزيد من المعلومات حول كيفية عمل تضمينات الموضع المحورية، راجع تشفيرات الموضع المحورية.
  • axial_pos_embds_dim (list[int]، اختياري، القيمة الافتراضية [64, 192]) — أبعاد التضمين لتشفيرات المواقع المحورية. يجب أن يكون مجموع أبعاد التضمين مساوياً لحجم الخفاء. لمزيد من المعلومات حول كيفية عمل تضمينات المواقع المحورية، راجع تشفيرات المواقع المحورية.
  • chunk_size_lm_head (int، اختياري، القيمة الافتراضية 0) — حجم الدفعة لطبقة الرأس الأمامي النهائي لنموذج اللغة. يعني حجم دفعة يساوي 0 أن طبقة التغذية الأمامية غير مقسمة إلى دفعات. يعني حجم دفعة يساوي n أن طبقة التغذية الأمامية تعالج n < sequence_length من التضمينات في كل مرة. لمزيد من المعلومات حول تقسيم طبقات التغذية الأمامية إلى دفعات، راجع كيف يعمل تقسيم طبقات التغذية الأمامية إلى دفعات؟.
  • eos_token_id (Union[int, list[int]]، اختياري، القيمة الافتراضية 2) — معرّف الرمز المستخدم لنهاية التدفق في المفردات.
  • feed_forward_size (int، اختياري، القيمة الافتراضية 512) — أبعاد طبقة التغذية الأمامية في كتلة الانتباه المتبقي.
  • 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) — ما إذا كان النموذج يُستخدم كمفكّك (decoder) أم لا. إذا كانت القيمة False، يُستخدم النموذج كمُرمِّز (encoder).
  • 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]، اختياري) — عدد الدلاء (buckets) التي يمكن «تجزئتها» فيها متجهات الاستعلام الرئيسية باستخدام مخطط التجزئة الحساسة للموقع (locality sensitive hashing). يتم تجزئة كل متجه استعلام رئيسي إلى تجزئة ضمن 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) — معرّف الرمز المستخدم للتعبئة في المفردات.

هذه فئة الإعدادات المخزنة لإعدادات نموذج ReformerModel. تُستخدم لتوليد نموذج Reformer وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ google/reformer-crime-and-punishment

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

أمثلة:

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

< >

( vocab: str | dict[str, int] | None = Nonemerges: str | list[str] | None = Noneeos_token: str = '</s>'unk_token: str = '<unk>'_spm_precompiled_charsmap: str | None = Noneadditional_special_tokens: list | None = None**kwargs )

المعاملات

  • vocab_file (str) — ملف SentencePiece (يحمل عادةً الامتداد .spm) يحتوي على المفردات اللازمة لإنشاء مُجزِّئ.
  • eos_token (str, اختياري, الافتراضي هو "</s>") — رمز نهاية التسلسل. عند بناء تسلسل باستخدام الرموز الخاصة، لا يُستخدم هذا الرمز لنهاية التسلسل، بل يُستخدم رمز الفاصل (sep_token) لهذا الغرض.

    عند بناء تسلسل باستخدام الرموز الخاصة، لا يُستخدم هذا الرمز لنهاية التسلسل. الرمز المستخدم هو 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.

يرث هذا المُجزِّئ من TokenizersBackend الذي يحتوي على معظم الطرق الرئيسية. ينبغي على المستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.

save_vocabulary

< >

( save_directory: strfilename_prefix: str | None = None )

ReformerModel

فئة transformers.ReformerModel

< >

( config: ReformerConfig )

المعاملات

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

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: transformers.models.reformer.modeling_reformer.ReformerDynamicCache | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → ReformerModelOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس النموذج. أثناء التدريب، يجب أن يكون sequence_length الخاص بـ input_ids مضاعفًا لطول المقاطع (chunks) ذات الصلة بالنموذج (lsh أو local أو كليهما). أثناء التقييم، يتم ملء المؤشرات تلقائيًا لتصبح مضاعفة لطول المقطع.

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

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

  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • position_ids (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • num_hashes (int, اختياري) — عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. يؤدي تعيين هذا الحُجج إلى تجاوز القيمة الافتراضية المعرّفة في config.num_hashes.

    لمزيد من المعلومات، راجع num_hashes في ReformerConfig.

  • past_buckets_states (ReformerDynamicCache, اختياري) — قائمة من tuple(torch.LongTensor, torch.Tensor بطول config.n_layers, حيث يكون العنصر الأول الدلاء بشكل (batch_size, num_heads, num_hashes, sequence_length)) والثاني الحالات المخفية بشكل (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، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

ReformerModelOutput أو tuple(torch.Tensor)

ReformerModelOutput أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة حسب الإعدادات (ReformerConfig) والمدخلات.

تتجاوز طريقة 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) — مجموعة من 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

< >

( config: ReformerConfig )

المعاملات

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

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonepast_buckets_states: list[tuple[torch.Tensor]] | None = Noneuse_cache: bool | None = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs ) → CausalLMOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس النموذج. أثناء التدريب، يجب أن يكون sequence_length الخاص بـ input_ids مضاعفًا لطول المقاطع (chunks) ذات الصلة بالنموذج (lsh أو local أو كليهما). أثناء التقييم، يتم ملء المؤشرات تلقائيًا لتصبح مضاعفة لطول المقطع.

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

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

  • position_ids (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • num_hashes (int, اختياري) — عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. يؤدي تعيين هذا الحُجج إلى تجاوز القيمة الافتراضية المعرّفة في config.num_hashes.

    لمزيد من المعلومات، راجع num_hashes في ReformerConfig.

  • past_buckets_states (list[tuple(torch.LongTensor, torch.Tensor)], اختياري) — قائمة من tuple(torch.LongTensor, torch.Tensor بطول config.n_layers, حيث يكون العنصر الأول هو الدلاء بشكل (batch_size, num_heads, num_hashes, sequence_length)) والثاني هو الحالات المخفية بشكل (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، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع 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، يتم حساب logits لجميع input_ids (حالة خاصة). لا يُحتاج إلى logits إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة كبيرة، وهو أمر مهم بشكل ملحوظ للتسلسلات الطويلة أو حجم المفردات الكبير. إذا كان torch.Tensor، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول التسلسل. يكون هذا مفيدًا عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول التسلسل).

يعيد

CausalLMOutput أو tuple(torch.Tensor)

CausalLMOutput أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعداد (ReformerConfig) والمدخلات.

تتجاوز طريقة ReformerModelWithLMHead الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

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

  • loss (torch.Tensor of shape (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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

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

< >

( config: ReformerConfig )

المعاملات

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

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MaskedLMOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس النموذج. أثناء التدريب، يجب أن يكون sequence_length الخاص بـ input_ids مضاعفًا لطول المقاطع (chunks) ذات الصلة بالنموذج (lsh أو local أو كليهما). أثناء التقييم، يتم ملء المؤشرات تلقائيًا لتصبح مضاعفة لطول المقطع.

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

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

  • position_ids (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • num_hashes (int, اختياري) — عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. يؤدي تعيين هذا الحُجج إلى تجاوز القيمة الافتراضية المعرّفة في config.num_hashes.

    لمزيد من المعلومات، راجع num_hashes في ReformerConfig.

  • labels (torch.LongTensor بشكل (batch_size, sequence_length), اختياري) — تسميات لحساب خسارة نمذجة اللغة المقنّعة. يجب أن تكون الفهارس ضمن [-100, 0, ..., config.vocab_size] (انظر input_ids في مستند الوصف) يتم تجاهل الرموز التي تكون فهارسها -100 تُحسب الخسارة فقط للرموز التي تحمل تسميات

    يستخدم هذا المثال نقطة تفتيش وهمية لأننا لا نملك أي نموذج مُدرَّب مسبقًا متاحًا لمهمة نمذجة اللغة المقنّعة مع بنية Reformer.

  • output_hidden_states (bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجع hidden_states ضمن الموترات المُرجعة للحصول على مزيد من التفاصيل.
  • output_attentions (bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

MaskedLMOutput أو tuple(torch.Tensor)

MaskedLMOutput أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعداد (ReformerConfig) والمدخلات.

تتجاوز طريقة ReformerForMaskedLM الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

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

  • loss (torch.Tensor of shape (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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

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

< >

( config: ReformerConfig )

المعاملات

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

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SequenceClassifierOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس النموذج. أثناء التدريب، يجب أن يكون sequence_length الخاص بـ input_ids مضاعفًا لطول المقاطع (chunks) ذات الصلة بالنموذج (lsh أو local أو كليهما). أثناء التقييم، يتم ملء المؤشرات تلقائيًا لتصبح مضاعفة لطول المقطع.

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

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

  • position_ids (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • num_hashes (int, اختياري) — عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. يؤدي تعيين هذا الحُجج إلى تجاوز القيمة الافتراضية المعرّفة في config.num_hashes.

    لمزيد من المعلومات، راجع num_hashes في 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، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

SequenceClassifierOutput أو tuple(torch.Tensor)

SequenceClassifierOutput أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (ReformerConfig) والمدخلات.

تُعيد طريقة 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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

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

>>> 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]
>>> # 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

< >

( config: ReformerConfig )

المعاملات

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

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonenum_hashes: int | None = Nonestart_positions: typing.Optional[torch.Tensor] = Noneend_positions: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → QuestionAnsweringModelOutput or tuple(torch.Tensor)

المعاملات

  • input_ids (torch.LongTensor بشكل (batch_size, sequence_length)) — مؤشرات رموز تسلسل الإدخال في قاموس النموذج. أثناء التدريب، يجب أن يكون sequence_length الخاص بـ input_ids مضاعفًا لطول المقاطع (chunks) ذات الصلة بالنموذج (lsh أو local أو كليهما). أثناء التقييم، يتم ملء المؤشرات تلقائيًا لتصبح مضاعفة لطول المقطع.

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

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

  • position_ids (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — مؤشرات مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها ضمن النطاق [0, config.n_positions - 1].

    ما هي معرّفات المواقع؟

  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • num_hashes (int, اختياري) — عدد جولات التجزئة التي يجب تنفيذها أثناء التقسيم إلى دلاء. يؤدي تعيين هذا الحُجج إلى تجاوز القيمة الافتراضية المعرّفة في config.num_hashes.

    لمزيد من المعلومات، راجع num_hashes في 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، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

QuestionAnsweringModelOutput أو tuple(torch.Tensor)

QuestionAnsweringModelOutput أو مجموعة مرتبة من torch.Tensor (في حال تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (ReformerConfig) والمدخلات.

تُعيد طريقة 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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

>>> 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)
...
Update on GitHub