# ESMC

## نظرة عامة

ESMC (ESM Cambrian) هي عائلة من نماذج لغة البروتين التي أصدرها [BioHub](https://biohub.org/). وهي مُشفِّر Transformer ثنائي الاتجاه تم تدريبه بهدف نمذجة اللغة المقنّعة على تسلسلات الأحماض الأمينية. وكما هو الحال مع [ESM-2](./esm)، تنتج ESMC تمثيلات لكل موقع (residue) تكون مفيدة لمهام نمذجة البروتين اللاحقة.

مناسب نموذج ESMC للضبط الدقيق على مهام تصنيف البروتينات أو تصنيف الرموز. كما يُستخدم كهيكل أساسي في [ESMFold2](./esmfold2)، حيث يولّد تمثيلات تُستخدم كمدخلات لرأس الطي.

تتوفر نقاط التفتيش المُدرَّبة مسبقًا على Hugging Face Hub:

- [`biohub/ESMC-300M`](https://huggingface.co/biohub/ESMC-300M)
- [`biohub/ESMC-600M`](https://huggingface.co/biohub/ESMC-600M)
- [`biohub/ESMC-6B`](https://huggingface.co/biohub/ESMC-6B)

## مثال على الاستخدام

تُسجَّل ESMC مع فئات auto (`AutoModel`، `AutoModelForMaskedLM`، `AutoModelForSequenceClassification`، `AutoModelForTokenClassification`).

```python
import torch
from transformers import pipeline

extractor = pipeline(
    task="feature-extraction",
    model="biohub/ESMC-300M",
)
# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = extractor("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ", return_tensors="pt")
```

```python
import torch
from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
model = AutoModel.from_pretrained("biohub/ESMC-300M")

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

# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = outputs.last_hidden_state
```

## EsmcConfig[[transformers.EsmcConfig]]

#### transformers.EsmcConfig[[transformers.EsmcConfig]]

```python
transformers.EsmcConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 64, hidden_size: int = 2560, intermediate_size: int = 6912, num_hidden_layers: int = 80, num_attention_heads: int = 40, num_key_value_heads: int | None = None, hidden_act: str = 'silu', max_position_embeddings: int = 2048, initializer_range: float = 0.02, pad_token_id: int | None = 1, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 2, tie_word_embeddings: bool = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, attention_bias: bool = False, attention_dropout: int | float | None = 0.0, mlp_bias: bool = False, head_dim: int | None = None, mask_token_id: int | None = 32, classifier_dropout: float | None = 0.1)
```

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

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

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

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

intermediate_size (*int*، *optional*، القيمة الافتراضية *6912*) : بُعد تمثيلات MLP.

num_hidden_layers (*int*، *optional*، القيمة الافتراضية *80*) : عدد الطبقات المخفية في مُفكِّك Transformer.

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

num_key_value_heads (*int*, *optional*) : هذا هو عدد رؤوس key_value التي يجب استخدامها لتنفيذ Grouped Query Attention. إذا كان *num_key_value_heads=num_attention_heads*، فسيستخدم النموذج Multi Head Attention (MHA)، وإذا كان *num_key_value_heads=1* فسيستخدم النموذج Multi Query Attention (MQA)، وإلا فسيتم استخدام GQA. عند تحويل نقطة تحقق متعددة الرؤوس إلى نقطة تحقق GQA، يجب بناء كل مجموعة من رؤوس key و value عن طريق meanpooling جميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع [هذا الورقة](https://huggingface.co/papers/2305.13245). إذا لم يتم تحديد ذلك، فسيتم افتراض *num_attention_heads*.

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

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

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

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

bos_token_id (*int*، *optional*، القيمة الافتراضية *0*) : معرّف الرمز المستخدم لبدء البث في قاموس الكلمات.

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

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

rope_parameters (*Union[~modeling_rope_utils.RopeParameters, dict]*، *اختياري*) : قاموس يحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن يحتوي القاموس على قيمة لـ *rope_theta*، وبشكل اختياري معاملات تُستخدم للتوسيع في حال رغبتك في استخدام RoPE مع *max_position_embeddings* أطول.

attention_bias (*bool*، *اختياري*، القيمة الافتراضية *False*) : ما إذا كان سيتم استخدام انحياز في طبقات الإسقاط للاستعلام والمفتاح والقيمة والمخرجات أثناء الانتباه الذاتي.

attention_dropout (*Union[int, float]*، *اختياري*، القيمة الافتراضية *0.0*) : نسبة الإسقاط (dropout) لاحتمالات الانتباه.

mlp_bias (*bool*، *اختياري*، القيمة الافتراضية *False*) : ما إذا كان سيتم استخدام انحياز في طبقات up_proj و down_proj و gate_proj ضمن طبقات MLP.

head_dim (*int*، *optional*) : بُعد رأس الانتباه. إذا كان None، فسيكون الافتراضي hidden_size // num_attention_heads

mask_token_id (*int*، *اختياري*، القيمة الافتراضية 32) : فهرس رمز القناع في قاموس الكلمات (`"&amp;lt;mask>"`)، يُستخدم لنمذجة اللغة المقنّعة.

classifier_dropout (*float*، *optional*، القيمة الافتراضية 0.1) : نسبة Dropout لرأس التصنيف.

هذه فئة الإعدادات المخزنة لإعدادات نموذج EsmcModel. تُستخدم لاستحداث نموذج Esmc وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [biohub/ESMC-6B](https://huggingface.co/biohub/ESMC-6B)

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

أمثلة:

```python
>>> from transformers import EsmcConfig, EsmcModel

>>> # Initializing an ESMC biohub/ESMC-6B style configuration
>>> configuration = EsmcConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = EsmcModel(configuration)

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

## EsmcTokenizer[[transformers.EsmcTokenizer]]

#### transformers.EsmcTokenizer[[transformers.EsmcTokenizer]]

```python
transformers.EsmcTokenizer(unk_token = '<unk>', cls_token = '<cls>', pad_token = '<pad>', mask_token = '<mask>', eos_token = '<eos>', bos_token = None, chain_break_token = '|', extra_special_tokens = None, **kwargs)
```

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

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

unk_token (*str*، *اختياري*، القيمة الافتراضية *"&amp;lt;unk>"*) : الرمز المجهول.

cls_token (*str*، *اختياري*، القيمة الافتراضية *"&amp;lt;cls>"*) : رمز التصنيف (يُضاف في بداية كل تسلسل).

pad_token (*str*، *اختياري*، القيمة الافتراضية *"&amp;lt;pad>"*) : رمز التعبئة.

mask_token (*str*، *اختياري*، القيمة الافتراضية هي *"&amp;lt;mask>"*) : رمز القناع، المستخدم لنمذجة اللغة المقنّعة.

eos_token (*str*، *اختياري*، القيمة الافتراضية *"&amp;lt;eos>"*) : رمز نهاية التسلسل (يُضاف إلى كل تسلسل).

bos_token (*str*، *اختياري*، القيمة الافتراضية *"&amp;lt;cls>"*) : رمز بداية التسلسل (يُضاف في بداية كل تسلسل). عند عدم تعيينه، يُستخدم cls_token.

chain_break_token (*str*، *اختياري*، القيمة الافتراضية *"|"*) : الرمز المُدرج بين السلاسل في مدخلات البروتين متعددة السلاسل. يُسجَّل كرمز خاص محدد للنموذج، لذا يُعرَض على أنه *chain_break_token* / *chain_break_token_id*.

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

أنشئ مُرمِّز ESMC.

هذا المُجزِّئ هو مُجزِّئ على مستوى الأحرف مدعوم بمكتبة *tokenizers* من HuggingFace. إنه يغلّف كل تسلسل برموز `&amp;lt;cls>` و`&amp;lt;eos>` ويدعم رمز كسر السلسلة `|` للمدخلات متعددة السلاسل.

أمثلة:

```python
>>> from transformers import EsmcTokenizer

>>> tokenizer = EsmcTokenizer()
>>> tokenizer("ACDEFGHIKLMNPQRSTVWY")["input_ids"]
[0, 5, 23, 13, 9, 18, 6, 21, 12, 15, 4, 20, 17, 14, 16, 10, 8, 11, 7, 22, 19, 2]
```

## EsmcModel[[transformers.EsmcModel]]

#### transformers.EsmcModel[[transformers.EsmcModel]]

```python
transformers.EsmcModel(config: EsmcConfig)
```

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

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

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

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

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

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

#### forward[[transformers.EsmcModel.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, sequence_id: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

input_ids (*torch.Tensor* من الشكل *(batch_size, sequence_length)*، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [*AutoTokenizer*]. راجع [*PreTrainedTokenizer.encode*] و [*PreTrainedTokenizer.__call__*] للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

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

position_ids (*torch.Tensor* من الشكل *(batch_size, sequence_length)*، *اختياري*) : موضع كل رمز في التسلسل، ويُستخدم بواسطة RoPE. القيمة الافتراضية هي `arange(sequence_length)`. مواضع ESMC مطلقة على كامل المدخل، وتبقى متواصلة *عبر* حدود السلاسل في مدخل متعدد السلاسل. يُحمَل هيكل السلاسل بشكل منفصل بواسطة `sequence_id`، الذي يُخفي الانتباه: على عكس صيغة التسلسل المُعبّأ المستخدمة في أماكن أخرى من المكتبة، ليست هذه معرفات مواضع لكل سلسلة تُعاد من 0، ولا يُستنتج هيكل السلاسل منها عمداً.

sequence_id (*torch.Tensor* من الشكل *(batch_size, sequence_length)*, *اختياري*) : مصفوفة معرفات السلاسل الصحيحة لتقنيع الانتباه الواعي بالسلاسل. يمكن للرموز التي تحمل نفس القيمة الصحيحة غير السالبة أن تنتبه إلى بعضها البعض؛ بينما لا يمكن للرموز ذات القيم المختلفة أن تنتبه إلى بعضها (تقنيع بين السلاسل). يجب تعيين مواضع الحشو إلى `-1` ويجب أن تكون المدخلات **محشوة من اليمين** (يستخدم RoPE مواضع مطلقة تبدأ من 0). عند توفيره، يتم تجاهل `attention_mask`. تمرير `sequence_id` يبني قناع انتباه مخصص، مما يتطلب `torch>=2.6`. تتطلب مدخلات السلاسل المتعددة بالإضافة إلى ذلك `attn_implementation` غير فلاش (`'sdpa'` / `'eager'` / `'flex_attention'`)؛ يدعم انتباه الفلاش حالة السلسلة الواحدة فقط.

**يعيد:** [*~modeling_outputs.BaseModelOutput*] أو *tuple(torch.Tensor)*

*~modeling_outputs.BaseModelOutput* أو مجموعة من *torch.Tensor* (إذا تم تمرير *return_dict=False* أو عندما يكون *config.return_dict=False*) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([*EsmcConfig*]) والمدخلات.

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

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

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

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

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

أمثلة:

```python
>>> from transformers import AutoTokenizer, EsmcModel

>>> model = EsmcModel.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQVQLV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.last_hidden_state.shape
torch.Size([1, 12, 960])
```

## EsmcForMaskedLM[[transformers.EsmcForMaskedLM]]

#### transformers.EsmcForMaskedLM[[transformers.EsmcForMaskedLM]]

```python
transformers.EsmcForMaskedLM(config: EsmcConfig)
```

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

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

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

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

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

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

#### forward[[transformers.EsmcForMaskedLM.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, sequence_id: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

input_ids (*torch.Tensor* من الشكل *(batch_size, sequence_length)*، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [*AutoTokenizer*]. راجع [*PreTrainedTokenizer.encode*] و [*PreTrainedTokenizer.__call__*] للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

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

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

sequence_id (*torch.Tensor* من الشكل *(batch_size, sequence_length)*، *اختياري*) : مصفوفة معرفات السلاسل الصحيحة التي تُمرَّر إلى المُشفِّر لتطبيق إخفاء الانتباه الواعي بالسلاسل. راجع [EsmcModel.forward()](/docs/transformers/main/ar/model_doc/esmc#transformers.EsmcModel.forward) للتشفير.

labels (*torch.LongTensor* من الشكل *(batch_size, sequence_length)*، *اختياري*) : التسميات لخسارة نمذجة اللغة المقنّعة. يتم تجاهل المواضع التي تحمل التسمية `-100`. يجب أن تكون المواضع الأخرى ضمن `[0, config.vocab_size)`.

**يعيد:** [*~modeling_outputs.MaskedLMOutput*] أو *tuple(torch.Tensor)*

*~modeling_outputs.MaskedLMOutput* أو مجموعة من *torch.Tensor* (إذا تم تمرير *return_dict=False* أو عندما يكون *config.return_dict=False*) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([*EsmcConfig*]) والمدخلات.

تتجاوز طريقة *EsmcForMaskedLM* الخاصة بـ forward الطريقة الخاصة *__call__*.

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

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

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

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

أمثلة:

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

>>> model = EsmcForMaskedLM.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQ&amp;lt;mask>LV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 11, 64])
```

## EsmcForSequenceClassification[[transformers.EsmcForSequenceClassification]]

#### transformers.EsmcForSequenceClassification[[transformers.EsmcForSequenceClassification]]

```python
transformers.EsmcForSequenceClassification(config: EsmcConfig)
```

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

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

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

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

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

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

#### forward[[transformers.EsmcForSequenceClassification.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

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

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

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

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

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

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

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

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

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

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

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

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

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

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

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

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

>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B")

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

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

>>> predicted_class_id = logits.argmax().item()
>>> 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 = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
```

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

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

>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", problem_type="multi_label_classification")

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

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

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # 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 = EsmcForSequenceClassification.from_pretrained(
...     "biohub/ESMC-6B", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
```

## EsmcForTokenClassification[[transformers.EsmcForTokenClassification]]

#### transformers.EsmcForTokenClassification[[transformers.EsmcForTokenClassification]]

```python
transformers.EsmcForTokenClassification(config)
```

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

#### forward[[transformers.EsmcForTokenClassification.forward]]

```python
forward(input_ids: torch.LongTensor | None = None, attention_mask: torch.Tensor | None = None, position_ids: torch.LongTensor | None = None, past_key_values: Cache | None = None, inputs_embeds: torch.Tensor | None = None, labels: torch.LongTensor | None = None, use_cache: bool | None = None, **kwargs: Unpack[TransformersKwargs])
```

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

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

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

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

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

past_key_values (`Cache`، *اختياري*) : حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكوّن هذا عادةً من `past_key_values` التي يعيدها النموذج في مرحلة سابقة من فك الترميز، عندما يكون `use_cache=True` أو `config.use_cache=True`. يُسمح فقط بمرور كائن [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache) كمدخل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache). إذا لم يتم تمرير `past_key_values`، فسيتم تهيئة [DynamicCache](/docs/transformers/main/ar/internal/generation_utils#transformers.DynamicCache) افتراضيًا. سيُخرج النموذج نفس تنسيق الذاكرة المؤقتة المُدخل. إذا تم استخدام `past_key_values`، يُتوقع من المستخدم إدخال `input_ids` غير المعالجة فقط (تلك التي لم تُعطَ حالات مفاتيح وقيم سابقة لها في هذا النموذج) بأبعاد `(batch_size, unprocessed_length)` بدلاً من جميع `input_ids` بأبعاد `(batch_size, sequence_length)`.

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

labels (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : تسميات لحساب خسارة تصنيف الرموز. يجب أن تكون الفهارس ضمن `[0, ..., config.num_labels - 1]`.

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

**يعيد:** `TokenClassifierOutput`

تُعيد طريقة `GenericForTokenClassification` الخاصة بالتقديم (forward) تعريف الطريقة الخاصة `__call__`.

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

