Transformers documentation
Reformer
نُشر هذا النموذج في أوراق 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) بحجم حيث يكون config.hidden_size لكل موقع $i, \ldots, n_s$، مع يكون config.max_embedding_size. وهذا يعني أن وجود طول تسلسل و config.hidden_size بحجم سيؤدي إلى مصفوفة ترميز موضعي:
الذي يحتوي وحده على أكثر من 500 مليون معامل يجب تخزينها. تفكّك الترميزات الموضعية المحورية إلى مصفوفتين:
و
حيث:
لذلك، ينطبق ما يلي:
بشكل حدسي، هذا يعني أن متجه تضمين الموضع هو الآن تركيب لمتضمّنين مُفكَّكَيْن: $x^1{k, l} + x^2{l, k}$، حيث يتم تفكيك بُعد config.max_embedding_size إلى $k \text{ و } l$. يضمن هذا التصميم أن يكون كل متضمّن موضع فريدًا.
باستخدام المثال أعلاه مرة أخرى، يمكن لتشفير المواقع المحورية مع أن يقلل عدد المعاملات بشكل كبير من 500,000,000 إلى معامل، مما يعني انخفاضًا بنسبة 85% في استهلاك الذاكرة.
في الممارسة العملية، يُضبط المعامل config.axial_pos_embds_dim على مجموعة يجب أن يكون مجموعها
مساوياً لـ config.hidden_size و config.axial_pos_shape يُضبط على مجموعة يجب أن يكون
حاصل ضربها مساوياً لـ 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، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب مصفوفات الاستعلام والمفتاح من إلى $\mathcal{O}(n_s \times \log(n_s))$، وهو ما يمثل عادةً عنق الزجاجة في الذاكرة والوقت في نموذج الترانسفورمر، حيث هو طول التسلسل.
الانتباه الذاتي المحلي
الانتباه الذاتي المحلي هو في جوهره طبقة انتباه ذاتي “عادية” تتضمن إسقاطات للمفتاح والاستعلام والقيمة، لكنه مقسّم بحيث أن متجهات تضمين الاستعلام في كل مقطع بطول config.local_chunk_length تنتبه فقط إلى متجهات تضمين المفتاح في مقطعها، وإلى متجهات تضمين المفتاح في config.local_num_chunks_before المقاطع المجاورة السابقة، وconfig.local_num_chunks_after المقاطع المجاورة التالية.
باستخدام الانتباه الذاتي المحلي، يمكن تقليل تعقيد الذاكرة والوقت لعملية ضرب مصفوفات الاستعلام-المفتاح من إلى $\mathcal{O}(n_s \times \log(n_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
< source >( 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.configReformerTokenizer
فئة transformers.ReformerTokenizer
< source >( 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 الذي يحتوي على معظم الطرق الرئيسية. ينبغي على المستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
ReformerModel
فئة transformers.ReformerModel
< source >( config: ReformerConfig )
المعاملات
- config (ReformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Reformer الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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
< source >( config: ReformerConfig )
المعاملات
- config (ReformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Reformer مع رأس language modeling في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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.Tensorof 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.logitsReformerForMaskedLM
فئة transformers.ReformerForMaskedLM
< source >( config: ReformerConfig )
المعاملات
- config (ReformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Reformer مع رأس language modeling في الأعلى.”
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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.Tensorof 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
< source >( config: ReformerConfig )
المعاملات
- config (ReformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Reformer مع رأس تصنيف/انحدار تسلسلي في الأعلى (طبقة خطية فوق المخرجات المجمّعة) على سبيل المثال لمهام GLUE.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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).lossReformerForQuestionAnswering
فئة transformers.ReformerForQuestionAnswering
< source >( 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
< source >( 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)
...