# HuBERT

[HuBERT](https://huggingface.co/papers/2106.07447) هو نموذج كلام ذاتي الإشراف يجمع العلامات المستهدفة المحاذاة لفقدان التنبؤ المشابه لـ BERT، ويطبّق فقدان التنبؤ فقط على المناطق المقنّعة لإجبار النموذج على تعلّم كلٍّ من النمذجة الصوتية والنمذجة اللغوية على مدخلات مستمرة. ويتعامل مع تحديات وجود وحدات صوتية متعددة لكل عبارة، وعدم وجود قاموس أثناء التدريب المسبق، وطول متغير لوحدات الصوت دون تقسيم صريح.

يمكنك العثور على جميع نقاط التفتيش الأصلية الخاصة بـ HuBERT ضمن مجموعة [HuBERT](https://huggingface.co/collections/facebook/hubert-651fca95d57549832161e6b6).

> [!TIP]
> تمت مساهمة هذا النموذج من قِبل [patrickvonplaten](https://huggingface.co/patrickvonplaten).
>
> انقر على نماذج HuBERT في الشريط الجانبي الأيمن لمزيد من الأمثلة حول كيفية تطبيق HuBERT على مهام صوتية مختلفة.

يُظهر المثال أدناه كيفية تحويل الكلام إلى نص تلقائيًا باستخدام [Pipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.Pipeline) أو فئة [AutoModel](/docs/transformers/main/ar/model_doc/auto#transformers.AutoModel).

```python
from transformers import pipeline

pipeline = pipeline(
    task="automatic-speech-recognition",
    model="facebook/hubert-large-ls960-ft",
    device=0
)

pipeline("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac")
```

```python
import torch
from datasets import load_dataset

from transformers import AutoModelForCTC, AutoProcessor

dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation").sort("id")
sampling_rate = dataset.features["audio"].sampling_rate

processor = AutoProcessor.from_pretrained("facebook/hubert-base-ls960")
model = AutoModelForCTC.from_pretrained("facebook/hubert-base-ls960", device_map="auto", attn_implementation="sdpa")

inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt").to(model.device)
with torch.no_grad():
    logits = model(**inputs).logits
predicted_ids = torch.argmax(logits, dim=-1)

transcription = processor.batch_decode(predicted_ids)
print(transcription[0])
```

## التكميم

تقلل عملية التكميم العبء على الذاكرة في النماذج الكبيرة من خلال تمثيل الأوزان بدقة أقل. راجع نظرة عامة على [التكميم](../quantization/overview) للاطلاع على المزيد من واجهات التكميم المتاحة.

يستخدم المثال أدناه [bitsandbytes](../quantization/bitsandbytes) لتكميم الأوزان إلى 4 بتات.

```python
import torch
from datasets import load_dataset

from transformers import AutoModelForCTC, AutoProcessor, BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(
    load_in_8bit=True,
    llm_int8_threshold=6.0
)

dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation").sort("id")
sampling_rate = dataset.features["audio"].sampling_rate

processor = AutoProcessor.from_pretrained("facebook/hubert-base-ls960")
model = AutoModelForCTC.from_pretrained("facebook/hubert-base-ls960", quantization_config=bnb_config, device_map="auto", attn_implementation="sdpa")

inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt").to(model.device)
with torch.no_grad():
    logits = model(**inputs).logits
predicted_ids = torch.argmax(logits, dim=-1)

transcription = processor.batch_decode(predicted_ids)
print(transcription[0])
```

## ملاحظات

- تتوقع نماذج HuBERT إدخالًا صوتيًا خامًا على شكل مصفوفة عائمة أحادية البُعد مُعيَّنة عند 16kHz.

## HubertConfig[[transformers.HubertConfig]]

#### transformers.HubertConfig[[transformers.HubertConfig]]

```python
transformers.HubertConfig(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 = 32, hidden_size: int = 768, num_hidden_layers: int = 12, num_attention_heads: int = 12, intermediate_size: int = 3072, hidden_act: str = 'gelu', hidden_dropout: float | int = 0.1, activation_dropout: float | int = 0.1, attention_dropout: float | int = 0.1, feat_proj_layer_norm: bool = True, feat_proj_dropout: float | int = 0.0, final_dropout: float | int = 0.1, layerdrop: float | int = 0.1, initializer_range: float = 0.02, layer_norm_eps: float = 1e-05, feat_extract_norm: str = 'group', feat_extract_activation: str = 'gelu', conv_dim: list[int] | tuple[int, ...] = (512, 512, 512, 512, 512, 512, 512), conv_stride: list[int] | tuple[int, ...] = (5, 2, 2, 2, 2, 2, 2), conv_kernel: list[int] | tuple[int, ...] = (10, 3, 3, 3, 3, 2, 2), conv_bias: bool = False, num_conv_pos_embeddings: int = 128, num_conv_pos_embedding_groups: int = 16, conv_pos_batch_norm: bool = False, do_stable_layer_norm: bool = False, apply_spec_augment: bool = True, mask_time_prob: float | int = 0.05, mask_time_length: int = 10, mask_time_min_masks: int = 2, mask_feature_prob: float | int = 0.0, mask_feature_length: int = 10, mask_feature_min_masks: int = 0, ctc_loss_reduction: str = 'sum', ctc_zero_infinity: bool = False, use_weighted_layer_sum: bool = False, classifier_proj_size: int = 256, pad_token_id: int | None = 0, bos_token_id: int | None = 1, eos_token_id: int | list[int] | None = 2)
```

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

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

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

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

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

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

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

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

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

activation_dropout (`Union[float, int]`، *اختياري*، الافتراضي هو `0.1`) : نسبة dropout للتفعيلات داخل الطبقة المتصلة بالكامل.

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

feat_proj_layer_norm (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم تطبيق LayerNorm على مخرج مُشفِّر الميزات.

feat_proj_dropout (`float`، *اختياري*، القيمة الافتراضية 0.0) : احتمال الإسقاط (dropout) لمخرج مُشفِّر الميزات.

final_dropout (`float`، *اختياري*، القيمة الافتراضية 0.1) : احتمال الإسقاط (dropout) لطبقة الإسقاط النهائية في [Wav2Vec2ForCTC](/docs/transformers/main/ar/model_doc/wav2vec2#transformers.Wav2Vec2ForCTC).

layerdrop (`Union[float, int]`، *اختياري*، القيمة الافتراضية `0.1`) : احتمال LayerDrop. راجع [ورقة LayerDrop](see https://huggingface.co/papers/1909.11556) لمزيد من التفاصيل.

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

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

feat_extract_norm (`str`، *اختياري*، القيمة الافتراضية `"group"`) : المعيار الذي سيُطبَّق على طبقات الالتفاف أحادية البُعد في مُشفِّر الميزات. إما `"group"` لتطبيع المجموعات على الطبقة الأولى أحادية البُعد فقط، أو `"layer"` لتطبيع الطبقات على جميع طبقات الالتفاف أحادية البُعد.

feat_extract_activation (`str, `optional`, defaults to `"gelu"`) : The non-linear activation function (function or string) in the 1D convolutional layers of the feature extractor. If string, `"gelu"`, `"relu"`, `"selu"` and `"gelu_new"` are supported.

conv_dim (`tuple[int]`، *اختياري*، القيمة الافتراضية هي `(512, 512, 512, 512, 512, 512, 512)`) : مجموعة من الأعداد الصحيحة تحدد عدد قنوات الإدخال والإخراج لكل طبقة تلافيفية أحادية البعد في مشفّر الميزات. يحدد طول *conv_dim* عدد الطبقات التلافيفية أحادية البعد.

conv_stride (`tuple[int]`، *اختياري*، القيمة الافتراضية `(5, 2, 2, 2, 2, 2, 2)`) : مجموعة من الأعداد الصحيحة (tuple) تحدد الخطوة (stride) لكل طبقة تجميعية أحادية البعد (1D convolutional layer) في مشفّر الميزات. طول *conv_stride* يحدد عدد الطبقات التجميعية ويجب أن يطابق طول *conv_dim*.

conv_kernel (`tuple[int]`، *اختياري*، القيمة الافتراضية `(10, 3, 3, 3, 3, 3, 3)`) : مجموعة من الأعداد الصحيحة تحدد حجم النواة لكل طبقة تجميعية أحادية البعد في مشفّر الميزات. طول *conv_kernel* يحدد عدد الطبقات التجميعية ويجب أن يطابق طول *conv_dim*.

conv_bias (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كانت طبقات الالتفاف أحادية البعد تحتوي على انحياز.

num_conv_pos_embeddings (`int`، *اختياري*، القيمة الافتراضية 128) : عدد التضمينات الموضعية التلافيفية. يحدد حجم النواة لطبقة التضمينات الموضعية التلافيفية أحادية البعد.

num_conv_pos_embedding_groups (`int`، *اختياري*، القيمة الافتراضية 16) : عدد مجموعات طبقة التضمينات الموضعية للتمويه أحادي البعد.

conv_pos_batch_norm (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب استخدام batch norm بدلاً من weight norm في conv_pos

do_stable_layer_norm (`bool`, *اختياري*, الافتراضي `False`) : ما إذا كان سيتم تطبيق معمارية *stable* لطبقة normalization في مُشفِّر Transformer. `do_stable_layer_norm is True` يتوافق مع تطبيق طبقة normalization قبل طبقة الانتباه، بينما `do_stable_layer_norm is False` يتوافق مع تطبيق طبقة normalization بعد طبقة الانتباه.

apply_spec_augment (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان سيتم تطبيق زيادة البيانات *SpecAugment* على مخرجات مُشفِّر الميزات. للاطلاع على المرجع، راجع [SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition](https://huggingface.co/papers/1904.08779).

mask_time_prob (`float`، *اختياري*، القيمة الافتراضية 0.05) : النسبة المئوية (بين 0 و 1) لجميع متجهات الميزات على محور الزمن التي سيتم إخفاؤها. يولّد إجراء الإخفاء ''mask_time_prob*len(time_axis)/mask_time_length'' أقنعة مستقلة على المحور. إذا كنت تستنتج من احتمال اختيار كل متجه ميزات كبداية لنطاق المتجه الذي سيُخفى، فيجب أن يكون *mask_time_prob* هو `prob_vector_start*mask_time_length`. لاحظ أن التداخل قد يقلل من النسبة الفعلية للمتجهات المخفية. هذا الأمر ذو صلة فقط إذا كان `apply_spec_augment is True`.

mask_time_length (`int`، *اختياري*، القيمة الافتراضية 10) : طول متجه الامتداد على محور الزمن.

mask_time_min_masks (`int`، *اختياري*، القيمة الافتراضية 2)، : الحد الأدنى لعدد الأقنعة بطول `mask_feature_length` التي يتم توليدها على محور الزمن، في كل خطوة زمنية، بغض النظر عن `mask_feature_prob`. لا ينطبق إلا إذا كان ''mask_time_prob*len(time_axis)/mask_time_length < mask_time_min_masks''

mask_feature_prob (`float`، *اختياري*، القيمة الافتراضية 0.0) : النسبة المئوية (بين 0 و 1) من جميع متجهات الميزات على محور الميزات التي سيتم إخفاؤها. يولّد إجراء الإخفاء ''mask_feature_prob*len(feature_axis)/mask_time_length'' أقنعة مستقلة على المحور. إذا كنت تستنتج من احتمال اختيار كل متجه ميزات كبداية لنطاق المتجه الذي سيُخفى، فيجب أن يكون *mask_feature_prob* هو `prob_vector_start*mask_feature_length`. لاحظ أن التداخل قد يقلل من النسبة الفعلية للمتجهات المخفية. هذا الأمر ذو صلة فقط إذا كان `apply_spec_augment is True`.

mask_feature_prob (`Union[float, int]`، *اختياري*، القيمة الافتراضية `0.0`) : النسبة المئوية (بين 0 و 1) من جميع متجهات الميزات على محور الميزات التي سيتم إخفاؤها. يولّد إجراء الإخفاء `mask_feature_prob*len(feature_axis)/mask_time_length` أقنعة مستقلة على المحور. إذا كنت تستنتج من احتمال اختيار كل متجه ميزات كبداية لنطاق المتجه الذي سيتم إخفاؤه، فيجب أن يكون *mask_feature_prob* مساوياً لـ `prob_vector_start*mask_feature_length`. لاحظ أن التداخل قد يقلل من النسبة الفعلية للمتجهات المخفية. هذا الأمر ذو صلة فقط إذا كان `apply_spec_augment` هو `True`.

mask_feature_length (`int`، *اختياري*، القيمة الافتراضية 10) : طول متجه الامتداد على محور الميزة.

mask_feature_min_masks (`int`، *اختياري*، القيمة الافتراضية 0)، : الحد الأدنى لعدد الأقنعة بطول `mask_feature_length` التي يتم توليدها على طول محور الميزة، في كل خطوة زمنية، بغض النظر عن `mask_feature_prob`. لا ينطبق إلا إذا كان ''mask_feature_prob*len(feature_axis)/mask_feature_length < mask_feature_min_masks''

ctc_loss_reduction (`str`، *اختياري*، القيمة الافتراضية `"sum"`) : يحدد عملية الاختزال (reduction) التي تُطبَّق على مخرجات `torch.nn.CTCLoss`. لا ينطبق إلا عند تدريب نسخة من [HubertForCTC](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertForCTC).

ctc_loss_reduction (`str`، *اختياري*، الافتراضي `sum`) : يحدد عملية الاختزال (reduction) التي تُطبَّق على مخرجات `torch.nn.CTCLoss`. لا ينطبق إلا أثناء التدريب.

ctc_zero_infinity (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم تصفير الخسائر اللانهائية والتدرجات المرتبطة بها لـ `torch.nn.CTCLoss`. تحدث الخسائر اللانهائية بشكل رئيسي عندما تكون المدخلات قصيرة جدًا بحيث لا يمكن محاذاتها مع الأهداف. يكون ذا صلة فقط عند تدريب نسخة من [HubertForCTC](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertForCTC).

use_weighted_layer_sum (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام متوسط مرجح لمخرجات الطبقات مع أوزان متعلمة. لا ينطبق إلا عند استخدام كائن من [HubertForSequenceClassification](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertForSequenceClassification).

classifier_proj_size (`int`، *اختياري*، القيمة الافتراضية 256) : بُعد الإسقاط قبل متوسط تجميع الرموز (token mean-pooling) للتصنيف.

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

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

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

هذه فئة الإعدادات المخزنة لإعدادات نموذج HubertModel. تُستخدم لاستحداث نموذج Hubert وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [facebook/hubert-base-ls960](https://huggingface.co/facebook/hubert-base-ls960)

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

مثال:

```python
>>> from transformers import HubertModel, HubertConfig

>>> # Initializing a Hubert facebook/hubert-base-ls960 style configuration
>>> configuration = HubertConfig()

>>> # Initializing a model from the facebook/hubert-base-ls960 style configuration
>>> model = HubertModel(configuration)

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

## HubertModel[[transformers.HubertModel]]

#### transformers.HubertModel[[transformers.HubertModel]]

```python
transformers.HubertModel(config: HubertConfig)
```

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

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

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

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

يرث هذا النموذج من [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.HubertModel.forward]]

```python
forward(input_values: typing.Optional[torch.Tensor], attention_mask: typing.Optional[torch.Tensor] = None, mask_time_indices: typing.Optional[torch.Tensor] = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

input_values (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قيم رقمية عشرية لموجة الصوت الخام المدخلة. يمكن الحصول على هذه القيم عن طريق تحميل ملف صوتي من نوع `.flac` أو `.wav` في مصفوفة من النوع `list[float]`، أو `numpy.ndarray`، أو `torch.Tensor`، *على سبيل المثال* باستخدام مكتبة torchcodec (`pip install torchcodec`) أو مكتبة soundfile (`pip install soundfile`). لتحضير المصفوفة إلى `input_values`، يجب استخدام [AutoProcessor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoProcessor) لإضافة الحشو والتحويل إلى متجه من النوع `torch.Tensor`. راجع [Wav2Vec2Processor.__call__()](/docs/transformers/main/ar/model_doc/wav2vec2#transformers.Wav2Vec2Processor.__call__) للتفاصيل.

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

mask_time_indices (`torch.BoolTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس لإخفاء الميزات المستخرجة لخسارة التباينية. عند التواجد في وضع التدريب، يتعلم النموذج التنبؤ بالميزات المستخرجة المخفية في فضاء *config.proj_codevector_dim*.

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

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

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

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

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

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

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

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) -- تسلسل من حالات الإخفاء (hidden-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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
>>> from transformers import AutoProcessor, HubertModel
>>> from datasets import load_dataset

>>> processor = AutoProcessor.from_pretrained("facebook/hubert-large-ls960-ft")
>>> model = HubertModel.from_pretrained("facebook/hubert-large-ls960-ft")

>>> def map_to_array(example):
...     example["speech"] = example["audio"]["array"]
...     return example

>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> ds = ds.map(map_to_array)

>>> input_values = processor(ds["speech"][0], return_tensors="pt").input_values  # Batch size 1
>>> hidden_states = model(input_values).last_hidden_state
```

## HubertForCTC[[transformers.HubertForCTC]]

#### transformers.HubertForCTC[[transformers.HubertForCTC]]

```python
transformers.HubertForCTC(config: HubertConfig, target_lang: str | None = None)
```

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

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

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

target_lang (`str`، *اختياري*) : معرّف لغة أوزان المُكيّف. تُخزَّن أوزان المُكيّف في صيغة adapter..safetensors أو adapter..bin. لا ينطبق إلا عند استخدام نسخة من [HubertForCTC](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertForCTC) مع المُكيّفات. يستخدم 'eng' افتراضيًا.

نموذج Hubert مع رأس `language modeling` في الأعلى لتصنيف التسلسلات الزمنية المتصلة (CTC).

يرث هذا النموذج من [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.HubertForCTC.forward]]

```python
forward(input_values: typing.Optional[torch.Tensor], attention_mask: 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/hubert/modeling_hubert.py#L972)

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

input_values (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قيم رقمية عشرية لموجة الصوت الخام المدخلة. يمكن الحصول على هذه القيم عن طريق تحميل ملف صوتي من نوع `.flac` أو `.wav` في مصفوفة من النوع `list[float]`، أو `numpy.ndarray`، أو `torch.Tensor`، *على سبيل المثال* باستخدام مكتبة torchcodec (`pip install torchcodec`) أو مكتبة soundfile (`pip install soundfile`). لتحضير المصفوفة إلى `input_values`، يجب استخدام [AutoProcessor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoProcessor) لإضافة الحشو والتحويل إلى متجه من النوع `torch.Tensor`. راجع [Wav2Vec2Processor.__call__()](/docs/transformers/main/ar/model_doc/wav2vec2#transformers.Wav2Vec2Processor.__call__) للتفاصيل.

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

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

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

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

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

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

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

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

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

مثال:

```python
>>> from transformers import AutoProcessor, HubertForCTC
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> processor = AutoProcessor.from_pretrained("facebook/hubert-base-ls960")
>>> model = HubertForCTC.from_pretrained("facebook/hubert-base-ls960")

>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
...     logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)

>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
...

>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids

>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
...
```

## HubertForSequenceClassification[[transformers.HubertForSequenceClassification]]

#### transformers.HubertForSequenceClassification[[transformers.HubertForSequenceClassification]]

```python
transformers.HubertForSequenceClassification(config: HubertConfig)
```

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

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

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

نموذج Hubert مع رأس تصنيف تسلسلي في الأعلى (طبقة خطية فوق المخرجات المجمعة) لمهام مثل SUPERB Keyword Spotting.

يرث هذا النموذج من [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.HubertForSequenceClassification.forward]]

```python
forward(input_values: typing.Optional[torch.Tensor], attention_mask: 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/hubert/modeling_hubert.py#L1063)

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

input_values (`torch.Tensor` من الشكل `(batch_size, sequence_length)`) : قيم رقمية عشرية لموجة الصوت الخام المُدخلة. يمكن الحصول على هذه القيم عن طريق تحميل ملف صوتي من نوع `.flac` أو `.wav` في مصفوفة من النوع `list[float]`، أو `numpy.ndarray`، أو `torch.Tensor`، *على سبيل المثال* باستخدام مكتبة torchcodec (`pip install torchcodec`) أو مكتبة soundfile (`pip install soundfile`). لتحضير المصفوفة إلى `input_values`، يجب استخدام [AutoProcessor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoProcessor) لإضافة الحشو والتحويل إلى متجه من النوع `torch.Tensor`. راجع `HubertProcessor.__call__` للتفاصيل.

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

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`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([HubertConfig](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertConfig)) والمدخلات.

تتجاوز طريقة [HubertForSequenceClassification](/docs/transformers/main/ar/model_doc/hubert#transformers.HubertForSequenceClassification) الخاصة بالتقديم (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, HubertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/hubert-base-ls960")
>>> model = HubertForSequenceClassification.from_pretrained("facebook/hubert-base-ls960")

>>> 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 = HubertForSequenceClassification.from_pretrained("facebook/hubert-base-ls960", 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, HubertForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/hubert-base-ls960")
>>> model = HubertForSequenceClassification.from_pretrained("facebook/hubert-base-ls960", 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 = HubertForSequenceClassification.from_pretrained(
...     "facebook/hubert-base-ls960", 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
```

