انتقل إلى المحتوى

شروحات

كيف خفّضت NVIDIA خطأ التعرّف على اللهجتين النجدية والحجازية من 55% إلى 30%: دروس ضبط نموذج كلام للهجات العربية

شرح لتجربة NVIDIA في ضبط Nemotron 3.5 ASR على 134 ساعة من الكلام السعودي: تصفية خفيفة للبيانات، ومزج 10% من بيانات قديمة لمنع النسيان، وتجميع بالطول، ثم تحسينات وقت التشغيل دون إعادة تدريب.

كيف خفّضت NVIDIA خطأ التعرّف على اللهجتين النجدية والحجازية من 55% إلى 30%: دروس ضبط نموذج كلام للهجات العربية

المستوى: متقدّم — يفترض معرفة بـPython والضبط الدقيق ومقياسَي WER وCER.
وقت القراءة: نحو 10 دقائق.
هتحتاج: إطار NVIDIA NeMo وPyTorch، وبيانات كلام مسمّاة باللهجة المستهدفة. التجربة الأصلية استخدمت بطاقتي RTX PRO 6000 Blackwell.

نموذج Nemotron 3.5 ASR من NVIDIA يدعم النسخ المتدفّق لـ40 لغة ومنطقة، منها العربية. لكن النموذج الذي يفهم الفصحى والإنجليزية قد يتعثّر مع اللهجتين النجدية والحجازية. وضبطه على اللهجة فقط قد يُضعف ما يعرفه من لغات أخرى. هذا ما تشرحه تجربة لفريق من NVIDIA على مجموعة بيانات SADA 2022 السعودية، ودروسها تصلح لأي لهجة عربية.

الخطوة 1: اختر هدفًا ضيّقًا ونظّف البيانات بخفّة

البداية الأولى، أي ضبط كامل على كل اللهجات الإحدى عشرة في SADA، تحسّنت قليلًا ثم توقّفت: من 49.5% معدّل خطأ كلمات (WER) إلى 46.7%. الذي نجح هو تضييق الهدف إلى اللهجتين المطلوبتين للنشر فقط.

والتنظيف كان «خفيفًا» عن قصد: حذف ما لا يستطيع النموذج تعلّمه، لا الكلام الصعب. مثلًا، تضع SADA علامة «غير واضح» على الكلام غير المسموع، والنموذج لا يستطيع إخراج هذه العلامة، فكل ظهور لها خطأ لا مفرّ منه. وحُذفت أيضًا المقاطع الأقصر من 0.5 ثانية أو الأطول من 30 ثانية، والمقاطع التي يدلّ معدّل حروفها على نص غير متطابق. بقي 103,559 من 125,490 مقطعًا (82.5%).

الخطوة 2: امزج بيانات قديمة لمنع النسيان

الضبط على الكلام السعودي وحده يمحو ما تعلّمه النموذج سابقًا، وهو «النسيان الكارثي» (Catastrophic Forgetting). الحلّ «إعادة العرض» (Replay): 90% كلام سعودي، و7% إنجليزية و3% عربية من مجموعة FLEURS. والمهم أن تُعلن النسب في إعداد المزج بدل دمج الملفات، لأن الخلط العشوائي قد لا يصل إلى الصفوف المضافة في نهاية ملف كبير إلا متأخرًا جدًا:

from omegaconf import OmegaConf
mix = OmegaConf.create([
    {"type": "nemo", "manifest_filepath": "sada_train.jsonl", "weight": 0.90},
    {"type": "nemo", "manifest_filepath": "fleurs_en.jsonl", "weight": 0.07},
    {"type": "nemo", "manifest_filepath": "fleurs_ar.jsonl", "weight": 0.03},
])
OmegaConf.save(mix, "input_cfg.yaml")
cfg.train_ds.manifest_filepath = None
cfg.train_ds.input_cfg = "input_cfg.yaml"

الخطوة 3: جمّع المقاطع حسب الطول

تجميع المقاطع المتقاربة في الطول في الدفعة نفسها يقلّل الحشو ويجعل التدريب عمليًا للمرمّزات المتدفّقة:

cfg.train_ds.use_bucketing = True
cfg.train_ds.num_buckets = 30
cfg.train_ds.batch_size = None
cfg.train_ds.batch_duration = 400.0
cfg.train_ds.quadratic_duration = 15.0

انتبه: num_buckets وحده لا يفعل شيئًا، لأن use_bucketing قيمته الافتراضية False. ضبط عدد المجموعات دون تفعيل الخيار لا يعطي أي خطأ، فيبدو الإعداد صحيحًا وهو معطّل.

النتيجة

بالتغييرات الثلاثة، خلال 12,000 خطوة ونحو 4.5 ساعة على بطاقتين:

  • النجدية والحجازية: معدّل خطأ الكلمات من 55.05% إلى 29.96%، والحروف من 31.63% إلى 12.18%.
  • مجموعة SADA كاملة: من 58.84% إلى 35.61%، أي أن اللهجات التي لم تُدرَّب عليها لم تتضرّر.
  • الإنجليزية في FLEURS تحسّنت قليلًا من 11.04% إلى 10.42%، والعربية في FLEURS من 12.67% إلى 11.41%.

الخطوة 4: كم طبقة تحدّث؟

للنموذج 24 طبقة في المرمّز. تحديث آخر 6 طبقات أعطى 33.42%، وآخر 8 أعطى 32.32%، وكل الطبقات 29.96%. مع 134 ساعة من البيانات، كانت السعة الأكبر أفضل دائمًا. لكن الفريق ينبّه إلى أن هذه نتيجة لحجم بياناتهم: تجميد الطبقات خيار صحيح حين تكون البيانات أقل أو الذاكرة محدودة.

الخطوة 5: تحسين دون إعادة تدريب

  • زيادة السياق المستقبلي للمرمّز من 3 إطارات إلى 13 خفّضت الخطأ 1.31 نقطة، مقابل نحو 800 ميلي ثانية تأخيرًا إضافيًا.
  • البحث الشعاعي (Beam Search) بعرض 8 مع السياق الأكبر خفّض الخطأ 2.71 نقطة إلى 27.25%.
  • عرض الشعاع 4 قدّم أفضل توازن بين السرعة والدقّة في اختبارهم.
  • اضبط strip_lang_tags=True، وإلّا ظهر وسم اللغة كنص حرفي وحُسب خطأ إضافة في كل مقطع.

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

جرّب بنفسك

إن كانت لديك بيانات صوتية مسمّاة بلهجة عربية، ابدأ كما بدأ الفريق: تجربة بسيطة على مجموعة واحدة مع مجموعة تقييم ثابتة، وسجّل معدّل الخطأ قبل الضبط. ثم أضِف مزج إعادة العرض وتأكّد من قياس اللغات الأخرى أيضًا، فالتحسّن في لهجتك لا يكفي إن خسرت الفصحى. وتشير NVIDIA إلى دفتر ضبط مرافق ومهارة جاهزة لضبط Nemotron ASR لتطبيق الوصفة نفسها. ويقول الفريق إن هذه النتائج ليست دليلًا على كل لهجة عربية أو كل بيئة نشر.

المصادر: NVIDIA Developer — 2026-10-01