# مستخرجات الميزات

تقوم مستخرجات الميزات بمعالجة بيانات الصوت مسبقاً إلى الصيغة الصحيحة لنموذج معين. فهي تأخذ إشارة الصوت الخام وتحوّلها إلى متجه (Tensor) يمكن إمداده إلى النموذج. يعتمد شكل المتجه على النموذج، لكن مستخرج الميزات سيقوم بمعالجة بيانات الصوت مسبقاً بشكل صحيح نيابةً عنك بناءً على النموذج الذي تستخدمه. كما تتضمن مستخرجات الميزات طرقاً للتعبئة (Padding) والقطع (Truncation) وإعادة أخذ العينات (Resampling).

استدعِ [from_pretrained()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoFeatureExtractor.from_pretrained) لتحميل مستخرج الميزات وإعدادات المعالج المسبق من [Hub](https://hf.co/models) على Hugging Face أو من مجلد محلي. يتم حفظ إعدادات مستخرج الميزات والمعالج المسبق في ملف [preprocessor_config.json](https://hf.co/openai/whisper-tiny/blob/main/preprocessor_config.json).

مرّر إشارة الصوت، التي تُخزَّن عادةً في `array`، إلى مستخرج الميزات، واضبط معامل `sampling_rate` على معدل أخذ العينات الخاص بالنماذج الصوتية المُسبقة التدريب. من المهم أن يتطابق معدل أخذ العينات لبيانات الصوت مع معدل أخذ العينات للبيانات التي تم تدريب نموذج صوتي مُسبق عليها.

```py
from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
processed_sample = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_sample
{'input_values': [array([ 9.4472744e-05,  3.0777880e-03, -2.8888427e-03, ...,
       -2.8888427e-03,  9.4472744e-05,  9.4472744e-05], dtype=float32)]}
```

يعيد مستخرج الميزات مدخلًا، `input_values`، جاهزًا لاستهلاكه من قبل النموذج.

يقودك هذا الدليل خطوة بخطوة عبر فئات مستخرج الميزات وكيفية معالجة بيانات الصوت مسبقًا.

## فئات مستخرج الميزات

ترث مستخرِقات الميزات في Transformers من الفئة الأساسية [SequenceFeatureExtractor](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.SequenceFeatureExtractor) التي تُعدّ فئة فرعية من [FeatureExtractionMixin](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.FeatureExtractionMixin).

- يوفر [SequenceFeatureExtractor](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.SequenceFeatureExtractor) طريقةً لـ [pad()](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.SequenceFeatureExtractor.pad) تسلسلات حتى طول معين لتجنب عدم تساوي أطوال التسلسلات.
- يوفر [FeatureExtractionMixin](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.FeatureExtractionMixin) الدالتين [from_pretrained()](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.FeatureExtractionMixin.from_pretrained) و[save_pretrained()](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.FeatureExtractionMixin.save_pretrained) لتحميل واستخراج الميزات وحفظها.

هناك طريقتان لتحميل مستخرج الميزات: [AutoFeatureExtractor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoFeatureExtractor) وفئة مستخرج ميزات مخصصة لنموذج معين.

تحمّل واجهة [AutoClass](./model_doc/auto) تلقائيًا مستخرج الميزات الصحيح للنموذج المعطى.

استخدم [from_pretrained()](/docs/transformers/main/ar/model_doc/auto#transformers.AutoFeatureExtractor.from_pretrained) لتحميل مستخرج الميزات.

```py
from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")
```

لكل نموذج صوتي مُدرَّب مسبقًا مُستخرج ميزات محدد مرتبط به لمعالجة بيانات الصوت بشكل صحيح. عند تحميل مُستخرج ميزات، فإنه يسترجع إعدادات مُستخرج الميزات (حجم الميزات، طول المقطع، إلخ) من [preprocessor_config.json](https://hf.co/openai/whisper-tiny/blob/main/preprocessor_config.json).

يمكن تحميل مستخرج الميزات مباشرةً من صفحته الخاصة بالنموذج.

```py
from transformers import WhisperFeatureExtractor

feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")
```

## المعالجة المسبقة

يتوقع مستخرج الميزات أن تكون المدخلات على شكل متجه PyTorch ذي شكل معين. يمكن أن يختلف شكل المدخلات الدقيق اعتماداً على نموذج الصوت المحدد الذي تستخدمه.

على سبيل المثال، يتوقع [Whisper](./model_doc/whisper) أن يكون `input_features` متجهًا (tensor) بأبعاد `(batch_size, feature_size, sequence_length)` بينما يتوقع [Wav2Vec2](https://hf.co/docs/transformers/model_doc/wav2vec2) أن يكون `input_values` متجهًا بأبعاد `(batch_size, sequence_length)`.

يولّد مستخرج الميزات الشكل الصحيح للمدخلات لأي نموذج صوتي تستخدمه.

يحدد مستخرج الميزات أيضًا معدل أخذ العينات (عدد قيم إشارة الصوت المأخوذة في الثانية) لملفات الصوت. يجب أن يتطابق معدل أخذ العينات لبيانات الصوت الخاصة بك مع معدل أخذ العينات للبيانات التي تم تدريب النموذج المُسبق عليها. عادةً ما يُذكر هذا القيمة في بطاقة النموذج.

حمّل مجموعة بيانات ومستخرج ميزات باستخدام [from_pretrained()](/docs/transformers/main/ar/main_classes/feature_extractor#transformers.FeatureExtractionMixin.from_pretrained).

```py
from datasets import load_dataset, Audio
from transformers import AutoFeatureExtractor

dataset = load_dataset("PolyAI/minds14", name="en-US", split="train")
feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")
```

اطّلع على المثال الأول من مجموعة البيانات واطّلع على عمود `audio` الذي يحتوي على `array`، وهو إشارة الصوت الخام.

```py
dataset[0]["audio"]["array"]
array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
        0.        ,  0.        ])
```

يعالج مستخرج الميزات `array` إلى صيغة الإدخال المتوقعة لنموذج صوتي معيّن. استخدم معامل `sampling_rate` لضبط معدل أخذ العينات المناسب.

```py
processed_dataset = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=16000)
processed_dataset
{'input_values': [array([ 9.4472744e-05,  3.0777880e-03, -2.8888427e-03, ...,
       -2.8888427e-03,  9.4472744e-05,  9.4472744e-05], dtype=float32)]}
```

### الحشو

تُعدّ اختلافات طول تسلسلات الصوت مشكلة، لأن Transformers يتوقع أن تكون جميع التسلسلات بنفس الطول حتى يمكن تجميعها في دفعات. ولا يمكن تجميع التسلسلات ذات الأطوال غير المتساوية في دفعات.

```py
dataset[0]["audio"]["array"].shape
(86699,)

dataset[1]["audio"]["array"].shape
(53248,)
```

تضيف عملية الحشو رمز حشو خاصًا *padding token* لضمان أن جميع التسلسلات لها نفس الطول. يضيف مستخرج الميزات `0` - ويُفسَّر كصمت - إلى `array` لحشوه. اضبط `padding=True` لحشو التسلسلات إلى طول أطول تسلسل في الدفعة.

```py
def preprocess_function(examples):
    audio_arrays = [x["array"] for x in examples["audio"]]
    inputs = feature_extractor(
        audio_arrays,
        sampling_rate=16000,
        padding=True,
    )
    return inputs

processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(86699,)

processed_dataset["input_values"][1].shape
(86699,)
```

### الاقتطاع

لا يمكن للنماذج معالجة تسلسلات تتجاوز طولًا معينًا قبل التعطّل.

القطع (Truncation) هو استراتيجية لإزالة الرموز الزائدة من التسلسل لضمان عدم تجاوزه للحد الأقصى للطول. اضبط `truncation=True` لقطع التسلسل إلى الطول المحدد في معامل `max_length`.

```py
def preprocess_function(examples):
    audio_arrays = [x["array"] for x in examples["audio"]]
    inputs = feature_extractor(
        audio_arrays,
        sampling_rate=16000,
        max_length=50000,
        truncation=True,
    )
    return inputs

processed_dataset = preprocess_function(dataset[:5])
processed_dataset["input_values"][0].shape
(50000,)

processed_dataset["input_values"][1].shape
(50000,)
```

### إعادة أخذ العينات

يمكن لمكتبة [Datasets](https://hf.co/docs/datasets/index) أيضاً إعادة أخذ عينات من بيانات الصوت لتطابق معدل أخذ العينات المتوقع لنماذج الصوت. تعيد هذه الطريقة أخذ عينات من بيانات الصوت أثناء تحميلها، مما قد يكون أسرع من إعادة أخذ عينات مجموعة البيانات بأكملها في مكانها.

مجموعة البيانات الصوتية التي كنت تعمل عليها لها معدل أخذ عينات يبلغ 8kHz، بينما يتوقع النموذج المُدرَّب مسبقاً 16kHz.

```py
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
 'array': array([ 0.        ,  0.00024414, -0.00024414, ..., -0.00024414,
         0.        ,  0.        ]),
 'sampling_rate': 8000}
```

استدعِ [cast_column](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.cast_column) على العمود `audio` لرفع معدل أخذ العينات إلى 16kHz.

```py
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
```

عند تحميل عينة مجموعة البيانات، يتم إعادة أخذ عينات منها الآن إلى 16kHz.

```py
dataset[0]["audio"]
{'path': '/root/.cache/huggingface/datasets/downloads/extracted/f507fdca7f475d961f5bb7093bcc9d544f16f8cab8608e772a2ed4fbeb4d6f50/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
 'array': array([ 1.70562416e-05,  2.18727451e-04,  2.28099874e-04, ...,
         3.43842403e-05, -5.96364771e-06, -1.76846661e-05]),
 'sampling_rate': 16000}
```

