پردازش معنایی در لب خوانی بازیهای رایانه ای

تغییرات پروژه از تاریخ 1393/04/01 تا حالا
#مقدمه
امروزه ** لب خوانی**  [^1] و ** تشخیص گفتار** [^2]   از روی ویدئویی که حرکات لب را ثبت کرده است کاربردهای بسیاری دارد که عموما در راستای حذف فرمان های دستی برای کنترل دستگاه الکترونیکی، به کار میرود . 
   البته این سیستم در بخش های نظامی ، امنیتی ، توانبخشی به معلولین و... نیز کاربرد دارد.

این فرآیند پیچیده  در مرحله اول به تشخیص  محل لب  و کانتور آن در فریم های ویدئو و تشکیل گراف (معمولا 12 یا 6 نقطه )  نیاز داشته  و سپس به  تحلیل سیر تغییر  نقاط در  دنباله ی گراف ها و در نهایت حدس لغت ادا شده  می پردازد .

![sequences](http://euit.comule.com/up/04616e4d592b.png)

با توجه به زمان انجام پروژه ،هدف در بهترین حالت تشخیص یک حرف خاص، یا بصورت کلی تر ،مجموعه حروف صدا دار ، درنظر گرفته شده است که امید است تا پایان این زمان بندی به نتیجه برسد.

##خلاصه  مراحل انجام کار
برای تحلیل گفتار از روی حرکات لب، از الگوریتم HMM یا مدل مخفی مارکوف  [^3]  استفاده میشود.  سیگنالِ تصویریِ مربوط به گفتارِ هرلغت به صورت  سریِ زمانیِ بردارهایِ ویژگی، نمایش داده می شود .بنابراین برای هرلغت یک سری آموزشی وجود دارد که شامل تعدادی تکرار ازآن لغت توسط یک یاچند گوینده می باشد.
 مجموعه ی W که راجع به آن خواهیم گفت نتیجه ی همین سری آموزشی ست. یعنی مجموعه لغاتی که پس از یادگیری در دایره ی دانش الگوریتم قرار دارد و هر ورودی ناشناخته از اینجا به بعد، با لغاتِ این مجموعه مقایسه شده و اعلام میکند که لغت ادا شده به کدامیک شبیه تر است!! بعبارتی احتمالات جابه جاییِ دنباله ی تولید شده به کدام مدل HMM نزدیکتر است؟..
####1-ساخت مدل های لغت مجزا
اولین قدم،ساخت مدل های لغت مجزااست؛ تاپارامتهای مدل هرلغت به صورت بهینه ای تخمین زده شوند.نهایتأ،هنگامی که مجموعه W مدل HMM طراحی شد،بازشناسی لغت مجهول صورت می گیرد تا باداشتن سری مشاهدات مورد تست، نمره ای به مدل هرلغت داده شود ولغتی که نمره آن ازبقیه بالاتراست انتخاب شود.

برای تشخیص گفتار با استفاده از این مدل (HMM) الگوریتم های متفاوت پیشرو [^4] ، پسرو [^5] ، الگوریتم ویتربی [^6]  ، الگوریتم  بالم-ولش یا  الگوریتم پیشرو-پسرو [^7] وهمچنین الگوریتم حداکثر سازی امید ریاضی [^8] که نوع خاصی از بام- ولش  میباشد   و روش مبتنی بر گرادیان  وجود دارد.

 وظیفه یادگیری در HMM، یافتن بهترین احتمالات جابجایی‌ها  بر اساس یک دنباله از خروجی هاست .میزان بهینگی مدل پنهان مارکوف در مرحله یادگیری ، در مسائل مختلف ،متفاوت می باشد . در اینجا معیار بهینگی به وسیله متد "بیشترین شباهت"  [^9]   بر اساس خروجی داده شده تخمین زده می‌شوند .
ما در اینجا  برای پیدا کردن maximum likelihood محلی، از الگوریتم پیشرو-پسرو استفاده میکنیم

1.1)  ساخت مدل HMM
ابتدا برای هر لغت که قرار است در دایره لغات ما برای تشخیص، جای داشته باشد با الگوریتم Baum-Welch یک مدل HMM   ساخته میشود.یعنی سه تایی مرتب$\ \lambda=(A,B,\pi) $برای هر لغت محاسبه میشود
استفاده از HMM در شناسایی کلمات جداگانه
در این مرحله که مرحله آموزش الگوریتم است فرض می‌کنیم که فاز پیش پردازش سیستم دنباله مشاهدات زیر را تولید نماید:
$$\ O=(o_{1},o_{2},.... ,o_{N})$$
پارامترهای اولیه تمام مدلهای HMM را با یک مجموعه از مقادیر مشخص مقدار دهی می‌نماییم. $$\ \lambda_{i},  1\le i\le N $$
از آنجایی که ما برای هر کلاس از واحدها(لغات مجموعه  ) یک HMM داریم، می‌توانیم مدل$\ \lambda_{i}$از کلاس l را که دنباله مشاهدات فعلی به آن مربوط می‌شود، را انتخاب نماییم. $$\ L_{tot}^{clamped}=\sum_{i \in \lambda_{i}} \alpha_{t} (i)B_{t} (i) =\sum_{i \in \lambda_{i}} \alpha_{T}(i)$$
که در آن$ \ L_{m}^{I}$بیانگر میزان شباهت دنباله مشاهدات فعلی به کلاس l در مدل$\ \lambda_{m}$است.
هﺮ ﻳﮏ از ﻣﺪﻟﻬﺎی HMM، ، را ﺑﺎ ﻳﮑﻲ از دو روش ﺗﺼﺎدﻓﻲ ﻳﺎ ﺧﻮﺷﻪ ﺑﻨﺪی K-means ﻣﻘﺪاردهﻲ
اولیه میکنیم.
2.1)محاسبه احتمالات پیشرو -پسرو
 ﺑﺎ داﺷﺘﻦ دﻧﺒﺎﻟﻪ ﻣﺸﺎهدات HMM ﻣﻘﺎدﻳﺮ اﺣﺘﻤﺎل پیشرو و ﭘﺴﺮو هﺮ را ﺑﺎ اﺳﺘﻔﺎدﻩ از رواﺑط   $$\ a_{t+1}(j)=b_j(O_{t+1}\sum_{i=1}^N)a_t(i)a_{ij}, 1\le j\le N, 1\le t\le T-1$$      و             $$\beta_t(i)=\sum_{i=1}^N \beta_{t+1}(j)a_{ij}b_j(O_{t+1}), 1\le i\le N, 1\le t\le T-1 $$          ﻣﺤﺎﺳﺒﻪ ﻣﻲ کنیم.

