جستجوی کلمات کلیدی در گفتار (تحقیقاتی)

تغییرات پروژه از تاریخ 1396/11/11 تا حالا
یکی از کاربردهای مهم پردازش گفتار، یافتن کلمات کلیدی در گفتار است. به عنوان مثال یک پایگاه داده از صداهای ضبط شده را در نظر بگیرید. فرض کنید بخواهیم در این گفتارها به دنبال مجموعه ای از واژه های کلیدی بگردیم. در این صورت باید از الگوریتم های واژه‌یابی گفتار استفاده کنید. یکی از مقال هایی که این الگوریتم می تواند در آن جا مورد استفاده قرار گیرد، گفتارهای ضبط شده در یک کلاس درس است. مثلا فرض کنید که _گفتارهای درس مدارهای الکتریکی_ضبط شده باشد و ما می خواهیم بدانیم در کدامیک از قسمت های این مجموعه در مورد کلمه کلیدی _دیود_ صحبت شده است.

# مقدمه
امروزه پردازش گفتار تقریبا در همه ی جنبه های زندگی ما نفوذ کرده. از گوشی و ساعت های هوشمند گرفته تا مباحث نظامی و امنیتی، همه جا نشانه ای از حضور تکنولوژی پردازش گفتار دیده می شود. 
اما این مباحث دهه هاست که در حوزه ی دانشگاهی مورد بررسی هستند، پس چرا در سال های اخیر اسم آن اینقدر بر سر زبان ها افتاده است؟ دلیل آن این است که اخیرا شاخه ی جدید از هوش مصنوعی به نام یادگیری عمیق توانسته است پردازش گفتار را به اندازه ای دقیق کند که خارج از محیط های کنترل شده هم بتوان از آن استفاده کرد.
استاد دانشگاه استنفورد و بنیان گذار سایت کورسرا، Andrew Ng پیش بینی کرده است که تا زمانی که دقت پردازش گفتار از 95 درصد به 99 درصد می رسد، اصلی ترین راه برای ارتباط برقرار کردن با کامپیوتر می شود. این فاصله ی 4 درصدی ، در واقع تفاوت میان "به طور آزاردهنده ای غیرقابل اعتماد" و "بسیار مفید" است که به لطف هوش مصنوعی و خصوصا یادگیری عمیق، آنقدری طول نمی کشد که بشر به این دقت می رسد.
درین بخش ما انحصارا به استخراج و جستجوی کلمات کلیدی در گفتار می پردازیم. گفته می شود آژانش امنیت ملی آمریکا مکالمات افراد بسیار زیادی را شنود کرده و به کار رفتن عبارات خاصی در متن مکالمه را بررسی می کند!  از کاربرد های امنیتی این موضوع که بگذریم این حوزه در جنبه های دیگر نیز کاربرد های فراوانی دارد.

