Transformers documentation

إضافة مكونات معالجة الصوت

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

إضافة مكونات معالجة الصوت

تتطلب نماذج الصوت مستخرج ميزات يمكن الوصول إليه من خلال نقطة الدخول AutoFeatureExtractor.

بالنسبة إلى خطوات النموذج والتكوين، اتبع أولاً الدليل المنفصل.

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

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

أنشئ feature_extraction_<model_name>.py في مجلد النموذج. ورث من SequenceFeatureExtractor حتى تحصل الفئة الجديدة على سلوك مشترك للتوسيد (padding) والقطع (truncation) والحفظ والتحميل.

from ...feature_extraction_sequence_utils import SequenceFeatureExtractor


class MyModelFeatureExtractor(SequenceFeatureExtractor):
    model_input_names = ["input_features", "attention_mask"]

    def __init__(self, feature_size=80, sampling_rate=16000, padding_value=0.0, **kwargs):
        super().__init__(feature_size=feature_size, sampling_rate=sampling_rate, padding_value=padding_value, **kwargs)

    def __call__(self, raw_speech, sampling_rate=None, **kwargs):
        if sampling_rate is not None and sampling_rate != self.sampling_rate:
            raise ValueError(f"`sampling_rate` must be {self.sampling_rate}, but got {sampling_rate}.")

        # Convert raw_speech to model features here.
        ...

اجعل المُنشئ صغيرًا وقابلًا للتسلسل. خزّن كل قيمة مطلوبة لإعادة إنتاج المعالجة المسبقة كخاصية للكائن، وتجنّب تخزين القيم التي تُستخدم وقت التشغيل فقط، مثل الملفات المفتوحة، أو الأجهزة، أو مصفوفات الصوت المُفكّكة.

يجب على طريقة __call__ التحقق من معدل أخذ العينات المُدخل عندما يمرّر المستخدمون sampling_rate. إذا اختلف معدل الإدخال عن المعدل المتوقع للنموذج، فقم برفع خطأ بدلاً من إعادة أخذ العينات بصمت.

احفظ مستخرج الميزات مع نقطة الحفظ عن طريق إنشاء مثيل له في سكربت التحويل واستدعاء save_pretrained(). لا تنشئ أو تحرر ملفات إعدادات ما قبل المعالجة يدويًا.

راجع Gemma4AudioFeatureExtractor للاطلاع على التفاصيل.

تسجيل الفئات

أضف الفئات الجديدة إلى __all__ في أسفل الملف، ثم أعد توليد __init__.py باستخدام:

python utils/check_inits.py --fix_and_overwrite

خريطة الفئة الجديدة إلى إعدادات النموذج بحيث يمكن لـ AutoFeatureExtractor تحميلها. أضف إدخالاً إلى FEATURE_EXTRACTOR_MAPPING_NAMES في src/transformers/models/auto/feature_extraction_auto.py، متبعاً نمط الإدخالات المجاورة. ثم تحقق من ظهور نوع النموذج هناك تحت FEATURE_EXTRACTOR_MAPPING_NAMES لـ AutoFeatureExtractor.

الاختبار

أضِف اختبارات لكل مكوّن معالجة الصوت في مجلد اختبارات النموذج. عادةً ما تُوضع اختبارات مستخرج الميزات في tests/models/<model_name>/test_feature_extraction_<model_name>.py.

بالنسبة لاستخراجات الميزات التي ترث من SequenceFeatureExtractor، ارث من SequenceFeatureExtractionTestMixin. يغطي الميكسِن سلوك الحفظ والتحميل، والتعبئة (padding)، والقطع (truncation)، وتحويل المصفوفات (tensors)، وخصائص مستخرجات الميزات الشائعة. قدّم كائن مُختبِر (tester) يحتوي على prepare_feat_extract_dict() وprepare_inputs_for_common() حتى يتمكن الميكسِن من إنشاء مستخرج الميزات وبناء مدخلات صوتية قصيرة وهمية.

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin

class MyModelFeatureExtractionTest(SequenceFeatureExtractionTestMixin, unittest.TestCase):
    feature_extraction_class = MyModelFeatureExtractor

    def setUp(self):
        self.feat_extract_tester = MyModelFeatureExtractionTester(self)

أضِف اختبارات مركّزة للسلوك الخاص بالنموذج الذي لا يعرفه الميكسِن. بالنسبة لاستخراجات ميزات الصوت، يعني ذلك عادةً التحقق من شكل الميزة الذي يعيده __call__، والتحقق من أن sampling_rate غير الصحيح يثير خطأً، والتحقق من أي تطبيع مخصص أو حساب للميزات.

إذا كان النموذج يحتوي أيضًا على ProcessorMixin يغلّف مستخرج الميزات، أضف tests/models/<model_name>/test_processing_<model_name>.py وارث من ProcessorTesterMixin. اضبط processor_class وأعد تعريف أساليب الفئة _setup_<component>() للمكونات التي لا يمكن إنشاؤها دون حُجج. استخدم _setup_test_attributes() لعرض الرموز الوهمية المستخدمة في اختبارات المعالج الشائعة.

from ...test_processing_common import ProcessorTesterMixin

class MyModelProcessorTest(ProcessorTesterMixin, unittest.TestCase):
    processor_class = MyModelProcessor

    @classmethod
    def _setup_feature_extractor(cls):
        return cls._get_component_class_from_processor("feature_extractor")(sampling_rate=16000)

    @classmethod
    def _setup_test_attributes(cls, processor):
        cls.audio_token = getattr(processor, "audio_token", "")

الخطوات التالية

Update on GitHub