3.1) محاسبه نسبت شباهت
ﻣﻘﺪار ﻧﺴﺒﺖ ﺷﺒﺎهت را ﺑﺎ اﺳﺘﻔﺎدﻩ از رواﺑﻂ $$\ L_{tot}^{clamped}=\sum_{i \in \lambda_{i}} \alpha_{t} (i) \Beta_{t} (i) =\sum_{i \in \lambda_{i}} \alpha_{T}(i)$$ و $$\ L_{tot}^{free}= \sum_{m=1}^{N} L_{m}^{I}= \sum_{m=1}^{N}[\sum_{i \in \lambda_{m}} \alpha_{t} (i) \Beta_{t} (i)] \sum_{m=1}^{N} \sum_{i \in \lambda_{i}} \alpha_{T}(i) $$ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﮐنیم.
4.1) به روزرسانی پارامترهای مدل
 ﺑﺎ ﮐﻤﮏ راﺑﻄﻪ $\ \Theta^{new}=\Theta^{old}- \eta \left [ \frac{\partial j}{\partial \Theta} \right ]$ ﭘﺎراﻣﺘﺮهﺎی ﻣﺪل را ﺑﺮوز رﺳﺎﻧﻲ ﻣﻲ ﮐنیم.
5.1)اﮔﺮ همه ﻧﻤﻮﻧﻪ هﺎی ﺁﻣﻮزﺷﻲ اﺳﺘﻔﺎدﻩ ﻧﺸﺪﻩ اﻧﺪ ﺑﻪ ﮔﺎم 2 ﺑﺮ ﻣﻲ ﮔﺮدﻳﻢ.

