Hidden Markov Model (HMM)
يستنتج نموذج ماركوف المخفي (HMM) تسلسلًا من الحالات المخفية انطلاقًا من مشاهدات مشوشة. ويتناول هذا المفهوم معلماته وخوارزمية فيتربي وتطبيقاته.
نموذج ماركوف المخفي (HMM) هو نموذج احتمالي لتسلسل ينتقل فيه النظام بين حالات لا يمكن رصدها مباشرة، وتنتج كل حالة مخفية ملاحظة يمكن رصدها. وبالاستناد إلى تسلسل من الملاحظات، مثل إطارات صوتية أو أحرف DNA، يحسب HMM مدى احتمال كل تسلسل من الحالات المخفية، مثل الفونيمات الكامنة وراء الصوت أو مناطق الجينات الكامنة وراء الأحرف. وتشير كلمة «ماركوف» إلى افتراضه الأساسي: تعتمد الحالة التالية على الحالة الحالية فقط. طوّر ليونارد باوم وزملاؤه النظرية في أواخر ستينيات القرن العشرين، ثم استخدمت أنظمة التعرّف على الكلام نماذج HMM لعقود. وبما أنها مبنية بالكامل على احتمالات صريحة، فلا تزال أداة قياسية في تحليل السلاسل الزمنية والمعلوماتية الحيوية، ومثالًا كلاسيكيًا على الذكاء الاصطناعي الإحصائي.
مكوّنات نموذج HMM#
يُحدَّد نموذج HMM الذي يضم N حالة مخفية بثلاث مجموعات من الاحتمالات:
- الاحتمالات الابتدائية (π): احتمال البدء في كل حالة مخفية.
- احتمالات الانتقال (A): مصفوفة N × N، ويعبّر مدخلها
A[i, j]عن احتمال الانتقال من الحالة i إلى الحالة j في خطوة واحدة، ما يجعل الحالات المخفية سلسلة ماركوف. - احتمالات الإصدار (B): احتمال كل ملاحظة بالنظر إلى الحالة الحالية. وتُستخدم الجداول للملاحظات المتقطعة، أما الملاحظات المستمرة، مثل السمات الصوتية، فتُستخدم لها توزيعات مثل المزيجات الغاوسية.
يجعل افتراضان النموذج قابلًا للمعالجة: تعتمد كل حالة على الحالة السابقة فقط، وتعتمد كل ملاحظة على الحالة الحالية فقط. وعند بسطه عبر الزمن، يصبح النموذج سلسلة من الحالات المخفية، تُصدر كل منها ملاحظة واحدة:
ثلاث مسائل كلاسيكية في نموذج HMM#
نظّم الدليل التعليمي واسع الاستشهاد الذي ألّفه لورانس رابنر عام 1989 استخدام نماذج HMM حول ثلاثة أسئلة. لكل سؤال إجابة باستخدام البرمجة الديناميكية، وتزداد كلفتها بمقدار N² × T لعدد T من الملاحظات، بدلًا من الزيادة بمقدار Nᵀ لعدد تسلسلات الحالات الممكنة:
- التقييم: ما مدى احتمال تسلسل من الملاحظات في ظل نموذج معيّن؟ تجمع الخوارزمية الأمامية الاحتمالات عبر جميع المسارات المخفية، وهي الطريقة التي يختار بها نظام التعرّف نموذج الكلمة الأفضل تفسيرًا للملفوظ.
- فك الترميز: ما تسلسل الحالات المخفية الذي يفسر الملاحظات على أفضل وجه؟ تعثر خوارزمية Viterbi، التي نشرها أندرو فيتربي عام 1967 لفك ترميز الشفرات الالتفافية، على المسار الأرجح، بينما تحسب خوارزمية الأمام والخلف احتمال كل حالة في كل خطوة زمنية.
- التعلّم: ما المعلمات الأنسب لمجموعة من تسلسلات الملاحظات؟ تقدّر خوارزمية Baum-Welch، وهي تطبيق لخوارزمية تعظيم التوقع، القيم π وA وB من تسلسلات غير موسومة. وعندما تكون تسلسلات الحالات موسومة، يكفي إحصاء الانتقالات والإصدارات.
يمكن تنفيذ فك الترميز بخوارزمية Viterbi في بضعة أسطر من NumPy. في هذا النموذج، يكون نشاط الشخص، المشي أو الركض، مخفيًا، ويبلّغ متعقّب عن قراءة سرعة واحدة لكل إطار، وتميل الأنشطة إلى الاستمرار من إطار إلى آخر:
import numpy as np
states = ["walk", "run"]
start = np.array([0.8, 0.2]) # احتمالات الحالة الابتدائية
trans = np.array([[0.9, 0.1], [0.1, 0.9]]) # تميل الأنشطة إلى الاستمرار بين الإطارات
emit = np.array([[0.7, 0.25, 0.05], [0.1, 0.3, 0.6]]) # P(speed | state) للسرعة البطيئة والمتوسطة والسريعة
obs = [0, 0, 2, 0, 0, 1, 2, 2, 1, 2] # قراءات السرعة لكل إطار
# خوارزمية Viterbi: أفضل احتمال لوغاريتمي للوصول إلى كل حالة، مع مؤشرات الرجوع
logp = np.log(start) + np.log(emit[:, obs[0]])
back = []
for o in obs[1:]:
scores = logp[:, None] + np.log(trans) # الصفوف: الحالة السابقة؛ الأعمدة: الحالة التالية
back.append(scores.argmax(axis=0))
logp = scores.max(axis=0) + np.log(emit[:, o])
# تتبّع تسلسل الحالات الأرجح عكسيًا بدءًا من أفضل حالة نهائية
path = [int(logp.argmax())]
for pointers in reversed(back):
path.insert(0, int(pointers[path[0]]))
print("Speeds: ", " ".join(["slow", "medium", "fast"][o] for o in obs))
print("Decoded:", " ".join(states[s] for s in path))يفك الترميز walk walk walk walk walk run run run run run. وتبقى قراءة السرعة السريعة في الإطار 3 مصنّفة «مشيًا»، لأن الانتقال إلى الركض ثم العودة إلى المشي يتطلب انتقالين غير مرجّحين، بينما تُصنّف قراءتا السرعة المتوسطة في الإطارين 6 و9 على أنهما «ركض» بسبب الإطارات السريعة المحيطة بهما. وكان مصنّف يعمل إطارًا بإطار ويتجاهل الانتقالات سيصنّف الإطار 3 على أنه ركض.
نماذج HMM مقارنةً بالنماذج ذات الصلة#
- مرشح كالمان: ينفّذ التكرار نفسه للتنبؤ والتحديث في الحالات المستمرة ذات الديناميكيات الخطية والضجيج الغاوسي. وتمثل الخوارزمية الأمامية في HMM نظيرَه للحالات المتقطعة.
- الشبكات البايزية: نموذج HMM هو أبسط شبكة بايزية ديناميكية، بمتغير مخفي واحد ومتغير مرصود واحد في كل خطوة زمنية.
- عملية قرار ماركوف (MDP): تضيف الأفعال والمكافآت إلى سلسلة ماركوف ذات الحالات المرصودة، وهي الإطار الذي يقوم عليه التعلّم بالتعزيز.
- الشبكات العصبية المتكررة والمحوّلات: تتعلّم الاعتماديات غير الخطية بعيدة المدى من مجموعات بيانات كبيرة، وقد حلّت محل نماذج HMM في معظم مهام الكلام واللغة. وتحتاج نماذج HMM إلى بيانات أقل بكثير، كما يمكن قراءة كل احتمال فيها مباشرةً.
- نماذج فضاء الحالة (SSMs): تشترك طبقات التعلّم العميق مثل Mamba في فكرة فضاء الحالة المستمدة من نظرية التحكم، وتحدّث متجهًا مخفيًا مستمرًا بديناميكيات حتمية متعلّمة.
تطبيقات عملية#
- التعرّف على الكلام: من ثمانينيات القرن العشرين حتى أوائل العقد الثاني من القرن الحادي والعشرين، مثّلت معظم أنظمة التعرّف كل فونيم بنموذج HMM صغير ذي إصدارات من مزيج غاوسي. ثم تولّت الشبكات العصبية العميقة نمذجة الإصدارات في الأنظمة الهجينة، واستبدلت النماذج الشاملة نموذج HMM بالكامل لاحقًا.
- المعلوماتية الحيوية: تصف نماذج HMM الملفية عائلات تسلسلات البروتين أو DNA المترابطة. وتستخدم HMMER هذه النماذج للبحث في قواعد بيانات التسلسلات عن أقارب بعيدين، كما تشكّل أساس قاعدة بيانات عائلات البروتين Pfam؛ وتستخدم أدوات تحديد الجينات نماذج HMM لتصنيف مقاطع الجينوم إلى مشفّرة وغير مشفّرة.
- وسم أقسام الكلام: كانت أساليب معالجة اللغة الطبيعية الإحصائية المبكرة تصنّف الكلمات إلى أسماء وأفعال وأقسام كلام أخرى باستخدام فك ترميز Viterbi عبر تسلسلات الوسوم.
- التعرّف على الأنشطة: تُفك شيفرة تسلسلات وضعيات الجسم أو قراءات مستشعرات الأجهزة القابلة للارتداء إلى أنشطة مثل الوقوف أو المشي أو السقوط. ويتعقّب حل Ultralytics لمراقبة التمارين تسلسلًا من هذا النوع ذي حالتين: إذ يصنّف كل شخص إلى «أعلى» أو «أسفل» اعتمادًا على زاوية مفصلية في نقاط تقدير الوضعية في YOLO26، والكوع افتراضيًا، وينتقل بينهما عند تجاوز 145° والنزول دون 90°، ويحتسب تكرارًا عند كل انتقال من «أعلى» إلى «أسفل».