# شرح مسئله و کارهای مرتبط
**هدف مسئله:** هدف ما همانطور که در بخش چکیده گفته شده است، پیدا کردن روشی برای استخراج و جستجوی کلمات به کار رفته در یک فایل صوتی می باشد. برای این منظور ما از هوش مصنوعی و شاخه های متنوع آن کمک خواهیم گرفت.
**شرح مسئله و راهکار ها - استخراج ویژگی **: خوب، اگر بخواهیم خیلی ساده مسئله را بیان کنیم، ما یک عامل هوشمند داریم که صوت را ورودی گرفته و لیست کلمات به کار رفته را خروجی می دهد.
![شکل1: چارت کلی مسئله](https://cdn-images-1.medium.com/max/1600/1*nJNxFmJaHxyJTtVFkhGTlg.png)
اولین راهی که به ذهن می رسد این است که  یک بار صوت مختص به یک کلمه و کلمه معادل را به عامل هوشمند داد و از آن خواست که در صورت مشاهده چنین صوتی، کلمه ی معادل را خروجی دهد. اما به این سادگی نیست... مشکلات بسیار زیادی وجود دارد که باعث می شود این روش عملی نباشد، برای مثال اولین مشکل این است: فرض کنید در صوتی که ما آن را برای یادگیری به عامل هوشمند داده ایم در عرض 1 ثانیه کلمه ی "سلام" گفته شود. مشکلی که وجود دارد این است که اگر کسی کلمه ی سلام را زودتر یا دیرتر ادا کند برای مثال در عرض نیم ثانیه بگوید "سلام" یا 5 ثانیه آن را طول بدهد و عبارت را بکشد و بگوید "سسسسللللااااامممم!" عامل هوشمند ما دیگر قادر به شناسایی عبارات گفته شده نیست.
*تبدیل صوت به داده ی دیجیتال*:[1] اولین کاری که باید انجام داد تبدیل امواج صوتی به عدد و داده های دیجیتال قابل فهم برای کامپیوتر است. چونکه در نهایت تنها چیزی که کامپیوتر متوجه می شود 0 و 1 است نه امواج آنالوگ! برای مثال به موج صوتی زیر توجه کنید، درین شکل عبارت "Hello" گفته شده است:
![شکل2: مدلی از سیگنال گفتاری](https://cdn-images-1.medium.com/max/2000/1*6_q1VIVJuavYa-9Uby_L-A.png)
برای تبدیل این سیگنال به داده ی دیجیتال، می توان هر چند میکرو ثانیه، مقدار سیگنال را با تقریب به نزدیک ترین عدد تعریف شده گرد کرد و آن را ذخیره نمود. اینکه هر چند میکروثانیه این کار را انجام دهیم یا مقدار سیگنال در واحد زمان را با چه دقتی تعریف کرده باشیم، دقت معادل دیجیتال این سیگنال را تعیین می کند که مشخص است هرچقد بخواهیم دقت را زیادتر کنیم داده ی بدست آمده حجیم تر می شود. البته نکته ی جالب این است که زیاد بودن نرخ نمونه برداری ما بیشتر از یک حدی باعث افزایش کیفیت نمی شود. بر اساس قضیه ی Nyquist ، اگر نرخ نمونه برداری ما دو برابر بزرگترین فرکانس به کار رفته در موج باشد، می توانیم از روی داده ها به طور کامل به سیگنال اولیه برسیم. برای همین نرخ نموداری 16KHz برای پردازش گفتار انسان کافی است!
اگر ما بخواهیم از روی این داده ها به صورت خام عامل هوشمند را آموزش دهیم، مسئله بسیار پیچیده و سخت می شود. برای همین مسئله را ساده تر میکنیم. داده های بدست آمده را به بخش های 20 میلی ثانیه ای تقسیم میکنیم و پردازش را روی آن ها انجام می دهیم.
اما مشکل اینجاست که حتی 20 میلی ثانیه از موج ماهم ترکیبی پیچیده از صوت هایی با فرکانس های مختلف است.شکل[3]
![شکل3: شکل موج برای 20 میلی ثانیه از سیگنال صوتی](https://cdn-images-1.medium.com/max/2000/1*ZMxcyjNFqIOVzJRM9BCMWw.png)
برای حل این مشکل ما با استفاده از تبدیل فوریه، سیگنال را به اجزای تشکیل دهنده اش تقسیم کرده و مشخص میکنیم هر جزء چقد انرژی دارد. 
![شکل4: میزان انرژی فرکانس های مختلف در یک نمونه صوتی 20 میلی ثانیه ای. همانطور که مشاهده می شود فرکانس های پایین انرژی بیشتری دارند پس این سیگنال نمایانگر صدای مردانه است](https://cdn-images-1.medium.com/max/2000/1*A4CxgdyqYd_nrF3e-7ETWA.png)

![شکل5: نمونه ی کامل ساده شده برای سیگنال صوتی کلمه ی "Hello"](https://cdn-images-1.medium.com/max/2000/1*bhd7B-s-Qnds3HGV6LOo8A.png)
حال که سیگنال صوتی را ساده سازی کردیم می توانیم از داده های بدست آمده برای کار با عامل هوشمند استفاده کنیم.
عامل هوشمند پردازش گفتار می تواند بر اساس چندین مدل و متد مختلف ساخته شود. برای مثال مدل مخفی مارکوف ،  Dynamic Time Warping ، شبکه های عصبی ، یادگیری عمیق و متد های دیگر که به شرح مهم ترین و پرکاربرد ترین آنها می پردازیم[1]

##مدل مارکوف: 
برای توضیح مدل مارکوف، ابتدا سراغ مثال ساده ای می رویم.
فرض کنید آب و هوای یک شهر، تنها می تواند سه حالت مختلف آفتابی، بارانی و برفی باشد. حال وضعیت آب و هوای شهر را به یک مدل مارکوف تبدیل می کنیم. برای این منظور، فرض می کنیم اگر آب و هوای امروز شهر مشخص باشد، وضعیت آب و هوای فردا را با احتمال مشخص می توان پیش بینی کرد. به بیان دیگر وضعیت آب و هوای فردا تنها وابسته به وضعیت آب و هوای امروز و مستقل از سایر موارد است. این یک مدل مارکوف مرتبه اول می باشد (اگر وضعیت فردا به وضعیت امروز و وضعیت روز گذشته بستگی داشت، مدل مارکوف مرتبه دوم بود و همچنین در حالت کلی اگر وضعیت فردا به وضعیت n روز گذشته اش بستگی داشته باشد مدل مارکوف مرتبه n خواهیم داشت). برای مثال اگر امروز آفتابی باشد، به احتمال 0.9 فردا نیز آفتابی خواهد بود. یا به احتمال 0.075 فردا بارانی و یا به احتمال 0.015 فردا برفی می باشد.
خوب حال می خواهیم مدل مارکوف را نشان دهیم. برای این منظور به مجموعه ای از وضعیت ها نیاز داریم که آن هارا با \{ x1,x2,...,xn\} نشان می دهیم. در مثال بالا تنها 3 وضعیت آفتابی، بارانی و برفی داریم برای همین n برای مثال بالا 3 می باشد. 
همین طور احتمال هر تغییر وضعیت ممکن نیز باید مشخص باشد. برای مثال همانطور که در بالا اشاره شد اگر امروز آفتابی باشد به احتمال 0.9 فردا نیز آفتابی است. این احتمالات را می توان توسط ماتریس نیز نشان داد که برای مثال بالا به صورت زیر است.
![احتمالات تغییر حالات](https://wikimedia.org/api/rest_v1/media/math/render/svg/6cea2dc36a546e141ce2d072636dbf8a0005f235)
دقت کنید که در این مثال ما یک مدل مارکوف مرتبه 1 را بررسی می کنیم که برای آن احتمال رخ دادن هر وضعیت صرفا به وضعیت قبلی بستگی دارد، به عبارت دیگر داریم:
![رابطه ی احتمالات مدل مارکوف مرتبه یک](https://wikimedia.org/api/rest_v1/media/math/render/svg/5bc8275bf0982e56b0563650eeb2dd2eed89d6bd)
علاوه بر دو مورد بالا، به احتمال رخ دادن وضعیت اولیه نیز نیاز داریم. برای مثال اینکه در اولین روز احتمال اینکه هوا آفتابی باشد چقدر است 
![احتمالات رخ دادن وضعیت اولیه](https://image.ibb.co/h1iauR/1.png)

حال اگر یک دنباله از وضعیت ها که پشت سر هم اتفاق می افتد داشته باشیم، با استفاده از این مدل مارکوف می توانیم بگوییم که احتمال رخ دادن آن چقدر است.
مثلن احتمال اینکه دنباله وضعیت : آفتابی - آفتابی - برفی - بارانی ، رخ دهد ، باید : احتمال رخ داد وضعیت اولیه آفتابی -  احتمال آفتابی بودن یک روز در صورت آفتابی بودن روز قبل - احتمال برفی بودن یک روز در صورت آفتابی بودن روز قبل - احتمال بارانی بودن یک روز در صورت برفی بودن روز قبل ، را در هم ضرب کنیم که تمام این احتمالات را در تعریف مدل مارکوف آب و هوا داریم.

##مدل مخفی مارکوف:
حال که مدل مارکوف را تعریف کردیم، به بیان مدل مخفی مارکوف می پردازیم.
در قسمت قبل خواندیم که در مدل مارکوف تمام وضعیت ها کاملا قابل مشاهده اند (Fully Observable) و مشخص است که انتقال از چه وضعیتی به چه وضعیتی صورت می گیرد. بر خلاف مدل مارکوف، در مدل مخفی مارکوف وضعیت ها مشخص نیستند و ازین رو اسم مدل مخفی مارکوف برای آن انتخاب شده است. حال با ذکر مثالی به توضیح مدل مخفی مارکوف می پردازیم.
در مثالی که در مورد مدل مارکوف ذکر شد، فرض کنید همان شرایط برقرار باشد. اما ما به عنوان ناظر در شهری که می خواهیم از آن مدل بسازیم حضور نداشته باشیم و نتوانیم وضعیت آب و هوایی آن شهر را به طور قطعی مشخص کنیم، اما دوستی به اسم علی در شهر مورد نظر داشته داشته باشیم، که هرروز تنها یکی از سه لباس مختلف پیراهن، کت یا سویشرت را برای پوشیدن انتخاب کند، و همچنین بدانیم که انتخاب علی تنها وابسته به وضعیت آب و هوایی آن روز شهر است. همینطور حق نداریم از علی درباره وضعیت آب و هوایی شهر سوالی بپرسیم اما می توانیم هرروز لباسی که برای پوشیدن انتخاب کرده است را بدانیم. حال مدل مخفی مارکوف را برای شهر مورد نظر می سازیم.
برای این کار علاوه بر مواردی که در مورد مدل مارکوف تعریف شد، لازم است تعریف های جدیدی بیان شود.
1. مجموعه ی مشاهده های ممکن که در اینجا پیراهن، کت و یا سویشرت است.
2. احتمالات خروجی که احتمال هر مشاهده را به شرط بودن در وضعیت x مشخص می کند و آن به صورت زیر نمایش می دهیم :
![احتمال خروجی برای مشاهده ی k](https://image.ibb.co/mZTHtm/2.png)
که در اینجا k برای مثال می تواند پیراهن  و xi وضعیت هوای آفتابی باشد که در این صورت b بیانگر احتمال پوشیده شدن پیراهن توسط علی به شرط آفتابی بودن هوا است.
اکنون می توانیم احتمال دنباله ای از مشاهدات را محاسبه کنیم، این احتمال از رابطه ی زیر محاسبه می شود:
![احتمال وقوع دنباله ای از مشاهدات](https://image.ibb.co/ic6j66/3.png)
برای مثال فرض کنید می خواهیم احتمال اینکه علی در سه روز متوالی کت بپوشد را محاسبه کنیم. داریم :
![احتمال مشاهده خاص برای مدل آب و هوای شهر](https://image.ibb.co/bHZRKR/4.png)
به بیان دیگر احتمال اینکه علی سه روز متوالی کت بپوشد را برای تمام وضعیت هایی که ممکن است در این سه روز اتفاق بیفتد حساب کرده و آن هارا باهم جمع می کنیم. چون احتمال رخ داد یک وضعیت خاص و احتمال یک مشاهده ی خاص به شرط بودن در یک وضعیت خاص را در اختیار داریم، می توانیم این محاسبه را انجام دهیم.

**مسائلی که می توان به کمک مدل مخفی مارکوف بررسی کرد**:
1. مسئله ی دسته بندی و ارزیابی: اگر مدل مخفی مارکوف لاندا را داشته باشیم، احتمال وقوع دنباله ی خاصی از مشاهدات چقدر است ؟ (این مسئله را در بخش قبل بررسی کردیم). با کمک این مسئله می توانیم از میان چند مدل مخفی مارکوف مختلف ، آن یکی که به مشاهدات ما نزدیک تر است را انتخاب کنیم.
2.  مسئله ی کدگشایی: چه دنباله ای از وضعیت ها، با احتمال بیشتری دنباله ی مشاهدات مشخص شده را تولید می کند؟ - حل این مسئله برای "بازشناسی" یا بررسی اینکه آیا وضعیت ها مفهوم خاصی دارند کاربرد دارد.
3. مسئله ی یادگیری: اگر دنباله ای از مشاهدات را داشته باشیم، چه مدل مخفی مارکوفی با احتمال بیشتری این دنباله از مشاهدات را تولید می کند؟ - این مسئله سخت ترین مسئله در این بین است

**استفاده از مدل مخفی مارکوف در پردازش گفتار**
در طول چندین سال گذشته این روش به عنوان موفقترین روش در شناسایی گفتار مورد استفاده قرار گرفته است. دلیل اصلی این مساله این است که مدل مخفی مارکوف قادر است به شکل بسیار خوبی خصوصیات سیگنال گفتار را در قالب ریاضی قابل فهم تعریف کند. 
در یک سیستم پردازش گفتار مبتنی بر مدل مخفی مارکوف قبل از آموزش ، یک مرحله استخراج ویژگی انجام می گردد.

ویلپن در مقاله ی خود [2] به استفاده از مدل مخفی مارکوف برای شناسایی کلمات کلیدی پرداخته است. یکی از مشکلات موجود اتوماتیک کردن فرایند اپراتور های انسانی بوده، به این صورت که تماس گیرنده با گفتن یکی از کلمات "Collect" , "Calling-Card" , "Third-number" ,"person" , "operator" به صورت اتوماتیک به خط تلفن مورد نظر متصل شود. اگر تماس گیرنده در سکوت کامل باشد و تنها کلمه ی مورد نظر را بگوید، مسئله تا حدی ساده می شود. اما مشکل اینجاست که عموم تماس گیرنده ها علاوه بر کلمه ی مورد نظر کلمات دیگری را هم ادا میکنند. مثلن به جای گفتن "اپراتور" عبارت "اممم... لطفا مرا به اپراتور وصل کنید" را می گویند. و این مسئله اتوماتیک کردن فرایند اتصال به خط مورد نظر را سخت می کند.
ابتدا آنالیز LPC و Cepstral انجام می شود.  سیگنال صوتی در بازه 100 تا 3200 هرتز فیلتر شده و به صورت دیجیتال (با فواصل 6.67 هرتزی) تبدیل می شود. سپس این صدای دیجیتال شده به بخش های 45 میلی ثانیه ای تقسیم شده که در میان هرکدام از آن ها 15 میلی ثانیه فاصله است.
سپس با استفاده از مجموعه ای مدل های مخفی مارکوف که بر پایه کلمه ساخته شده اند، عبارت ورودی به صورت بخش به بخش بررسی شده و حالت ها ممکن و معتبر تولید می شود.
برای تولید مدل های مخفی مارکوف برپایه کلمات از یک الگوریتم برچسب زنی استفاده می شود. بدین صورت که با اعمال الگوریتم بر مجموعه ای از مدل های مخفی مارکوف موجود، token های ضعیف تر (که امتیاز آنها کمتر از میزان مشخصی است) انتخاب شده و مدل جدیدی را بر اساس این token ها می سازیم.

## الگوریتم Dynamic Time Warping
در زمینه بررسی سری های زمانی، DTW یک الگوریتم برای یافتن مشابهت میان دو سری زمانی است که ممکن است در سرعت متفاوت باشند. برای مثال مشابهت در راه رفتن می تواند توسط DTW شناسایی شود حتی اگر فردی از فرد دیگر سریعتر حرکت کند یا حتی حرکتش شتاب دار باشد.
اما این الگوریتم چطور کار می کند؟ فرض کنید دو تابع بر حسب زمان وجود دارد. در حالت عادی برای مقایسه این دو تابع، در هر نقطه زمانی مشخص تابع اول را با تابع دوم مقایسه می کنیم. مشکلی که این روش دارد این است که اگر تابع اول با تابع دوم اختلاف زمانی ثابتی داشته باشد یا به صورت شتاب دار با تابع دوم اختلاف زمانی داشته باشد، مقایسه بین دو تابع اختلاف بسیار زیادی را نشان می دهد هرچند که دوتابع بسیار شبیه باشند. اگر به نحوی می شد که تابع اول در زمان t1 را به جای مقایسه با تابع دوم در زمان t1 ،در زمان معادلی که بیشترین تشابه را دارند مقایسه کرد، این مشکل قابل حل بود.
![مقایسه بهینه بین دوتابع. مقدار تابع اول (خط بالا) در هر زمان با خط چین به معادل زمانی آن در تابع دوم (خط پایین) متصل شده است و مقایسه بین این دو نقطه صورت می گیرد](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Dynamic_time_warping.png/220px-Dynamic_time_warping.png)

 برای رفع این مشکل ساکو و چیبا [3] الگوریتمی با نام Dynamic Time Warping را ارائه دادند که در واقع یک الگوریتم برنامه نویسی پویاست. این الگوریتم بدین شیوه عمل می کند: ابتدا دو تابع A و B را به n نقطه زمانی مختلف تقسیم می کنیم. سپس ماتریسی n در n تشکیل می دهیم و روی ابتدای هر سطر آن مقدار تابع A در زمان x و روی ابتدای هر ستون آن نیز مقدار تابع B را در زمان x مشخص می کنیم.سپس هریک از خانه های ماتریس را بدین صورت پر میکنیم:
 اختلاف مقدار A و B برای آن خانه + کوچکترین مقدار موجود در خانه های قبلی مجاور (پایین، پایین چپ، چپ)
 برای مثال فرض کنید توابع (سری های زمانی) A و B به صورت زیر باشند
 ![نمودار دو تابع (سری زمانی) A و B](https://image.ibb.co/bHPyYm/dtw1.png)
 حال ماتریس فواصل را برای این دو تابع تشکیل داده و آن را پر میکنیم
 ![ماتریس فواصل دو تابع (سری زمانی) A و B](https://image.ibb.co/h5P466/dtw2.png)
 برای مثال همانطوری که مشاهده می کنید مقدار خانه ی (4,4) برابر است با :
 value(4,4) = |9-3| + min(11,5,5) = 11
 پس از کامل کردن ماتریس فواصل، جواب نهایی نگاشت به این صورت بدست می آید: از آخرین خانه ماتریس(بالاترین،راست ترین) شروع کرده، هرمرحله کوچیکترین خانه را بین خانه های مجاور (پایین، پایین چپ، چپ) انتخاب کرده و این کار را تا زمان رسیدن به خانه اول (پایین ترین، سمت چپ ترین) ادامه می دهیم و در نهایت مسیر پیموده شده جواب مورد نظر ما است.
 برای مثال بالا این مسیر را در شکل زیر مشاهده می کنید:
 ![مسیر بدست آمده برای نگاشت بهینه](https://image.ibb.co/k3HkDm/dtw3.png)
 
یکی از مهم ترین حوزه های کاربرد DTW حوزه ی پردازش گفتار است.همانطوری که بخش طرح مسئله اشاره شد، سرعت ادای کلمات هر بار ممکن است متفاوت باشد. با استفاده از الگوریتم DTW می توان مشابهت بین کلماتی که یکسان هستند اما با سرعت های مختلف ادا شده اند را شناسایی کرد.

##شبکه های عصبی
شبکه های عصبی مصنوعی سیستم ها و روش های محاسباتی نوین برای یادگیری ماشینی، نمایش دانش و در انتها اعمال دانش به دست آمده در جهت پیش بینی پاسخ های خروجی از سامانه های پیچیده هستند.ایده اصلی این گونه شبکه ها تا حدودی الهام گرفته از شیوه کارکرد سیستم عصبی زیستی برای پردازش داده ها و اطلاعات به منظور یادگیری و ایجاد دانش قرار دارد.
این سیستم از شمار زیادی عناصر پردازشی کاملا بهم پیوسته با نام نورون تشکیل شده که برای حل یک مسئله با هم هماهنگ عمل می کنند و توسط سیناپس ها (ارتباطات الکتروشیمیایی) اطلاعات را منتقل می کنند. در این شبکه ها اگر یک سلول اسیب ببیند بقیه سلول ها می توانند نبود آنرا جبران کرده؛ و نیز در بازسازی آن سهیم باشند. این شبکه ها قادر به یادگیری اند. مقلا با اعمال سوزش به سلول های عصبی لامسه، سلول ها یاد میگیرند که به طرف جسم داغ نروند و با این الگوریتم سیستم می آموزد که خطای خود را اصلاح کند.
![شکل8: شمای کلی و ساده ی یک شبکه ی عصبی](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Artificial_neural_network.svg/560px-Artificial_neural_network.svg.png)

حال به این سوال می پردازیم که مفهوم شبکه های عصبی مصنوعی چیست و چطور ساخته می شوند.
فرض کنید که می خواهیم رابطه (تابع) ای بین اندازه و قیمت یک خانه پیدا کنیم. برای این منظور اطلاعاتی شامل قیمت و اندازه چند خانه را از قبل داریم. در واقع می خواهیم رابطه ی بین اندازه و قیمت خانه را با کمک اطلاعاتی که از قبل درباره چند مثال داریم پیدا کنیم. این اطلاعات را در نمودار وارد می کنیم. ساده ترین تخمین برای این منظور، این است که این تابع را خطی در نظر بگیریم که در این صورت بهترین خطی که نمایانگر داده های از پیش موجود باشد و کمترین اختلاف را با آن ها داشته باشد، خط رگرسیون برای این داده هاست.
![خط رگرسیون برای داده های موجود](https://image.ibb.co/fh9M3m/neu1.png)
می توانیم یک عنصر را در نظر بگیریم که اندازه خانه را به عنوان ورودی می گیرد و با استفاده از تابع رگرسیون بدست آمده قیمت آن را خروجی می دهد. این عنصر یک نورون ساده است.
اما در واقعیت قیمت خانه نه تنها وابسته به اندازه آن، بلکه به موارد بسیار زیاد و متنوعی است. برای مثال موقعیت مکانی خانه، تعداد اتاق خواب ها و غیره. همینطور علاوه بر اینکه تعداد ورودی ها ممکن است زیاد باشد، خروجی ممکن است به صورت مستقیم و خطی تابعی از ورودی ها نباشد. در اینجا دیگر یک نورون ساده برای ما کارایی ندارد و ما به شبکه ای از نورون ها نیاز داریم. این شبکه از نورون هارا شبکه ی عصبی می نامیم.
![شمای یک شبکه عصبی](http://neuralnetworksanddeeplearning.com/images/tikz11.png)
همانطور که می بینید یک شبکه ی عصبی به چند لایه مختلف تقسیم می شود که هر لایه تنها از لایه قبل ورودی می گیرد و به لایه بعد خروجی می دهد. لایه ابتدایی که ورودی ها به آن داده می شود لایه ورودی ، لایه های میانی را لایه پنهان و لایه ای که خروجی از آن گرفته می شود را لایه خروجی می نامیم. اثبات شده است که اگر تعداد لایه های پنهان به سه عدد برسد هرتابعی که ورودی را به خروجی بنگارد را می توان با شبکه عصبی ساخت.
هر نورون در شبکه عصبی در واقع یک تابع احتمالاتی است که برای هرکدام از ورودی هایش وزنی در نظر می گیرد و پس از محاسبه نتیجه نهایی (مجموع هر ورودی ضرب در وزن آن ورودی) آن را به لایه بعد منتقل می کند. در واقع در فرایند یادگیری یک شبکه عصبی(دادن ورودی و خروجی های از پیش تعیین شده) وزن بهینه برای ورودی های هر نورون تعیین می شود تا نزدیک ترین جواب به جواب اصلی را خروجی بدهد و در صورت دادن داده جدید به عنوان ورودی بتواند خروجی را پیش بینی کند.
چن [4] با روشی که در بخش مقدمه توضیح داده شد، از یادگیری عمیق برای پیدا کردن کلمات در گفتار استفاده کرده است. بدین صورت که ابتدا یک مرحله استخراج ویژگی داریم که سیگنال صوت رو به بخش های چند میلی ثانیه ای تقسیم می کنیم . پس از این مرحله از شبکه عصبی عمیق استفاده شده است تا رابطه ی بین frame های ورودی و متن خروجی پیدا شود. همینطور از یک مرحله posterior handling برای شفاف سازی در شبکه عصبی (از بین بردن نویز ها) استفاده شده است. 
![استفاده از شبکه عصبی عمیق برای شناسایی کلمات در گفتار](https://image.ibb.co/mdGFw6/neu11.png)
در بخش ارزیابی مشاهده می شود که استفاده از یادگیری عمیق برای جستجوی کلمات کلیدی در گفتار نسبت به مدل مخفی مارکوف بهبود بسیار زیادی ایجاد میکند.

# مراجع

[1] : Anusuya, M. A., and Shriniwas K. Katti. "Speech recognition by machine, a review." arXiv preprint arXiv:1001.2267 (2010
[2] : Jay G.Wilpon."Automatic recognition of keywords in unconstrained speech using hidden markov models" IEEE TRANSACTIONS ON ACOUSTICS. SPF.kCH. AND SIGNAL PROCESSING. VOL. 3X. NO. I I . NOVEMBER 1990." 
[3] : H.Sakoe and S.Chiba. " Dynamic programming algorithm optimization for spoken word recognition". IEEE transactions on acoustics, speech, and signal processing, vol. assp-26, no. 1, february 1978
[4]: Guoguo Chen."Small-Footprint keyword spotting using deep neural networks"



# پیوندهای مفید
+ [کتابخانه پردازش گفتار](http://kaldi.sourceforge.net/)
 : https://medium.com/@ageitgey/machine-learning-is-fun-part-6-how-to-do-speech-recognition-with-deep-learning-28293c162f7a
 : https://www.theguardian.com/technology/2015/feb/20/mobile-phones-hacked-can-nsa-gchq-listen-to-our-phone-calls
https://en.wikipedia.org/wiki/Hidden_Markov_model
https://en.wikipedia.org/wiki/Dynamic_time_warping
https://www.udacity.com/course/probabalistic-models--cx27