####2 – استخراج بردار ویژگی برای لغت ناشناخته و ارزیابی آن
در مرحله بعد برای بازشناسی هرلغت ناشناخته بردارویژگیهای گفتارمربوط به آن لغت به دست می آید.سپس احتمالات برای همه مدلهای موجود در مجموعه ی W محاسبه می شود ونهایتأ ،لغتی که امکان مدل آن بیشترین است انتخاب می گردد.
 این قسمت در مقایسه با یادگیری بسیار آسان تر است.
الگوریتم ،دنباله مشاهدات مورد نظر را دریافت می‌کند:
$$\ I^*\ \arg  max  L_{m} ^{I}  $$       $$\ 1\le m\le N$$
در این حالت نرخ شناسایی بصورت نسبت بین واحدهای شناسایی صحیح به کل واحدهای آموزشی حساب می‌شود.(به هر مدل یک نمره تعلق میگیرد)
![diag](http://euit.comule.com/up/305f6c705349.png)



##کارهای مرتبط
حال به جزئیات و مراحل انجام کار میپردازیم

مدل پنهان مارکوف برای هر لغت شامل 3 مؤلفه میباشدکه احتمال بردارهای ویژگی مجموعه آموزشی مربوط به لغت V را بیشینه می نمایند:

ماتریس انتقال حالت:یک مجموعه از احتمالات در بین حالت‌ها  $\ A={a_{ij}} $    و $\ a_{ij}=p(q_{t+1}=j|q_{t}=i),\qquad i\ge 1,N\ge j $
که در آن$ \ q_{t} $بیانگر حالت فعلی می‌باشد .

توزیع احتمال مشاهدات: یک توزیع احتمال برای هر یک از حالتها
                             $$\ B={b_{j}(k)} $$  $$\ b_{j}(k)=p{o_{t}=v_{k}|q_{t}=j},\qquad 1\le j\le N,\qquad 1\le k\le M $$
که در آن $ \ v_{k}  $بیانگر$th"k"$ سمبل مشاهده شده در الفبا است و $\ o_{t}  $ بیانگر بردار پارامترهای ورودی فعلی می‌باشد. 

توزیع احتمال حالت آغازین:
                                     $$\ \pi=(\pi_{i})  $$  $$\ \pi_{i}=p(q_{1}=i),\qquad 1\le i\le N $$
به این ترتیب  یک سه تایی مرتب برای HMM،  با توزیع احتمال گسسته  خواهیم داشت :
$$\ \lambda=(A,B,\pi)  $$

**فرضیات مدل مخفی مارکوف**
برای اینکه مدل مخفی مارکوف از لحاظ ریاضی و محاسباتی قابل بیان باشد فرضهای زیر در مورد آن در نظر گرفته می‌شود.

۱- فرض مارکوف

با داشتن یک مدل مخفی مارکوف، احتمال انتقال از حالت i به حالت j به صورت زیر تعریف می‌شود:

$$\ a_{ij}=p(q_{t+1}|q_{t}=i)$$

به بیان دیگر فرض می‌شود که حالت بعدی تنها به حالت فعلی بستگی دارد. مدل حاصل از فرض مارکوف یک مدل HMM مرتبه صفر می‌باشد.
در حالت کلی، حالت بعدی می‌تواند با k حالت قبلی وابسته باشد. این مدل که مدل HMM مرتبه k ام گفته می‌شود، با استفاده از احتمالات انتقال به صورت زیر تعریف می‌گردد.

$$\ a_{i1}a_{i2}a_{i3}a{i4}... =p(q_{t+1}=j|q_{t}=i_{1},q_{t-1}=i_{2}.... ,q_{t-k+1}=i_{k} ,1\le i_{1},i_{2},...i_{k},j\le N))$$
به نظر می‌رسد که یک مدل HMM از مرتبه بالاتر باعث افزایش پیچیدگی مدل می‌شود. علی‌رغم اینکه مدل HMM مرتبه اول متداول ترین مدل است، برخی
تلاشها برای استفاده از مدلهای دارای مرتبه بالاتر نیز در حال انجام می‌باشد.

2 -فرض ایستایی

در اینجا فرض می‌شود که احتمال انتقال در بین حالات از زمان واقعی رخداد انتقال مستقل است. در این صورت می توان برا ی هر$t_{۱},t_{۲} $نوشت

