تنفيذ "شبكة الانتباه المستنيرة للتخليق متعدد الوسائط" (https://arxiv.org/pdf/1909.01700.pdf).
الحالة : تم إصداره
دوريان هي بنية ترميز التشفير لمهمة تخليق النص إلى الكلام. على عكس البنية السابقة مثل Tacotron 2 ، فإنه لا يتعلم آلية الانتباه ولكنه يأخذ في الاعتبار معلومات فترات Phoneme. لذلك ، بالطبع ، لاستخدام هذا النموذج ، ينبغي أن يكون هناك مجموعة بيانات محاذاة محاذاة. ومع ذلك ، قد تحاول استخدام نموذج المدة المسبق على مجموعة بيانات LJSPEEDE (DICT CMU المستخدمة). سيتم توفير الروابط أدناه.
يتكون نموذج دوريان من وحدتين: مزج العمود الفقري والتنبؤ بالمدة. فيما يلي بعض من أبرز الاختلافات من دوريان الموصوفة في الورق:
يتم تدريب كل من مزج العمود الفقري ونموذج المدة في وقت واحد. بالنسبة للتنفيذ ، يتنبأ نموذج مدة التبسيط بالتنفيذ المحاذاة على عدد الأقصى الثابت من الإطارات. يمكنك تعلم هذه المخرجات كمشكلة BCE ، ومشكلة MSE من خلال جمع المحور الإطارات أو لاستخدام كلا الخسارة (لم تختبر هذه واحدة) ، قم بتعيينها في config.json . أظهرت التجارب أن إصدار BCE Just من عملية التحسين أظهرت نفسها غير مستقرة مع تسلسلات نصية أطول ، لذلك تفضل استخدام MSE+BCE أو فقط (لا تمانع إذا كنت تحصل على محاذاة سيئة في Tensorboard).
يمكنك التحقق من تجزئة التوليف Wavfile (تم الحصول عليها كثيرًا قبل التقارب) في المجلد demo (المستخدم WaveGlow Vocoder).
بادئ ذي بدء ، تأكد من تثبيت جميع الحزم باستخدام pip install --upgrade -r requirements.txt . يتم اختبار الرمز باستخدام pytorch==1.5.0
استنساخ المستودع: git clone https://github.com/ivanvovk/DurrIAN
لبدء تدريب نسخة Durian المستندة إلى الورق Run python train.py -c configs/default.json . يمكنك تحديد طراز خط الأساس على أنه python train.py -c configs/baseline.json --baseline
للتأكد من أن كل شيء يعمل بشكل جيد في بيئتك المحلية ، يمكنك تشغيل اختبارات الوحدة في مجلد tests بواسطة python <test_you_want_to_run.py> .
تم تدريب هذا التنفيذ باستخدام مجموعة بيانات LJSPEESE المحاذاة من خلال تقليل فقدان مدة BCE. قد تجده عبر هذا الرابط.
العيب الرئيسي لهذا النموذج يتطلب مجموعة بيانات محاذاة مدة. يمكنك العثور على LJSpeech Filelist المستخدمة في تدريب التنفيذ الحالي في مجلد filelists . من أجل استخدام بياناتك ، تأكد من أنك نظّمت من عاتقك بنفس الطريقة التي تنظم بها LJSpeech. ومع ذلك ، من أجل توفير الوقت والخلايا العصبية الخاصة بأدمغتك ، قد تحاول تدريب النموذج على مجموعة البيانات الخاصة بك دون تحالف المدة باستخدام نموذج مدة LJSpeech من نقطة تفتيش النموذج الخاصة بي (لم تجرب). ولكن إذا كنت مهتمًا بمحاذاة مجموعة البيانات الشخصية ، فاتبع القسم التالي بعناية.
في تجاربي ، قمت بمحاذاة ljspeech مع أداة المحاذاة القسرية في مونتريال. إذا كان هناك شيء غير واضح هنا ، فيرجى اتباع التعليمات في مستندات مجموعة الأدوات. بادئ ذي بدء ، يحتوي محاذاة الخوارزمية على عدة خطوات:
تنظيم مجموعة البيانات الخاصة بك بشكل صحيح. يتطلب MFA أن تكون في مجلد واحد من الهيكل {clutrance_id.lab ، cluss_id.wav}. تأكد من أن جميع النصوص الخاصة بك من تنسيق .lab .
قم بتنزيل إصدار MFA واتبع تعليمات التثبيت عبر هذا الرابط.
بمجرد الانتهاء من MFA ، تحتاج إلى قاموس مجموعات البيانات الخاصة بك مع نسخ الصوتيات. هنا لديك عدة خيارات:
bin/mfa_generate_dictionary /path/to/model_g2p.zip /path/to/data dict.txt . لاحظ ، أن تثبيت MFA الافتراضي سيوفر لك تلقائيًا نموذجًا باللغة الإنجليزية ، والذي قد تستخدمه. بمجرد تحضير بياناتك ، نموذج القاموس ونموذج G2P ، أنت الآن جاهز للمحاذاة. قم بتشغيل bin/mfa_align /path/to/data dict.txt path/to/model_g2p.zip outdir . انتظر حتى انتهى. سيحتوي المجلد outdir على قائمة من كلمات المفردات ومجلد مع ملفات خاصة من تنسيق .TextGrid ، حيث يتم تخزين محاذاة Wavs.
الآن نريد معالجة ملفات الشبكة النصية هذه من أجل الحصول على العلم النهائي. قد تجد هنا مفيدة لـ Python Package TextGrid . تثبيته باستخدام pip install TextGrid . مثال هنا كيفية استخدامه:
import textgrid
tg = textgrid.TextGrid.fromFile('./outdir/data/text0.TextGrid')
الآن tg هو مجموعة كائنين: الأول يحتوي على كلمات محاذاة ، تحتوي واحدة ثانية على صوتيات محاذاة. أنت بحاجة إلى الثانية. فترات الاستخراج (في الإطارات! tg لها فترات في ثوانٍ ، وبالتالي تحويلها) لمجموعة البيانات بأكملها عن طريق التكرار على ملفات .TextGrid التي تم الحصول عليها وإعداد ملف في نفس التنسيق الذي قدمته في مجلد filelists .
لقد وجدت نظرة عامة على العديد من المحلفين. ربما سيكون مفيدًا. ومع ذلك ، أوصيك باستخدام MFA لأنها واحدة من أكثر المحاذاة دقة ، إلى أفضل معرفتي.