مزامنة التلاوة مع النص القرآني من أبرز التحديات التي تواجه المطورين الذين يعملون على بناء تطبيقات تتطلب عرض أو تعليم الكلمة عند نطقها، ورغم وجود نماذج عديدة وبرمجيات توفر إمكانية المزامنة آليًا، إلا أنه بعد تجربتي لتلك التطبيقات لاحظت أن معظمها يعاني من عيوب عديدة، ولهذا حاولت حلها عبر عمل منصة ميقات.
أهم أوجه القصور في البرامج والنماذج الحالية
تعاني كافة البرامج الحالية من دقة مزامنة منخفضة نسبيًا، خاصة للنصوص العربية والتلاوة، وتتراجع الدقة بشكل كبير عند مزامنة السور الطويلة مثل سورة البقرة أو آل عمران.
كذلك تكون البرامج صعبة الإعداد والاستخدام، إذ تعمل معظم الأدوات المجانية محليًا على جهاز المستخدم، ويتطلب إعدادها معرفة تقنية كبيرة، بالإضافة إلى جهاز بموارد قوية.
كيف حاولت حل هذه المشاكل؟
بنيت واجهة ويب أمامية تعمل من خلال المتصفح، وتتصل بخادم يعمل على جوجل كولاب، حيث يُشغل هناك نموذج الذكاء الاصطناعي وبرنامج التزمين.
ترسل الواجهة الملف الصوتي مع النص القرآني إلى كولاب، فيتم استخراج التوقيتات لكل كلمة أو لكل آية حسبما يدعم البرنامج والنموذج.
ثم تعاد التوقيتات إلى الواجهة لتتعامل معها وتتيح للمستخدم التأكد منها.
بالإضافة إلى ذلك طورت طريقة مزامنة هجينة تعتمد على WhisperX + CTC للحصول على دقة عالية. وسأقوم بإضافة طريقة المزامنة هذه إلى مشروع منجِّم لاحقًا، وذلك بعد أن يجربها المجتمع ويتأكد من أنها ذات دقة جيدة وموثوقة.
كيف تعمل طرق المزامنة؟
تعمل طرق المزامنة بأشكال مختلفة بحسب البرنامج والنموذج أو النماذج التي تستخدمها.
منجِّم
طريقة برنامج منجم تعتمد على نموذج Whisper مدرب على التلاوة الصوتية بالإضافة إلى مكتبات برمجية متخصصة، ويمكن الاطلاع على التفاصيل من خلال هذه المشاركة وهذه المشاركة الليتن وضح لنا الأخ @abdullah Mosaibah فيهما كيف يعمل منجم.
المزامنة الهجينة
تستخدم الطريقة الهجينة WhisperX + CTC نموذج WhisperX لاستخراج التوقيتات المبدئية الموثوقة، ثم لتجاوز أخطاء WhisperX في التعرف على بعض الكلمات، تُعتمد المطابقة الديناميكية حيث يستخدم مقياس التشابه Fuzzy Matching لربط الكلمات التي استخرجها WhisperX بالنص القرآني المرجعي، وفي حال تخطى WhisperX كلمة يتم إنشاء توقيت تقديري لها.
وفي الوقت نفسه يتم تمرير الصوت والنص القرآني لنموذج Wav2Vec2 الذي يعمل بتقنية CTC، حيث يطابق الصوت مع الحروف بشكل مباشر ويرجع توقيتات عالية الدقة، لكن عيبه أنه قد يخطئ إذا كان المقطع الصوتي طويلًا، وتراكم الأخطاء يؤدي إلى أخطاء أكبر مع تقدم الزمن في الملف الصوتي.
ولذلك فإن الطريقة الهجينة، تدمج نتائج المرحلتين، حيث تعتمد توقيتات WhisperX، ثم لكل كلمة يتم البحث في نتائج CTC ضمن نطاق 15 كلمة مجاورة، حيث يتم إيجاد توقيتات CTC للكلمة المعنية، وإذا كانت المسافة الزمنية بين نسختي التوقيت متقاربة، وكانت ثقة نموذج CTC جيدة، يتم استبدال توقيت WhisperX بتوقيت CTC الأكثر دقة.
ولتجنب القفزات الزمنية الخاطئة لنموذج CTC يتم اعتماد توقيتات WhisperX إذا كان توقيت CTC يبتعد عن توقيت WhisperX بأكثر من نصف ثانية.
وأخيرًا يتم توسيع نهايات الآيات، حيث يتم تمديد وقت نهاية الكلمة الأخيرة في الآية حتى بداية الكلمة التي تليها مع ترك فاصل صغير، وذلك إذا كانت هناك مسافة زمنية كافية، وهذا يحل مشكلة اقتطاع الحرف الأخير في المدود العارضة للسكون.
مزامنة WhisperX
تعتمد على نموذج Whisper الشهير من OpenAI وذلك بعد تحسينه، وتتميز بأنها سريعة نسبيًا لكنها أقل دقة من الطريقة السابقة، وقد تواجه مشاكل في تحديد الحواف الزمنية بدقة للكلمات المتقاربة.
مزامنة CTC
تعتمد على تحليل الإشارة الصوتية ومطابقتها مع النص حرفيًا، وهي سريعة لكنها تعاني من مشكلة تراكم الأخطاء في المقاطع الطويلة.
تجربة ميقات
تتميز الواجهة بأنها سهلة ولا تتطلب إعدادات معقدة، فبعد فتحها من خلال هذا الرابط (https://alinice1998.github.io/miqat/) تختار الرواية، ثم طريقة المزامنة.

بعد ذلك تنقر على زر أكواد التشغيل (COLAB)، فيظهر كود تحتاج إلى نسخه لتشغيله في جوجل كولاب.

ثم تتوجه إلى جوجل كولاب، وتنشئ مفكرة جديدة، ثم تختار Change runtime type.

وتتأكد من اختيار T4 GPU، لكي تحصل على خادم بكرت شاشة يسرع عملية التزمين بدلًا من خادم بـ CPU فقط، ثم تنقر على زر Save للحفظ.

بعد ذلك تنقر على زر Code، ثم تلصق الكود الذي نسخته من واجهة ميقات، وتنقر على زر تشغيل الموجود على جانبه.

وتنتظر عدة دقائق، عادة بين دقيقتين و 3 دقائق، وإذا ظهر لك مربع يسألك فيما إذا كنت تريد عمل إعادة تشغيل للجلسة، تنقر على زر Cancel.

وبعد الانتهاء من تنفيذ الكود، يظهر لك رابط، فتنسخه.

ثم تعود إلى واجهة ميقات، فتضع الرابط في حقل رابط خادم كولاب، ثم تختار السورة التي تريد مزامنتها وترفع الملف الصوتي الخاص بالتلاوة، ثم تنقر على زر بدء المزامنة.

ويختلف الوقت اللازم للمزامنة باختلاف طول السورة، وطريقة المزامنة المختارة، لكنها سريعة نسبيًا، إذ استغرقت معالجة سورة البقرة كاملة بطريقة WhisperX + CTC أقل من 1000 ثانية.
وبعد الانتهاء، يتم تشغيل التلاوة تلقائيًا مع تعليم موضع القراءة.

تعديل توقيت الكلمات أو الآيات
يمكن تشغيل تلاوة كلمة واحدة أو آية واحدة أو تعديل توقيتها بالنقر على الكلمة أو الآية، حيث يمكن التأكد من أن التوقيت مضبوط بشكل دقيق.

وعند النقر على تعديل التوقيت ستظهر أدوات تحكم في الأسفل تتيح تعديل التوقيت، ويمكن التنقل بين الكلمات عبر أسهم لوحة المفاتيح لتسهيل العمل.

وبعد التأكد من أن التوقيتات صحيحة، يمكن تحميلها بـ 3 تنسيقات هي JSON و SRT و VTT.

ماذا عن دقة التزمين؟
تختلف دقة وصحة تحديد التوقيتات للآيات والكلمات باختلاف الطريقة المستخدمة، وكذلك باختلاف طول السورة ووجود أو عدم وجود كلمات زائدة، بالإضافة بالطبع إلى الضجيج وجودة التسجيل الصوتي والصدى، وبناء على اختباراتي تتفوق الطريقة الهجينة في السور الطويلة.
فقد كانت دقة تحديد توقيتات سورة البقرة حوالي 95% للآيات، إذ تضمنت فقط حوالي 19 خطأ، بينما تكون الدقة عالية في معظم الطرق إذا كانت السورة قصيرة (في الطريقة الهجينة: خطأ واحد في سورة الملك، وبلا أي خطأ في سور الإخلاص والفاتحة والتين).
وختامًا، هل لديكم اقتراحات لبرامج ونماذج يمكن إضافتها إلى الواجهة لتجريبها وتحديد مميزات كل منها ومعرفة مدى دقتها؟ وإذا جربتم ميقات فما فهل ترون أن دقته جيدة أم يمكن تحسينها أكثر برمجيًا دون تدريب نماذج، وما هي اقتراحاتكم بهذا الخصوص؟
ملاحظة: منصة ميقات في نسختها الحالية هي عبارة عن حل تجريبي Prototype قابل للتوسعة لاحقًا ليعمل على خادم دائم، حيث أن الاعتماد على Google Colab مصمم لتسهيل التجربة وليس حلاً مخصصًا لبيئة الإنتاج Production.
ويمكن المساهمة في تطوير الواجهة من خلال المستودع المفتوح المصدر على GitHub:
https://github.com/alinice1998/miqat
كما يمكن المساهمة في تطوير طريقة التزمين الهجينة من خلال هذا المستودع:
https://github.com/alinice1998/colabwis