$$\ p(q_{t_{1}+1}=j|q_{t_{1}}=i)=p(q_{t_{2}+1}=j|q_{t_{2}}=i$$

۳ -فرض استقلال خروجی

در این حالت فرض می‌شود که خروجی (مشاهدات) فعلی به صورت آماری از خروجی قبلی مستقل است. می توان این فرض را با داشتن دنباله‌ای از خروجی‌ها مانند بیان نمود:

$$\ O=o_{1},o_{2},....o_{T}$$
آنگاه مطابق با این فرض برای مدل HMM با نام$\ \lambda $ خواهیم داشت:
$$\ p(O|q_{1},q_{2},..q_{T},\lambda)=\begin{matrix} \prod_{t=1}^T p(O_{t}|q_{t},\lambda)\end{matrix}$$
اگر چه بر خلاف دو فرض دیگر این فرض اعتبار کمتری دارد. در برخی حالات این فرضیه چندان معتبر نیست و موجب می‌شود که مدل HMM با ضعفهای
عمده‌ای مواجه گردد.

ﺑﺮای اﻳﻨﮑﻪ ﻣﺪل HMM در دنیای  واﻗﻌﻲ ﻗﺎﺑﻞ اﺳﺘﻔﺎدﻩ ﺑﺎﺷﺪ ﺑﺎﻳﺪ ** ﺳﻪ** ﻣﺴﺎﻟﻪ ﻣﻬﻢ ﺣﻞ ﺷﻮد. اﻳﻦ ﺳﻪ ﻣﺴﺎﻟﻪ ﺑﻪ ﻗﺮار زﻳﺮﻧﺪ:

###1- ارزﻳﺎﺑﻲ ﻣﺴﺎﻟﻪ [^10]
ﺑﺎ داﺷﺘﻦ دﻧﺒﺎﻟﻪ ﻣﺸﺎهﺪات$\ O=(o_{1},o_{2},.... ,o_{t})$ و ﻣﺪل $\ \lambda=(A,B,\pi) $  ﭼﮕﻮﻧﻪ$p(O|Q,\lambda)$ ، اﺣﺘﻤﺎل ﺗﻮﻟید دﻧﺒﺎﻟﻪ ﻣﺸﺎهدات ﺗﻮﺳﻂ$\lambda$ را ﻣﺤﺎﺳﺒﻪ ﻧﻤﺎییم

###2- ﮐﺪﮔﺸﺎﻳﻲ ﻣﺴﺎﻟﻪ  [^11]

ﺑﺎ داﺷﺘﻦ دﻧﺒﺎﻟﻪ ﻣﺸﺎهﺪات$\ O=(o_{1},o_{2},.... ,o_{t})$  و ﻣﺪل$\ \lambda=(A,B,\pi) $   ﭼﮕﻮﻧﻪ دﻧﺒﺎﻟﻪ ﺣﺎﻻت بهینه$\ Q=(q_{1},q_{2},.... ,q_{t})$ ﺑﺮای ﺗﻮلید $\ O=(o_{1},o_{2},.... ,o_{t})$را ﺑﺪﺳﺖ ﺁورﻳﻢ؟

**3-ﺁﻣﻮزش ﻣﺴﺎﻟﻪ [^12]**

ﭼﮕﻮﻧﻪ ﭘﺎراﻣﺘﺮهﺎی ﻣﺪل $A,B,\pi$ را ﺑﺪﺳﺖ ﺁورﻳﻢ؟

**ارزیابی**

در ﺷﻨﺎﺳﺎﻳﻲ ﮔﻔﺘﺎر، ﻣﺴﺎﻟﻪ ارزﻳﺎبی ﺑﺮای ﺷﻨﺎﺳﺎیی ﮐﻠﻤﺎت ﺟﺪا [^13] اﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد و معمولا در آن از رواﻟﻬﺎی پیشرو و ﭘﺴﺮو استفاده میشوﺪ. در اﻳﻦ روش ﺗﻤﺎم دﻧﺒﺎﻟﻪ ﺣﺎﻟﺘﻬﺎی ﺑﺎ ﻃﻮل t در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮد ﺑﺮای ﻣﺜﺎل اﺣﺘﻤﺎل ﺗﻮﻟید "دﻧﺒﺎﻟﻪ ﻣﺸﺎهﺪات"$\ O=(o_{1},o_{2},.... ,o_{t})$  از  "دﻧﺒﺎﻟﻪ ﺣﺎﻻت" $\ Q=(q_{1},q_{2},.... ,q_{t})$ از ﻣﺪل$\lambda$ ، ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮد.
$$ \ p(O|Q_{1},\lambda)=\begin{matrix} \prod_{i=1}^t p(O_{i}|q_{i},\lambda)\end{matrix}$$
ﮐﻪ ﻣﻲ ﺗﻮان ﺁن را ﺑﻪ ﺷﮑﻞ زﻳﺮ نیز ﻧﻮﺷﺖ:
$$p(O|Q_{1},\lambda)= b_{q1}(O1),b_{q2}(O2),....,b_{qt}(Ot)$$

**کدگشایی**

 ﻣﺴﺄﻟﻪ دوم ﮐﻪ ﺑﺪﺳﺖ ﺁوردن رﺷﺘﻪ ﺣﺎﻻت بهینه اﺳﺖ ﺗﻮﺳﻂ اﻟﮕﻮرﻳﺘﻢ ﺟﺴﺘﺠﻮی وﻳﺘﺮﺑﻲ اﻧﺠﺎم ﻣﻲﺷﻮد و در ﻓﺎز ﺑﺎزﺷﻨﺎﺳﻲ ﺑﻜﺎر ﻣﻲﺁﻳﺪ 
در این حالت می‌خواهیم با داشتن دنباله مشاهدات$O=\{O_1,... ,O_t\}$ و مدل $lambda=\{A,B,\pi\} $دنباله حالات بهینه$Q=\{q_1,... ,q_t\} $برای تولید $O=\{O_1,... ,O_t\}$را بدست آوریم.
یک راه حل این است که محتمل ترین حالت در لحظه t را بدست آوریم و تمام حالات را به این شکل برای دنباله ورودی بدست آوریم. همانطور که در تجربه دیده میشود  این روش در برخی حالات باعث تولید یک دنباله نا معتبر و بدون معنا از حالات را میشود!!!! به همین دلیل باید راهی پیدا نمود که یک چنین مشکلی نداشته باشد. 
در اینجا برای تکمیل سیر انجام کار، الگوریتم ویتربی پیشنهاد شده است
در روش الگوریتم ویتربی ، دنباله حالاتِ کامل با **بیشترین مقدار نسبت شباهت** پیدا می‌شود. در این روش برای ساده کردن محاسبات متغیر کمکی زیر را تعریف می‌نماییم.

$$\delta_t(i)=max p\{q_1,q_2,... ,q_{t-1},q_t=t,o_1,o_2,... ,o_{t-1}|\lambda\}$$

که در شرایطی که حالت فعلی برابر با i باشد، بیشترین مقدار احتمال برای دنباله حالات و دنباله مشاهدات در زمان t را می‌دهد. به همین ترتیب می توان روابط بازگشتی زیر را نیز بدست آورد.


$$\delta_{t+1}(j)=b_j(o_{t+1})[max \delta_t(i)a_{ij}],\qquad 1\le i\le N,\qquad 1\le t\le T-1 $$

که در آن

$$\delta_1(j)=\pi_j b_j (o_1),\qquad 1\le i\le N$$
[](<a href="http://tinypic.com?ref=23ro12h10fxbis" target="_blank"><img src="http://i5861.tinypic.com/23ro12h10fxbis.jpg" border="0" alt="Image and video hosting by TinyPic"></a>)

تابع viter_recur  در کد این کار را انجام میدهد.

به همین دلیل روال پیدا کردن دنباله حالات با بیشترین احتمال، از محاسبه مقدار$ \delta_j(i), i\le j\le N$ و با کمک رابطه فوق شروع می‌شود. در این روش در هر زمان یک اشاره گر به حالت برنده قبلی خواهیم داشت. در نهایت حالت$ \ j^* $را با داشتن شرط زیر بدست می‌آوریم.

$$\ j^*=arg  max \delta_T(i),$$

و با شروع از حالت$ \ j^*$، دنباله حالات به شکل بازگشت به عقب و با دنبال کردن اشاره گر به حالات قبلی بدست می‌آید. با استفاده از این روش می توان مجموعه حالات مورد نظر را بدست آورد. این الگوریتم را می توان به صورت یک جستجو در گراف که نودهای آن برابر با حالتها مدل HMM در هر لحظه از زمان می‌باشند نیز تفسیر نمود

**ﺷﻨﺎﺳﺎﻳﻲ ﻣﺒﺘﻨﻲ ﺑﺮ اﻟﮕﻮرﻳﺘﻢ وﻳﺘﺮﺑﻲ**

در اﻟﮕﻮرﻳﺘﻢ وﻳﺘﺮﺑﻲ، امتیاز وﻳﺘﺮﺑﻲ، ، ﺑﺮای هﻤﻪ ﺣﺎﻟﺘﻬﺎی ﻣﺪل زﺑﺎﻧﻲ در زﻣﺎن t ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮد و آنگاه ﻣﺤﺎﺳﺒﻪ امتیاز وﻳﺘﺮﺑﻲ
در زﻣﺎن t+1 ﺑﺎ ﮐﻤﮏ راﺑﻄﻪ زیر اداﻣﻪ ﻣﻲ ﻳﺎﺑﺪ.
$$\bar b_j(k)=\frac{\sum_{t=1}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)},\qquad 1\le j\le N,\qquad 1\le k\le M$$
 اﻳﻦ روال از ﺁن ﺟﻬﺖ ﮐﻪ ﭘﺮدازش را در زﻣﺎن t ﮐﺎﻣﻼ اﻧﺠﺎم ﻣﻲ دهﺪ و ﺁﻧﮕﺎﻩ ﺑﻪ زﻣﺎن t+1 ﻣﻲ رود، ﺗﺤﺖ ﻋﻨﻮان ﺟﺴﺘﺠﻮی وﻳﺘﺮﺑﻲ هﻤﮕﺎم ﺑﺎ زﻣﺎن [^14] ﺷﻨﺎﺧﺘﻪ ﻣﻲ ﺷﻮد. در ﻧﻬﺎﻳﺖ ﺑﺮﮔﺸﺖ ﺑﻪ ﻋﻘﺐ در ﺟﻬﺖ ﺣﺎﻟﺘﻬﺎی دارای بیشترﻳﻦ امتیاز، دﻧﺒﺎﻟﻪ ﺣﺎﻻت بهینه را ﻧتیجه ﻣﻲ دهد. اﻟﺒﺘﻪ اﮔﺮ ﺗﻌﺪاد ﺣﺎﻻت زﻳﺎد ﺑﺎﺷﺪ
