لطالما كان التعرف على المشاعر تحديا مثيرا للعلماء. في الآونة الأخيرة ، أعمل على مشروع تجريبي لـ SER (التعرف على عاطفة الكلام) لفهم إمكانات هذه التكنولوجيا - ولهذا اخترت المستودعات الأكثر شعبية في
جيثب وجعلتها أساس مشروعي.
قبل أن نبدأ في فهم المشروع ، سيكون من الجيد أن نتذكر أي نوع من الاختناقات لدى SER.
العقبات الرئيسية
- العواطف ذاتية ، حتى الناس يفسرونها بشكل مختلف. من الصعب تحديد مفهوم "العاطفة" ذاته ؛
- التعليق على الصوت صعب. هل يجب أن نحتفل بطريقة أو بأخرى بكل كلمة أو جملة أو كل الاتصالات ككل؟ مجموعة من أي نوع من العواطف لاستخدامها في الاعتراف؟
- جمع البيانات هو أيضا ليس بالأمر السهل. يمكن جمع الكثير من البيانات الصوتية من الأفلام والأخبار. ومع ذلك ، فإن كلا المصدرين "متحيزان" لأن الأخبار يجب أن تكون محايدة ، ويتم تشغيل عواطف الممثلين. من الصعب العثور على مصدر "موضوعي" للبيانات الصوتية.
- تتطلب بيانات العلامات موارد بشرية ووقتية كبيرة. على عكس رسم الإطارات على الصور ، فإنه يتطلب من الأفراد المدربين خصيصًا الاستماع إلى التسجيلات الصوتية بالكامل وتحليلها وتقديم التعليقات. وبعد ذلك يجب أن يكون موضع تقدير هذه التعليقات من قبل العديد من الأشخاص الآخرين ، لأن التقييمات ذاتية.
وصف المشروع
استخدام شبكة عصبية تلافيفية للتعرف على المشاعر في التسجيلات الصوتية. ونعم ، لم يشير صاحب المستودع إلى أي مصادر.
وصف البيانات
هناك مجموعتان من البيانات تم استخدامها في مستودعات RAVDESS و SAVEE ، لقد قمت فقط بتكييف RAVDESS في نموذجي. هناك نوعان من البيانات في سياق RAVDESS: الكلام والأغنية.
Dataset
RAVDESS (قاعدة بيانات Ryerson الصوتية والمرئية للنطق العاطفي والأغنية) :
- سجل 12 ممثل و 12 ممثلة خطابهم وأغانيهم في أدائهم ؛
- الممثل رقم 18 ليس لديه أغنيات مسجلة.
- العواطف (الاشمئزاز) ، المحايد (المحايد) والمفاجآت (مفاجأة) غائبة في بيانات "الأغنية".
انهيار العاطفة:
مخطط توزيع العاطفة:
استخراج الميزة
عندما نعمل مع مهام التعرف على الكلام ، فإن
معاملات Cepstral (MFCCs) هي تقنية متقدمة ، على الرغم من حقيقة أنها ظهرت في الثمانينات.
اقتباس من
البرنامج التعليمي MFCC :
يحدد هذا الشكل صوت الإخراج. إذا استطعنا تحديد النموذج ، فسوف يعطينا تمثيلًا دقيقًا للصوت الذي بدا. يتجلى شكل الجهاز الصوتي في غلاف من الطيف القصير ، وتعمل MFCC على عرض هذا الظرف بدقة.
الموجيالطيفيةنحن نستخدم MFCC كميزة الإدخال. إذا كنت مهتمًا بمعرفة المزيد حول ماهية مركز عملائي ، فهذا
البرنامج التعليمي يناسبك. يمكن بسهولة تنزيل البيانات وتحويلها إلى تنسيق MFCC باستخدام حزمة librosa Python.
نموذج العمارة الافتراضي
طور المؤلف نموذجًا لشبكة CNN باستخدام حزمة Keras ، حيث أنشأ 7 طبقات - ستة طبقات Con1D وطبقة واحدة كثيفة (كثيفة).
model = Sequential() model.add(Conv1D(256, 5,padding='same', input_shape=(216,1)))
علق المؤلف على الطبقتين 4 و 5 في الإصدار الأخير (18 سبتمبر 2018) وحجم الملف النهائي لهذا النموذج لا يلائم الشبكة المقدمة ، لذلك لا يمكنني تحقيق نفس النتيجة بدقة - 72 ٪.
تم تدريب النموذج ببساطة باستخدام المعلمات
batch_size=16
epochs=700
، دون أي جدول تدريب ، إلخ.
هنا
categorical_crossentropy
هي دالة للخسائر ، ومقياس التقييم هو الدقة.
تجربتي
في مجموعة بيانات RAVDESS ، يُظهر كل ممثل 8 عواطف ، ويعلن ويغني جملتين ، مرتين لكل منهما. نتيجة لذلك ، يتم الحصول على 4 أمثلة لكل مشاعر من كل ممثل ، باستثناء العواطف المحايدة المذكورة أعلاه ، والاشمئزاز ، والمفاجأة. يدوم كل صوت حوالي 4 ثوانٍ ، وفي الثواني الأولى والأخيرة يكون الصمت غالبًا.
العروض النموذجية :
مراقبة
بعد أن حددت مجموعة بيانات من ممثل واحد وممثلة واحدة ، ثم استمعت إلى جميع سجلاتهم ، أدركت أن الرجال والنساء يعبرون عن مشاعرهم بطرق مختلفة. على سبيل المثال:
- غضب الذكور (غاضب) هو أعلى من الصوت.
- فرحة الرجال (سعيد) والإحباط (حزين) - سمة في الضحك والبكاء نغمات خلال "الصمت" ؛
- فرحة الإناث (سعيد) ، والغضب (الغاضب) والإحباط (حزين) هي بصوت أعلى.
- اشمئزاز الأنثى (اشمئزاز) يحتوي على صوت القيء.
تكرار التجربة
قام المؤلف بإزالة الطبقات المحايدة والاشمئزاز والدهشة لجعل التعرف على فئة RAVDESS من فئة 10. في محاولة لتكرار تجربة المؤلف ، حصلت على هذه النتيجة:
ومع ذلك ، اكتشفت وجود تسرب للبيانات عندما تكون مجموعة البيانات للتحقق من الصحة مطابقة لمجموعة بيانات الاختبار. لذلك ، كررت الفصل بين البيانات ، وعزل مجموعات البيانات من ممثلين اثنين والممثلات اثنين بحيث لم تكن مرئية أثناء الاختبار:
- تستخدم الجهات الفاعلة من 1 إلى 20 في مجموعات Train / Valid بنسبة 8: 2 ؛
- الجهات الفاعلة 21 إلى 24 معزولة عن الاختبارات ؛
- مجموعة المعلمات القطار: (1248 ، 216 ، 1) ؛
- مجموعة صالحة المعلمات: (312 ، 216 ، 1) ؛
- اختبار مجموعة المعلمات: (320 ، 216 ، 1) - (معزولة).
لقد قمت بإعادة تدريب النموذج وإليكم النتيجة:
اختبار الأداء
من الرسم البياني Train Valid Gross ، من الواضح أنه لا يوجد تقارب للفئات العشرة المختارة. لذلك ، قررت تقليل تعقيد النموذج وترك مشاعر الذكور فقط. قمت بعزل اثنين من الممثلين في مجموعة الاختبار ، ووضع الباقي في مجموعة القطار / صالحة ، نسبة 8: 2. هذا يضمن عدم وجود خلل في مجموعة البيانات. ثم قمت بتدريب البيانات من الذكور والإناث بشكل منفصل لإجراء الاختبار.
مجموعة بيانات الذكور- مجموعة القطار - 640 عينة من الجهات الفاعلة 1-10 ؛
- مجموعة صالحة - 160 عينات من الجهات الفاعلة 1-10 ؛
- مجموعة اختبار - 160 عينات من الجهات الفاعلة 11-12.
الخط المرجعي: الرجالمجموعة بيانات الإناث- مجموعة القطار - 608 عينات من الممثلات 1-10 ؛
- مجموعة صالحة - 152 عينات من الممثلات 1-10 ؛
- مجموعة اختبار - 160 عينات من الممثلات 11-12.
الخط المرجعي: النساءكما ترون ، مصفوفات الخطأ مختلفة.
الرجال: الغاضب والسعيد هي الطبقات الرئيسية المتوقعة في النموذج ، لكنهم ليسوا على حد سواء.
النساء: اضطراب (حزين) وفرح (سعيد) - فصول متوقعة بشكل أساسي في النموذج ؛ الغضب والفرح مرتبكون بسهولة.
استذكارًا لملاحظات
تحليل بيانات الذكاء ، أظن أن الأنثى الغاضبة والسعيدة تشبه نقطة الخلط لأن طريقة تعبيرها هي ببساطة رفع أصواتها.
علاوة على ذلك ، أشعر بالفضول من أنه إذا قمت بتبسيط النموذج إلى أبعد من ذلك ، فاترك الطبقات الإيجابية والمحايدة والسلبية فقط. أو فقط الإيجابية والسلبية. باختصار ، قمت بتجميع العواطف في فصول 2 و 3 ، على التوالي.
2 فصول:- إيجابي: الفرح (سعيد) ، الهدوء (الهدوء) ؛
- سلبي: الغضب ، الخوف (الخوف) ، الإحباط (الحزن).
3 فصول:- إيجابي: الفرح (سعيد) ؛
- محايد: هادئ (هادئ) ، محايد (محايد) ؛
- سلبي: الغضب ، الخوف (الخوف) ، الإحباط (الحزن).
قبل بدء التجربة ، قمت بإعداد بنية النموذج باستخدام بيانات الذكور ، مما يجعل التعرف على 5 فصول.
أضفت طبقتين من Conv1D ، وطبقة واحدة من MaxPooling1D وطبقتين من BarchNormalization ؛ لقد غيرت أيضًا قيمة التسرب إلى 0.25. أخيرًا ، قمت بتغيير المُحسِّن إلى SGD بسرعة تعلم تبلغ 0.0001.
lr_reduce = ReduceLROnPlateau(monitor='val_loss', factor=0.9, patience=20, min_lr=0.000001) mcp_save = ModelCheckpoint('model/baseline_2class_np.h5', save_best_only=True, monitor='val_loss', mode='min') cnnhistory=model.fit(x_traincnn, y_train, batch_size=16, epochs=700, validation_data=(x_testcnn, y_test), callbacks=[mcp_save, lr_reduce])
لتدريب النموذج ، قمت بتطبيق تخفيض في "هضبة التدريب" وحفظت فقط أفضل نموذج بأقل قيمة من
val_loss
. وهنا النتائج للفئات المستهدفة المختلفة.
أداء نموذج جديد
الرجال ، 5 فصولالنساء ، الصف 5الرجال ، الصف 2الرجال ، 3 فصولزيادة (زيادة)
عندما عززت بنية النموذج والمحسن وسرعة التدريب ، اتضح أن النموذج لا يزال لا يتقارب في وضع التدريب. لقد اقترحت أن هذه مشكلة في كمية البيانات ، نظرًا لأن لدينا 800 عينة فقط. هذا قادني إلى طرق لزيادة الصوت ، وفي النهاية ضاعفت مجموعات البيانات. دعونا نلقي نظرة على هذه الأساليب.
الرجال ، 5 فصول
الزيادة الديناميكية def dyn_change(data): """ """ dyn_change = np.random.uniform(low=1.5,high=3) return (data * dyn_change)
ضبط الملعب def pitch(data, sample_rate): """ """ bins_per_octave = 12 pitch_pm = 2 pitch_change = pitch_pm * 2*(np.random.uniform()) data = librosa.effects.pitch_shift(data.astype('float64'), sample_rate, n_steps=pitch_change, bins_per_octave=bins_per_octave)
الإزاحة def shift(data): """ """ s_range = int(np.random.uniform(low=-5, high = 5)*500) return np.roll(data, s_range)
مضيفا الضوضاء البيضاء def noise(data): """ """
من الملاحظ أن الزيادة تزيد إلى حد كبير من الدقة ، وتصل إلى 70٪ في الحالة العامة. خاصة في حالة إضافة اللون الأبيض ، مما يزيد من الدقة إلى 87.19٪ - ومع ذلك ، تنخفض دقة الاختبار
وقياس F1 بأكثر من 5٪. ثم حصلت على فكرة الجمع بين العديد من أساليب التعزيز للحصول على نتيجة أفضل.
الجمع بين عدة طرق
الضوضاء البيضاء + التحيزاختبار تكبير على الرجال
الرجال ، الصف 2
الضوضاء البيضاء + التحيزلجميع العينات
الضوضاء البيضاء + التحيزفقط للعينات الإيجابية ، حيث أن المجموعة 2-فئة غير متوازنة (نحو عينات سلبية).
الملعب + الضوضاء البيضاءلجميع العينات
الملعب + الضوضاء البيضاءللحصول على عينات إيجابية فقط
استنتاج
في النهاية ، تمكنت من تجربة مجموعة بيانات ذكور فقط. أعيد تقسيم البيانات لتفادي عدم التوازن ونتيجة لذلك تسرب البيانات. قمت بإعداد النموذج لتجربة أصوات الذكور ، حيث أردت تبسيط النموذج قدر الإمكان للبدء. أجريت أيضًا اختبارات باستخدام طرق تكبير مختلفة ؛ عملت إضافة الضوضاء البيضاء والتحيز بشكل جيد على البيانات غير المتوازنة.
النتائج
- العواطف ذاتية ويصعب إصلاحها ؛
- من الضروري تحديد المشاعر المناسبة للمشروع مسبقًا ؛
- لا تثق دائمًا بالمحتوى مع Github ، حتى إذا كان به العديد من النجوم ؛
- مشاركة البيانات - ضعها في الاعتبار ؛
- يعطي تحليل البيانات الاستكشافية دائمًا فكرة جيدة ، ولكن عليك التحلي بالصبر عندما يتعلق الأمر بالعمل مع البيانات الصوتية ؛
- حدد ما ستعطيه لمدخلات النموذج الخاص بك: الجملة ، سجل كامل أو تعجب؟
- يعد نقص البيانات أحد عوامل النجاح المهمة في SER ، ومع ذلك ، فإن إنشاء مجموعة بيانات جيدة ذات عواطف مهمة معقدة ومكلفة ؛
- تبسيط النموذج الخاص بك في حالة نقص البيانات.
مزيد من التحسن
- لقد استخدمت فقط أول 3 ثوان كمدخلات لتقليل حجم البيانات الإجمالي - استخدم المشروع الأصلي 2.5 ثانية. أرغب في تجربة تسجيلات كاملة الحجم ؛
- يمكنك معالجة البيانات مسبقًا: تقليم الصمت وتطبيع الطول عن طريق الحشو باستخدام الأصفار وما إلى ذلك ؛
- حاول الشبكات العصبية المتكررة لهذه المهمة.