إسماعيل بن علا

Speech Emotion Recognition

ثمانية مصنِّفات صوتية مختبرة على متحدثين غير مسموعين

الصوت · أكتوبر 2026 · مكتمل

اكتشاف المشاعر في الصوت، ومعرفة أي طريقة لتقديم الصوت إلى النموذج تصمد أمام متحدث لم يسمعه من قبل.

التقنياتPyTorchHugging Face Transformerslibrosascikit-learnNumPyMatplotlib

Speech Emotion Recognition — نظرة عامة

نظرة عامة

تكمن المشاعر في الكلام في طريقة قول الجملة لا في مضمونها. ومجموعة RAVDESS تجعل ذلك صريحاً: 24 ممثلاً ينطقون الجملة نفسها بـ 8 مشاعر. أردت أن أعرف أي طريقة لتقديم الصوت إلى النموذج تعمل بشكل أفضل، فدرّبت نموذجاً لكل تمثيل على البيانات نفسها والتقسيم نفسه: شبكة CNN أحادية البعد على الموجة الخام، وCNN أحادية البعد على متتاليات MFCC، وCNN ثنائية البعد ونموذج CNN + BiGRU + انتباه على مخططات log-mel الطيفية، وMLP وSVM على 258 سمة مصممة يدوياً، وWavLM مجمَّداً مع رأس صغير، والشبكة الأمامية (feed-forward) من دفتر Colab الأصلي محفوظة كخط أساس.

يجري التقسيم حسب الممثل: 18 للتدريب و2 للتحقق و4 للاختبار، فلا يُسمع أي صوت اختبار أثناء التدريب. وهذا أصعب من التقسيمات العشوائية التي تقف وراء كثير من أرقام RAVDESS المنشورة. يُشغَّل كل نموذج على 3 بذور. يتفوق WavLM المجمَّد بفارق كبير بدقة اختبار 77.6%؛ ويبلغ CRNN ‏65.4%، وشبكتا CNN على المخطط الطيفي وMFCC نحو 58%، وMLP ‏51.4%، وSVM ‏49.2%، وCNN على الموجة الخام 46.1%، وخط معالجة الدفتر 27.8%.

كانت النسخة الأولى تسجل دقة التدريب على مقاطع معزَّزة (augmented)، ما أخفى حجم الحفظ. وعند القياس بصدق، يبلغ كل نموذج 78 إلى 100% على مجموعة تدريبه ويخسر 22 إلى 47 نقطة على المتحدثين الجدد. أما اضمحلال الأوزان (weight decay) وmixup واضطراب السرعة ومتوسط الأوزان فلا تضيّق هذه الفجوة إلا ببضع نقاط. ما ينجح فعلاً هو توحيد كل سمة لكل متحدث: يرفع MLP بـ 17 نقطة، وCNN على MFCC بـ 7، وWavLM بـ 5 ليصل إلى 82.5%. ويتضمن المستودع أيضاً ثمانية مقاطع اختبار، واحداً لكل شعور، كل منها مصيَّر كفيديو قصير مع المخطط الطيفي ومؤشر تشغيل واحتمالات النموذج؛ يصيب WavLM في 6 من 8، إذ يسمع المحايد هادئاً والسعيد متفاجئاً.

السؤال

أي تمثيل صوتي يعمل بأفضل شكل للتعرف على المشاعر حين يكون متحدثو الاختبار جدداً، ولماذا تفرط النماذج المدرَّبة من الصفر إلى هذا الحد في التخصص على الأصوات التي سمعتها؟

أهم الميزات

كيف يعمل

  1. التحميل والتقسيم حسب الممثل

    ينزّل prepare_ravdess.py مقاطع الكلام الـ 1,440 ويضع الممثلين 1-18 في التدريب و19-20 في التحقق و21-24 في الاختبار؛ وتُستخرج التسميات ومعرّفات المتحدثين من أسماء الملفات.

  2. تحويل الصوت إلى كل تمثيل

    يُعاد أخذ عينات المقاطع إلى 16 kHz، ويُحذف الصمت وتُثبَّت المدة على 3 ثوانٍ، ثم تصبح موجة من 48,000 عينة، أو متتالية MFCC بحجم 40 × 151، أو مخططاً طيفياً log-mel بحجم 64 × 151، أو 258 سمة يدوية مجمَّعة، أو الحالات المخفية لـ WavLM مجمَّد، وتُخزَّن مؤقتاً بعد التشغيل الأول.

  3. تدريب نموذج لكل تمثيل

    يستخدم كل نموذج عصبي AdamW مع جدول one-cycle وتنعيم التسميات (label smoothing) بقيمة 0.1 ودفعات من 32؛ وتُطبَّق تعزيزاته وأدوات تنظيمه الخاصة، وتُحفظ نقطة الحفظ ذات أفضل macro-F1 على التحقق.

  4. التطبيع لكل متحدث

    توحّد متغيرات _spk كل سمة بمتوسط المتحدث نفسه وتباينه بدلاً من متوسط مجموعة التدريب وتباينها، ما يزيل معظم ما يميز صوتاً عن آخر.

  5. التقرير على ممثلين غير مسموعين

    يكتب كل تشغيل ملف JSON بسجله ومقاييس الاختبار؛ ويجمّع report.py البذور في جدول النتائج ومصفوفات الالتباس وF1 لكل فئة ورسم فجوة التدريب-الاختبار.