ﺟﺴﺘﺠﻮی وﻳﺘﺮﺑﻲبسیار ﭘﺮ هﺰﻳﻨﻪ ﺧﻮاهد ﺑﻮد. در اﻳﻦ ﺣﺎﻟﺖ ﺗﻨﻬﺎ ﺗﻌﺪادی از ﺣﺎﻻت ﮐﻪ دارای بیشترﻳﻦ امتیاز هﺴﺘﻨﺪ ﻧﮕﻬﺪاری ﻣﻲ ﺷﻮﻧﺪ و
از ﻧﮕﻬﺪاری بقیه ﺣﺎﻻت ﺻﺮف ﻧﻈﺮ ﻣﻲ ﮔﺮدد. اﻳﻦ روال ﺟﺴﺘﺠﻮ ﺑﺎ ﻧﺎم ﺟﺴﺘﺠﻮی ﭘﺮﺗﻮﻳﻲ [^15] نیز نامیده ﻣﻲ ﺷﻮد.

**یادگیری**

 ﻣﺴﺄﻟﻪ ﺳﻮم نیز ﻣﺴﺄﻟﻪ ﺗﺨمین بهینه ﭘﺎراﻣﺘﺮهﺎی ﻣﺪل ﻳﺎ همان ﻣﺴﺄﻟﻪ ﺁﻣﻮزش ﻣﺪل ﻣﺎرکف ﻣﻲﺑﺎﺷﺪ که معمولا  ﺑﻪ ﻳﻜﻲ از دو روش وﻳﺘﺮﺑﻲ و ﻳﺎ ﺑﺎم-ولش اﻧﺠﺎم ﻣﻲﮔﺮدد. 
