Assignment Chef icon Assignment Chef
All Arabic tutorials

Programming lesson

نماذج ماركوف المخفية (HMM) في التعرف على لغة الإشارة: دليل عملي لتعيين Cs6601

شرح مبسط لبناء نموذج ماركوف المخفي (HMM) للتعرف على كلمات لغة الإشارة الأمريكية، مع تطبيق عملي على بيانات Y لليد والإبهام. يشمل خطوات الترميز والتدريب والتقييم.

نموذج ماركوف المخفي Hidden Markov Model HMM التعرف على لغة الإشارة ASL recognition Cs6601 assignment 6 خوارزمية فيتربي Viterbi algorithm Python HMM تعلم الآلة الذكاء الاصطناعي معالجة الإشارات التعرف على الكلام تحليل السلاسل الزمنية تطبيقات HMM تعليم برمجة

مقدمة: قوة الاحتمالات في الذكاء الاصطناعي

في عالم اليوم، حيث تتنافس تطبيقات الذكاء الاصطناعي مثل ChatGPT و Google Gemini على فهم اللغة الطبيعية، تظل نماذج ماركوف المخفية (HMM) أداة أساسية في مجالات مثل التعرف على الكلام، الرؤية الحاسوبية، ومعالجة الإشارات. في هذا الدرس، سنتعلم كيفية بناء HMM للتعرف على كلمات لغة الإشارة الأمريكية (ASL) باستخدام بيانات إحداثيات Y لليد اليمنى والإبهام. هذا التطبيق مشابه لمهمة Cs6601 assignment 6 في جامعة جورجيا تك، حيث يُطلب من الطلاب بناء نظام تعرف على الكلمات: ALLIGATOR، NUTS، و SLEEP.

ما هو نموذج ماركوف المخفي؟

نموذج ماركوف المخفي هو إطار إحصائي يفترض وجود حالات خفية (غير قابلة للملاحظة) تولد تسلسلًا من الملاحظات. الفكرة الأساسية: إذا كان لدينا نظام ذو حالات غير مرئية، وكل حالة تعتمد فقط على الحالة السابقة (خاصية ماركوف)، فيمكننا نمذجته باستخدام توزيعات احتمالية. على سبيل المثال، في لعبة FIFA، يمكن اعتبار تحركات اللاعبين حالات خفية (جري، تمرير، تسديد) والملاحظات هي إحداثياتهم على الشاشة. هنا، سنستخدم إحداثيات Y لليد والإبهام كملاحظات، والحالات الخفية تمثل مراحل حركة اليد أثناء نطق الكلمة.

مكونات HMM الأساسية

  • الاحتمالات الأولية (Prior Probabilities): احتمال أن تبدأ العملية في حالة معينة. في مهمتنا، جميع الكلمات تبدأ من الحالة 1.
  • مصفوفة الانتقال (Transition Probabilities): احتمال الانتقال من حالة إلى أخرى. في هذا التمرين، يُسمح فقط بالبقاء في نفس الحالة أو الانتقال إلى الحالة التالية (نموذج left-to-right).
  • معلمات الانبعاث (Emission Parameters): توزيع الملاحظات لكل حالة. نفترض توزيعًا طبيعيًا (Gaussian) بمتوسط وانحراف معياري.

الخطوة الأولى: ترميز HMM من البيانات التدريبية

لنبدأ ببناء النموذج يدويًا باستخدام بيانات التدريب المقدمة. سنحسب لكل كلمة: الاحتمالات الأولية، الانتقال، ومعلمات الانبعاث. البيانات تحتوي على ثلاثة عينات تدريب لكل كلمة، مع تقسيم كل عينة إلى ثلاث حالات (State1، State2، State3) بناءً على الإطار الزمني.

مثال: حساب معلمات كلمة "ALLIGATOR"

لدينا ثلاث عينات لـ "ALLIGATOR". سنحسب متوسط وانحراف الحالة 1 من جميع القيم المخصصة لها عبر العينات.

  • العينة 1: الحالة 1: [31, 28, 28, 37, 68, 49]
  • العينة 2: الحالة 1: [25, 62, 75, 80]
  • العينة 3: الحالة 1: [-4, 69, 59, 45, 62, 22]