أمثلة

دقة الاختبار وmacro-F1 على ممثلين غير مسموعين لكل الصفوف الـ 14 (متوسط 3 بذور). يتصدر WavLM المجمَّد بـ 77.6%، و82.5% مع التطبيع لكل متحدث؛ ويقف خط معالجة الدفتر الأصلي عند 27.8%، والصدفة عند 12.5%.
دقة الاختبار وmacro-F1 على ممثلين غير مسموعين لكل الصفوف الـ 14 (متوسط 3 بذور). يتصدر WavLM المجمَّد بـ 77.6%، و82.5% مع التطبيع لكل متحدث؛ ويقف خط معالجة الدفتر الأصلي عند 27.8%، والصدفة عند 12.5%.
فجوة التدريب-الاختبار (يساراً) ودقة الاختبار (يميناً) لخمسة نماذج دون تنظيم، ومعه، ومع التطبيع لكل متحدث فوقه. التنظيم وحده بالكاد يحرّك نتيجة الاختبار؛ أما التطبيع لكل متحدث فيقلص فجوة CNN على MFCC من 40 إلى 18 نقطة ويرفع MLP من 47.4% إلى 64.7%.
فجوة التدريب-الاختبار (يساراً) ودقة الاختبار (يميناً) لخمسة نماذج دون تنظيم، ومعه، ومع التطبيع لكل متحدث فوقه. التنظيم وحده بالكاد يحرّك نتيجة الاختبار؛ أما التطبيع لكل متحدث فيقلص فجوة CNN على MFCC من 40 إلى 18 نقطة ويرفع MLP من 47.4% إلى 64.7%.
مصفوفات الالتباس على الاختبار لكل نموذج (الصفوف هي الشعور الحقيقي، بالنسبة المئوية). يظهر الالتباسان نفسهما في كل مكان: يُسمع المحايد هادئاً، والسعيد متفاجئاً.
مصفوفات الالتباس على الاختبار لكل نموذج (الصفوف هي الشعور الحقيقي، بالنسبة المئوية). يظهر الالتباسان نفسهما في كل مكان: يُسمع المحايد هادئاً، والسعيد متفاجئاً.
قيمة F1 على الاختبار لكل شعور، مع ترتيب النماذج من الأفضل إلى الأسوأ. الغضب والمفاجأة والاشمئزاز أسهل الفئات؛ والمحايد والسعيد والحزين أصعبها، وخط أساس الدفتر لا يتنبأ بالمحايد أبداً.
قيمة F1 على الاختبار لكل شعور، مع ترتيب النماذج من الأفضل إلى الأسوأ. الغضب والمفاجأة والاشمئزاز أسهل الفئات؛ والمحايد والسعيد والحزين أصعبها، وخط أساس الدفتر لا يتنبأ بالمحايد أبداً.

المدخل

python predict.py samples/05_angry_actor21.wav --model wavlm

المخرج

angry 76% (true: angry)

تصنيف أحد المقاطع النموذجية الثمانية من ممثل اختبار. يصيب WavLM في 6 من المقاطع الثمانية؛ والخطآن هما المحايد مسموعاً كهادئ (55%) والسعيد مسموعاً كمتفاجئ (54%).

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

التعرف على المشاعر في الكلام · تصنيف الصوت · RAVDESS · WavLM · wav2vec2 · الكلام ذاتي الإشراف · المخطط الطيفي mel · MFCC · CRNN · CNN على الموجة الخام · SVM · التطبيع لكل متحدث · تقييم مستقل عن المتحدث · الإفراط في التخصيص · PyTorch