وظیفه یادگیری در HMM، یافتن بهترین احتمالات جابجایی‌ها  بر اساس یک دنباله از خروجی هاست .میزان بهینگی مدل پنهان مارکوف در مرحله یادگیری ، در مسائل مختلف ،متفاوت می باشد . در اینجا معیار بهینگی به وسیله متد maximum likelihood  بر اساس خروجی داده شده تخمین زده می‌شوند .
ما در اینجا  برای پیدا کردن maximum likelihood محلی، از  الگوریتم   Baum-Welch استفاده میکنیم .

در معیار ML ما سعی داریم که احتمال یک دنباله ورودی $\ O^w$ که به کلاس w تعلق دارد را با داشتن مدل HMM همان کلاس بدست آوریم. این میزان احتمال برابر با نسبت شباهت کلی دنباله مشاهدات است و به صورت زیر محاسبه می‌شود.

$$\ L_{tot}=p\{O^w|\lambda_w\}$$

با توجه به رابطه فوق در حالت کلی معیار ML به صورت زیر تعریف می‌شود :

$$\ L_{tot}=p\{O|\lambda\}$$

اگر چه هیچ راه حل تحلیلی مناسبی برای مدل$ \lambda=\{A,B,\pi\}$ وجود ندارد که مقدار$ \ L_{tot}$ را ماکزیمم نماید، لیکن می‌توانیم با استفاده از یک روال بازگشتی پارامترهای مدل را به شکلی انتخاب کنیم که مقدار ماکزیمم بدست آید. روش Baum-Welch و یا روش مبتنی بر گرادیان از جمله این روشها هستند.