المتوسط = (31+28+28+37+68+49+25+62+75+80-4+69+59+45+62+22) / 16 = 760/16 = 47.5، يُقرب إلى 47.500 (لكن في التمرين نستخدم التقريب لـ 3 منازل عشرية). الانحراف المعياري يحسب بنفس الطريقة. نكرر لكل حالة.

مصفوفة الانتقال

بما أن كل عينة لها 3 حالات متتالية، فإن الانتقال من State1 إلى State2 يحدث مرة واحدة في كل عينة (عند نهاية الحالة الأولى)، ومن State2 إلى State3 مرة واحدة، ومن State3 إلى نفسها (لأنها الحالة الأخيرة). الاحتمالات: P(1->1) = (عدد مرات البقاء في 1) / (إجمالي الانتقالات من 1). في عينة من 17 إطارًا: الحالة 1 تحتوي على 6 إطارات، لذا تنتقل 5 مرات إلى نفسها ومرة إلى الحالة 2. لذا P(1->1)=5/6, P(1->2)=1/6. نحسب عبر جميع العينات.

الخطوة الثانية: خوارزمية فيتربي (Viterbi) للتعرف على الكلمة

بعد بناء النموذج، نستخدم خوارزمية فيتربي لإيجاد أفضل تسلسل للحالات الخفية لتسلسل ملاحظات جديد. هذا يشبه استخدام GPS لتحديد المسار الأكثر احتمالًا بناءً على إشارات الأقمار الصناعية. في سياقنا، نأخذ سلسلة من إحداثيات Y ونجد الكلمة الأكثر احتمالًا.

تطبيق بسيط بلغة Python

import numpy as np

def viterbi(obs, states, start_p, trans_p, emit_p):
    V = [{}]
    path = {}
    for s in states:
        V[0][s] = start_p[s] * emit_p[s](obs[0])
        path[s] = [s]
    for t in range(1, len(obs)):
        V.append({})
        newpath = {}
        for s in states:
            (prob, state) = max((V[t-1][s0] * trans_p[s0][s] * emit_p[s](obs[t]), s0) for s0 in states)
            V[t][s] = prob
            newpath[s] = path[state] + [s]
        path = newpath
    (prob, state) = max((V[-1][s], s) for s in states)
    return (prob, path[state])

هذا الكود يحسب أفضل مسار. في مهمتنا، نستخدم ثلاث حالات فقط.

الخطوة الثالثة: التقييم والاختبار المحلي

بعد كتابة الكود، نختبره باستخدام بيانات الاختبار المتوفرة. نستخدم hmm_submission_tests.py لتشغيل اختبارات الوحدة. من المهم التحقق من الدقة والتأكد من أن النتائج مقربة بشكل صحيح (3 منازل عشرية).

نصائح للنجاح

  • لا تستخدم round() في Python، بل قم بالتقريب يدويًا باستخدام int(x*1000+0.5)/1000 مع الانتباه للإشارة.
  • تأكد من أن كل حالة تحتوي على ملاحظة واحدة على الأقل أثناء التدريب. إذا تم نقل جميع الملاحظات من حالة، أعد توزيعها بالقوة.
  • استخدم الإصدار المقدم من Wikipedia كمرجع لفهم HMM.

تطبيقات عملية وأمثلة عصرية

تستخدم HMM في العديد من التطبيقات الحديثة:

  • التعرف على الكلام: مثل Alexa و Siri لتحويل الصوت إلى نص.
  • التعرف على الإيماءات: في ألعاب الواقع الافتراضي مثل Meta Quest.
  • تحليل السلاسل الزمنية: في الأسواق المالية للتنبؤ بحركة الأسهم.

في عالم التكنولوجيا المالية (FinTech)، تستخدم HMM لنمذجة تقلبات السوق. على سبيل المثال، يمكن اعتبار حالة السوق (صاعد، هابط، مستقر) كحالة خفية، وحركة الأسعار كملاحظات.

الخلاصة

في هذا الدرس، تعلمنا كيفية بناء نموذج ماركوف مخفي للتعرف على كلمات لغة الإشارة. هذا المشروع، المستوحى من Cs6601 assignment 6، يوضح قوة النماذج الاحتمالية في حل مشاكل العالم الحقيقي. تذكر أن الممارسة هي المفتاح: جرب تعديل المعلمات، واستخدم بيانات إضافية، واختبر دقة النموذج. مع المثابرة، ستتمكن من بناء أنظمة ذكية تفهم الإشارات البشرية.