Transformers documentation
مستخرجات الميزات
مستخرجات الميزات
تقوم مستخرِجات الميزات بمعالجة بيانات الصوت مسبقًا إلى التنسيق الصحيح لنموذج معين. فهي تأخذ إشارة الصوت الخام وتحوّلها إلى متجه (Tensor) يمكن تقديمه إلى النموذج. يعتمد شكل المتجه على النموذج، لكن مستخرج الميزات سيقوم بمعالجة بيانات الصوت مسبقًا بشكل صحيح نيابةً عنك بناءً على النموذج الذي تستخدمه. كما تتضمن مستخرِجات الميزات طرقًا للتعبئة (Padding) والقطع (Truncation) وإعادة أخذ العينات (Resampling).
استدعِ from_pretrained() لتحميل مستخرج الميزات وإعدادات المعالج المسبق من Hub على Hugging Face أو من مجلد محلي. يتم حفظ إعدادات مستخرج الميزات والمعالج المسبق في ملف preprocessor_config.json.
مرّر إشارة الصوت، التي تُخزَّن عادةً في array، إلى مستخرج الميزات، واضبط معامل sampling_rate على معدل أخذ العينات الخاص بالنماذج الصوتية المُسبقة التدريب. من المهم أن يتطابق معدل أخذ العينات لبيانات الصوت مع معدل أخذ العينات للبيانات التي تم تدريب نموذج صوتي مُسبق عليها.
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 التي تُعدّ فئة فرعية من FeatureExtractionMixin.
- يوفر SequenceFeatureExtractor طريقةً لـ pad() تسلسلات حتى طول معين لتجنب عدم تساوي أطوال التسلسلات.
- يوفر FeatureExtractionMixin الدالتين from_pretrained() وsave_pretrained() لتحميل واستخراج الميزات وحفظها.
هناك طريقتان لتحميل مستخرج الميزات: AutoFeatureExtractor وفئة مستخرج ميزات مخصصة لنموذج معين.
تحمّل واجهة AutoClass تلقائيًا مستخرج الميزات الصحيح للنموذج المعطى.
استخدم from_pretrained() لتحميل مستخرج الميزات.
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained("openai/whisper-tiny")لكل نموذج صوتي مُدرَّب مسبقًا مُستخرج ميزات محدد مرتبط به لمعالجة بيانات الصوت بشكل صحيح. عند تحميل مُستخرج ميزات، فإنه يسترجع إعدادات مُستخرج الميزات (حجم الميزات، طول المقطع، إلخ) من preprocessor_config.json.
يمكن تحميل مستخرج الميزات مباشرةً من صفحته الخاصة بالنموذج.
from transformers import WhisperFeatureExtractor
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")المعالجة المسبقة
يتوقع مستخرج الميزات أن تكون المدخلات على شكل متجه PyTorch ذي شكل معين. يمكن أن يختلف شكل المدخلات الدقيق اعتماداً على نموذج الصوت المحدد الذي تستخدمه.
على سبيل المثال، يتوقع Whisper أن يكون input_features متجهًا (tensor) بأبعاد (batch_size, feature_size, sequence_length) بينما يتوقع Wav2Vec2 أن يكون input_values متجهًا بأبعاد (batch_size, sequence_length).
يولّد مستخرج الميزات الشكل الصحيح للمدخلات لأي نموذج صوتي تستخدمه.
يحدد مستخرج الميزات أيضًا معدل أخذ العينات (عدد قيم إشارة الصوت المأخوذة في الثانية) لملفات الصوت. يجب أن يتطابق معدل أخذ العينات لبيانات الصوت الخاصة بك مع معدل أخذ العينات للبيانات التي تم تدريب النموذج المُسبق عليها. عادةً ما يُذكر هذا القيمة في بطاقة النموذج.
حمّل مجموعة بيانات ومستخرج ميزات باستخدام from_pretrained().
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، وهو إشارة الصوت الخام.
dataset[0]["audio"]["array"]
array([ 0. , 0.00024414, -0.00024414, ..., -0.00024414,
0. , 0. ])يعالج مستخرج الميزات array إلى صيغة الإدخال المتوقعة لنموذج صوتي معيّن. استخدم معامل sampling_rate لضبط معدل أخذ العينات المناسب.
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 يتوقع أن تكون جميع التسلسلات بنفس الطول حتى يمكن تجميعها في دفعات (batching). ولا يمكن تجميع التسلسلات ذات الأطوال غير المتساوية في دفعات.
dataset[0]["audio"]["array"].shape
(86699,)
dataset[1]["audio"]["array"].shape
(53248,)تضيف عملية الحشو رمز حشو خاصًا padding token لضمان أن جميع التسلسلات لها نفس الطول. يضيف مستخرج الميزات 0 - ويُفسَّر كصمت - إلى array لحشوه. اضبط padding=True لحشو التسلسلات إلى طول أطول تسلسل في الدفعة.
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.
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 إعادة أخذ عينات من بيانات الصوت لتطابق معدل أخذ العينات المتوقع لنماذج الصوت. تعيد هذه الطريقة أخذ العينات من بيانات الصوت أثناء تحميلها، مما قد يكون أسرع من إعادة أخذ العينات من مجموعة البيانات بأكملها في مكانها.
مجموعة بيانات الصوت التي تعمل عليها لها معدل أخذ عينات يبلغ 8kHz بينما يتوقع النموذج المُسبق التدريب معدل 16kHz.
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 على العمود audio لرفع معدل أخذ العينات إلى 16kHz.
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))عند تحميل عينة مجموعة البيانات، يتم إعادة أخذ عينات منها الآن إلى 16kHz.
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}