**الگوریتم بام- ولش**

این روش را می توان به سادگی و با محاسبه احتمال رخداد پارامترها و یا با محاسبه حداکثر رابطه زیر بر روی$ \bar \lambda$ تعریف نمود.

$$\ Q(\lambda,\bar \lambda)=\sum_q p\{q|O,\lambda\}log[p\{O,q,\bar \lambda\}]$$

یکی از ویژگیهای مخصوص این الگوریتم این است که همگرایی در آن تضمین شده‌است. برای توصیف این الگوریتم که به الگوریتم پیشرو- پسرو نیز معروف است، باید علاوه بر متغیرهای کمکی پیشرو و پسرو که قبلاً تعریف شده‌اند، متغیرهای کمکی بیشتری تعریف شود. البته می توان این متغیرها را در قالب متغیرهای پیشرو و پسرو نیز تعریف نمود.
اولین متغیر از این دست احتمال بودن در حالت i در زمان t و در حالت j در زمان t+1 است، که بصورت زیر تعریف می‌شود.

$$\xi_t(i,j)=p\{{q_t}=i,q_{t+1}=j|O,\lambda\}$$

این تعریف با تعریف زیر معادل است :

$$\xi_t(i,j)=\frac{p\{q_t=i,q_{t+1}=j,O|\lambda\}}{p\{O|\lambda\}}$$

می توان این متغیر را با استفاده از متغیرهای پیشرو و پسرو به صورت زیر تعریف نمود.

$$\xi_t(i,j)=\frac{\alpha_t(i)a_{ij}\beta_{t+1}(j)b_j(o_{t+1})}{\sum_{i=1}^N\sum_{j=1}^N \alpha_t(i)a_{ij}\beta_{t+1}(j)b_j(o_{t+1})}$$

متغیر دوم بیانگر احتمال پسین حالت i با داشتن دنباله مشاهدات و مدل مخفی مارکوف می‌باشد و به صورت زیر بیان می‌شود.

$$\gamma_t(i)=p\{q_t=i|O,\lambda\}$$

این متغیر را نیز می توان در قالب متغیرهای پیشرو و پسرو تعریف نمود :

$$\gamma_t(i)=\left[\frac{\alpha_t(i)\beta_t(i)}{\sum_{i=1}^N \alpha_t(i)\beta_t(i)}\right]$$

رابطه بین دو متغیر فوق بصورت زیر بیان می‌شود :

$$\gamma_t(i)=\sum_{i=1}^N \xi_t(i,j),\qquad 1\le i\le N,\qquad 1\le t\le M$$

اکنون می توان الگوریتم آموزش بام – ولش را با ماکزیمم کردن مقدار بدست آورد. اگر مدل اولیه ما باشد، می‌توانیم متغیرهای پسرو و پیشرو و متغیرهای \xi و $\gamma$ را تعریف نمود. مرحله بعدی این است که پارامترهای مدل را با توجه به روابط بازتخمین زیر بروزرسانی نماییم :

$$\bar \pi_i=\gamma_1(i),\qquad 1\le i\le N$$

$$\bar a_{ij}=\frac{\sum_{t=1}^{T-1} \xi_t(i,j)}{\sum_{t=1}^{T-1} \gamma_t(i)},\qquad 1\le i\le N,\qquad 1\le j\le N$$

$$\bar b_j(k)=\frac{\sum_{t=1}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)},\qquad 1\le j\le N,\qquad 1\le k\le M$$

    >>>   Pest=Pest+repmat(PAI,1,D).*BETA;    %Since D_{1|T}(m,d) = \PAI(m) P_{m}(d) \Beta_{1}(m,d)

    >>>   if IterationNo>0            % re-estimate parameters
    >>>   PAI=GAMMA./sum(GAMMA);
    >>>   Aest=Aest.*A;   A=Aest./repmat(sum(Aest,2),1,M);
    >>>   B=Best./repmat(sum(Best,2),1,K);
    >>>   Pest=Pest.*P;   P=Pest./repmat(sum(Pest,2),1,D);
    >>>   end


+ [لینک کد ](https://www.fileswap.com/dl/ZkskmFc6Ab/hmm_code_sr.rar.htmlgithub.com/R-hosseini/sources)

##مراجع
+  C. Bregler and Y. Konig, ““Eigenlips” for robust speech recognition
in Proceedings of IEEE International Conference on
Acoustics, Speech, and Signal Processing (ICASSP ’94), vol. 2,
pp. 669–672, Adelaide, SA, Australia, April 1994.
+ A tutorial on hidden Markov models and selected application in speech recognition,lawrence r.rabiner,Fellow,IEE
+  S. and Luettin, J., “Audio-visual speech modeling
for continuous speech recognition,” IEEE Trans. Multimedia,
vol.2, no.3, pp.141–151, 2000.
+  Potamianos, G., Neti, C., Gravier, G., Garg, A., Senior, A.: Recent advances in
the automatic recognition of audiovisual speech. Proceedings of the IEEE 91(9)
(2003) 1306–1326
+  S. Tamura, K. Iwano, and S. Furui, “Multi-modal speech
recognition using optical-flow analysis for lip images,” Journal
of VLSI Signal Processing—Systems for Signal, Image, and
Video Technology, vol. 36, no. 2-3, pp. 117–124, 2004. 
+  T. Yoshinaga, S. Tamura, K. Iwano, and S. Furui, “Audio-visual
speech recognition using new lip features extracted from sideface
images,” in Proceedings of COST278 and ISCA Tutorial and
Research Workshop (ITRW) on Robustness Issues in Conversational
Interaction (Robust ’04), Norwich, UK, August 2004.
+ C. J. Leggetter and P. C. Woodland, “Maximum likelihood
linear regression for speaker adaptation of continuous density
hidden Markov models,” Computer Speech and Language,
vol. 9, no. 2, pp. 171–185, 1995.
+ G. Potamianos and H. P. Graf, “Discriminative training of
HMMstream exponents for audio-visual speech recognition,”
in Proceedings of IEEE International Conference on Acoustics,
Speech, and Signal Processing (ICASSP ’98), vol. 6, pp. 3733–
3736, Seattle,Wash, USA, May 1998.

[^1]:  lip syncing 
[^2]: speech recognition
[^3]: Hidden Markov Model
[^4]:  forward Algorithm
[^5]: backward Algorithm
[^6]: Viterbi Algorithm
[^7]: Baum-Welch Algorithm
[^8]: Expectation Maximization
[^9]: Maximum Likelihood
[^10]: Evaluation Problem
[^11]:Decoding problem
[^12]:Learning problem
[^13]: isolated word recognition
[^14]: time synchronous Viterbi search
[^15]: beam search