یادگیری عمیق

تغییرات پروژه از تاریخ 1394/01/29 تا تاریخ 1394/02/27
‍‍‍‍‍‍‍``` عنوان این مقاله 'یادگیری عمیق' می باشد که از نظر نگارنده عنوان مناسبی و مرتبطی با مطالب درون این گزارش نمی باشد . در سالیان اخیر توجه زیادی به روش های یادگیری عمیق شده است و موضوعات و مطالب زیادی در این زمینه وجود که قابل پوشش دادن تحت یک عنوان کلی و در قالب این گزارش نمی باشد. در این گزارش قصد دارم به مسئله ی تحلیل لحن نظرات بپردازم و  ضمن بررسی روش های موجود برای حل این مسئله به رویکرد های نوین آن با استفاده از روش های یادگیری عمیق نیز خواهیم پرداخت. ```

##خلاصه
یادگیری عمیق شاخه ای  از  بحث یادگیری ماشینی  و مجموعه ای از الگوریتم هایی است که تلاش می کنند مفاهیم انتزاعی سطح بالا را با استفاده یادگیری  در سطوح  و لایه های مختلف  مدل کنند . یادگیری عمیق در واقع نگرشی جدید به ایده ی شبکه های عصبی می باشد که سالیان زیادی است وجود داشته و هر چند سال یکبار در قالبی جدید خود را نشان می دهد. در این مقاله میخواهیم از یادگیری عمیق در زمینه ی تحلیل زبان های طبیعی استفاده کنیم . به طور مشخص  به  تحلیل لحن نظرات خواهیم پرداخت  و برای اینکار مدل بازگشتی عمقی برای تحلیل زبان طبیعی را معرفی خواهیم کرد .

----------

## ۱. مقدمه

### ۱.۱ یادگیری عمیق
یادگیری عمیق[^Deep Learning] شاخه ای  از  بحث یادگیری ماشینی[^Machine Learning]  و مجموعه ای از الگوریتم هایی است که تلاش می کنند مفاهیم انتزاعی سطح بالا را با استفاده یادگیری  در سطوح  و لایه های مختلف  مدل کنند . یادگیری عمیق در واقع نگرشی جدید به ایده ی شبکه های عصبی[^ Artificial Nueral Network ] می باشد که سالیان زیادی است وجود داشته و هر چند سال یکبار در قالبی جدید خود را نشان می دهد. دو مزیت این شیوه ی یادگیری را می بینید

+ بازنمود های یادگیری : نیاز اصلی هر الگوریتم یادگیری ویژگی هایی[^Feature] است که از ورودی ها استخراج می شود . ممکن است این ویژگی ها از پیش به صورت دستی تهیه  شده و به الگوریتم داده شود که این روش در الگوریتم های با ناظر[^Supervised Learning] به کار می رود . در مقابل روش های بدون نظارت [^Unsupervised Learning] خواهد بود که خود اقدام به استخراج ویژگی ها  از ورودی خواهد نمود. استخراج دستی ویژگی ها علاوه بر اینکه زمانبر است معمولا هم ناقص و در عین حال بیش از حد نیازِ ذکر شده می باشد. یادگیری عمقی برای ما یک راه استخراج خودکار ویژگی ها پدید می آورد.
+ یادگیری چند لایه ی بازنمود ها :‌ یادگیری عمقی برای ما این امکان را به وجود می آورد که بتوانیم که مفاهیم با سطح انتزاع بالا را با استفاده از یادگیری چند لایه از پایین به بالا بسازیم به تصویر زیر توجه کنید.این تصویر لایه لایه بودن مراحل یادگیری را در بازشناسی چهره ی انسان  به خوبی نمایش میدهد
![یادگیری لایه لایه ](http://8pic.ir/images/mi6czuxr81hc5hbxqs76.png)
 در پاسخ به این سوال که چرا اکنون دوباره به این ایده برگشته ایم و علت رستاخیر مجدد یادگیری عمقی میتوان دلایل متعددی ذکر کرد از جمله همان دلیل به وجود آمدن روش های استخراج خودکار که  از جمله  ی آن ها میتوان RBMs[^RBM] , autoencoder , ... نام برد و همچنین درک بهتر از روش های منظم کردن مدل ها .
تعاریف مختلفی برای یادگیری عمیق وجود دارد که همه ی آن ها در یک نکته مشترک هستند.ابتدا به معرفی **سلول عصبی مصنوعی**[^Neuron] و **شبکه های نورونی** خواهیم پرداخت و سپس یادگیری عمیق را معرفی خواهیم کرد.
 + سلول عصبی  مصنوعی : 
 توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد.
 
![تصویر ۱ - مدل تک نورون عصبی مصنوعی](http://8pic.ir/images/831xu97r5i6lmlz2p7ih.png)
در تصویر ۱ مدل یک نورون عصبی مصنوعی را مشاهده می کنید که از بخش های ورودی ، تابع فعال ساز و خروجی تشکیل شده است. خروجی تابع فعال ساز از رابطه ی زیر بدست می آید.
$$ a = f ( w^T + b ) $$
$$   f(x) = sigmoid(x) =  \frac {1-  \mathrm{e}^{-۲x} }{1+ \mathrm{e}^{-۲x}}  $$
تابع sigmoid هر عدد طبیعی را به بازه ی [۱و۰] نگاشت خواهد کرد لذا تابع  فعال سازی می تواند به عنوان احتمال برای آن واحد عصبی در نظر گرفته شود.
![f(x) = tanh(x)](http://8pic.ir/images/7wtcecn1lt5gogyzk6wm.png)
- شبکه های عصبی:
![شبکه ی عصبی- تصویر۲](http://8pic.ir/images/lvuw0byt8755p0u7d3qf.png) 
  با کنار هم قرار گرفتن این نورون های واحد چه در جهت عمودی ( کنار هم ) و چه در جهت افقی (روی هم) شکل خواهند گرفت و در نهایت با یک لایه ی خروجی پایان خواهند یافت .
   برای مثال در واحد های چند گانه عمودی اینطور خواهد بود که هر واحد مقدار a  خود را با ضرب داخلی پارامتر w در x و در نهایت جمع با مقدار بایاس b  بدست می آورد . پس برای m  نورون عصبی که مشابه تصویر-۲ قرار گرفته اند با استفاده از نوشتار ماتریسی خواهیم داشت :
![تعریف ماتریسی برای شبکه ای از m نورون ](http://8pic.ir/images/kcpmisjqca028t31z71q.png)
حال در صورت لزوم میتوان لایه ای دیگری از شبکه های افقی در مقابل این لایه اضافه کنیم و یا مستقیما خروجی را محاسبه نماییم.


### ۱.۳ پردازش زبان طبیعی 
 با گسترش  روز افزون متونی که توسط بشر روی بستر اینترنت منتشر می شود امروز بیش از پیش نیاز به روش های تحلیل و استخراج دانش و اطلاعات مفید احساس می شود. اکنون روش های بسیاری برای تحلیل زبان های طبیعی وجود دارد و پیشرفت های بسیاری در  زمینه ی حل مسائل آن به وجود آمده است .
 از جمله ی  این مسائل می توان به موضوع تحلیل لحن نظرات[^Semantic Analysis] اشاره کرد. شناسایی لحن که به آن نظرکاوی[^Opinion Mining] هم گفته می شود روشی است که در آن نظر، لحن، برآورد، گرایش و احساس مردم نسبت به موجودیت هایی مثل: محصولات ، خدمات، وقایع مورد مطالعه قرار می گیرد.
 **کاربردهای شناسایی لحن نظرات:**نظرات به دلیل تاثیر کلیدی که بر روی رفتار انسان می گذارد محور اصلی بیشتر فعالیت های بشر می باشد. هنگامی که ما میخواهیم یک تصمیمی بگیریم نیاز داریم که نظرهای دیگران را هم بدانیم. در دنیای واقعی شرکت ها و سازمان ها همواره به دنبال این هستند که نظرات مردم یا مشتریان را درباره ی محصولات و یا خدمات خود بدانند. مشتریان هم به دنبال این هستند که قبل از خرید یک محصول نظرات کاربرانی که قبلا از آن محصول استفاده کرده اند را بدانند و بر اساس آن اقدام به خرید یا عدم خرید آن محصول کنند. بدست آوردن نظرات مردم و مشتریان خود یک تجارت عظیم برای بازاریابی، روابط اجتماعی و حتی رقابت های انتخاباتی می باشد. در گذشته این اطلاعات از طریق برگه های نظرسنجی و یا آزمایش بر روی یک گروه خاص بدست می آمد ولی امروزه با گسترش روزافزون رسانه های اجتماعی (مثل بلاگ ها،توییتر و فیسبوک) افراد و سازمان ها از محتوای این رسانه ها برای تصمیم گیری استفاده می کنند و افراد دیگر لازم نیست که به نظر دوستان و آشنایان درباره یک محصول اکتفا کنند زیرا نظر و بحث های فراوانی درباره ی آن محصول در محیط وب وجود دارد. البته به خاطر فراوانی و تنوع سایت ها پیدا کردن و پایش سایت های مفید و چکیده گرفتن از اطلاعات موجود در آنها هنوز کاری دشوار و پیچیده می باشد، زیرا هر سایت به طور معمول دارای حجم زیادی از نظرات می باشد که برای انسان عادی استخراج و خلاصه سازی نظرات موجود سخت می باشد. در اینجاست که نیاز به یک سیستم شناسایی لحن نظرات احساس می شود. در سال های اخیر سیستم های تشخیص لحن نظرات در تقریبا تمام محدوده های ممکن از پیش بینی فروش محصولات و خدمات مشتریان گرفته تا پیش بینی وقایع اجتماعی و نتیجه انتخابات سیاسی پخش شده اند [8]
 
### ۲.۱  مدل های پردازش زبان 
 یکی از اصلی ترین اهداف پردازش زبان های طبیعی  تحقق و توسعه یک مدل ارائه جامع و سراسری برای حل تمامی مسائل در این زمینه میباشد  که این موضوع خود با مشکلات اساسی روبرو می باشد . می توان از  ساده سازی مفروضات زبانی نام برد . در روش های کنونی ابتدا الگوریتم های یادگیری توسعه داده می شوند و سپس اطلاعات و ویژگی ها  با فرمت خاص متناسب با الگوریتم به آن خورانده می شوند. به عنوان مثال یکی از گام های اولیه در زمینه ی رده بندی متون این است که ترتیب لغات و ساختار گرامری در جملات حذف شده و عبارت به صورت یک لیست بدون ترتیب از لغات در می آید[^bags of words] و اکنون به روش های تحلیل آماری نظیر شمارش تعداد تکرار در جمله و .. پرداخته می شود.به این دو جمله دقت کنید :
>   این مقاله ی او  موضوع عجیب و جالبی دارد ، برخلاف سایر  مقالاتش.
>   سایر مقالاتش موضوع عجیب و جالبی دارند ، برخلاف این مقاله ی او.
     
  توجه کنید که مفهوم منتقل شده  در این جملات کاملا متفاوت می باشد حال آنکه کلمات استفاده شده دقیقا یکسان می باشند . بدیهی است که در صورت استفاده از این مدل ها با مشکلات جدی در زمینه ی استنتاج و دریافت مفهوم جملات مواجه خواهیم بود.
  



##کارهای مرتبط
در این بخش های  حوزه ها و کارهای مرتبط   را بررسی خواهیم کرد .

###حوزه تحلیل لحن نظرات : 
بیشتر کار های انجام شده در این ضمینه مبتنی بر روش های مدل کردن [‌Bags of Words^] می باشد . از جمله آن ها [7] می باشد . همچنین در مقاله [8] به تحلیل  نظرات مردم در مورد کیفیت غذا و جَو و ... با در نظر گرفتن جنبه های مختلف رستوران ها بررسی شده است .کار های زیادی هم در حوزه ی کاوش احساسات با روش تغییر قطب ها در ساختار ترکیبی انجام شده است. [9][10]
###حوزه یادگیری عمیق : 

ایده های ترکیبی زیادی مربوط به شبکه های عصبی در [11][12] انجام شده است . اولین مدل بازگشتی خودکار-مستقل حافظه در [13] . همچنین ارتقای RBMs به عنوان یک لایه ی ویژه برای تشخیص صدا [14] از جمله مقاله های کلیدی در این زمینه می باشد.



----------
##آزمایشها
----------
##مراجع
### ۱.۱ پردازش زبان طبیعی 
 با گسترش  روز افزون متونی که توسط بشر روی بستر اینترنت منتشر می شود امروز بیش از پیش نیاز به روش های تحلیل و استخراج دانش و اطلاعات مفید احساس می شود و تقریبا تمامی شرکت ها و کمپانی ها روی به استفاده از روش های تحلیل زبانی خودکار آورده اند به همین دلیل اکنون روش های بسیاری برای تحلیل زبان های طبیعی وجود دارد و پیشرفت های بسیاری در  زمینه ی حل مسائل آن به وجود آمده است .  از جمله ی  این مسائل می توان به موضوع تحلیل لحن نظرات[^Sentiment Analysis] اشاره کرد. شناسایی لحن که به آن نظرکاوی[^Opinion Mining] هم گفته می شود روشی است که در آن نظر، لحن، برآورد، گرایش و احساس گروهی از  مردم نسبت به ویژگی های مختلف موجودیت هایی مثل: محصولات ، خدمات، وقایع مورد مطالعه قرار می گیرد.موضوع تحلیل نظرات سابقه ای طولانی دارد اما سبک مورد نظر ما به عبارتی تحلیل سریع و دقیق ماشینی نظرات  از حوالی سال  ۱۹۸۰ و  سپس۲۰۰۶ شدت گرفت که همزمان با معرفی تکنیک های یادگیری ماشینی و گسترش انفجار گونه ی تولید محتوا در شبکه های اجتماعی می باشد. به عبارتی دلیل حرکت به سوی  ماشینی شدن این تحلیل نیز همین افزایش بیش از اندازه ی محتوای دیجیتالی است که نیاز به بررسی دقیق دارد.

**کاربردهای شناسایی لحن نظرات:**نظرات دیگران تاثیر بسیاری در تصمیمات هر فرد دارد .بدیهی است خدمات و محصولاتی که شرکت ها و سازمان ها ارائه می دهند وابسته ای دوچندان به  نظرات کاربران و استفاده کنندگان از محصولات آن ها دارد و‌آینده هر محصول کاملا تحت سلطه ی فیدبک و مجموعه ای نظراتی است که از گروه کاربران به سازنده و ارائه دهنده ی خدمت بر میگردد . لذا شرکت ها و سازمان  در دنیای واقعی همواره به دنبال این هستند که نظرات مردم یا مشتریان را درباره ی محصولات و یا خدمات خود بدانند. مشتریان هم به دنبال این هستند که قبل از خرید یک محصول نظرات کاربرانی که قبلا از آن محصول استفاده کرده اند را بدانند و بر اساس آن اقدام به خرید یا عدم خرید آن محصول کنند. بدست آوردن نظرات مردم و مشتریان خود یک تجارت عظیم برای بازاریابی، روابط اجتماعی و حتی رقابت های انتخاباتی می باشد. در گذشته این اطلاعات از طریق برگه های نظرسنجی و یا آزمایش بر روی یک گروه خاص بدست می آمد ولی امروزه با گسترش روزافزون رسانه های اجتماعی (مثل بلاگ ها،توییتر و فیسبوک) افراد و سازمان ها از محتوای این رسانه ها برای تصمیم گیری استفاده می کنند و افراد دیگر لازم نیست که به نظر دوستان و آشنایان درباره یک محصول اکتفا کنند زیرا نظر و بحث های فراوانی درباره ی آن محصول در محیط وب وجود دارد. البته به خاطر فراوانی و تنوع سایت ها پیدا کردن و پایش سایت های مفید و چکیده گرفتن از اطلاعات موجود در آنها هنوز کاری دشوار و پیچیده می باشد که ما وارد این قسمت نخواهیم شد . هر سایت به طور معمول دارای حجم زیادی از نظرات می باشد که برای انسان عادی استخراج و خلاصه سازی نظرات موجود سخت می باشد و این خود مقوله ای جداست که نیاز به بحث و بررسی بیشتر دارد. در اینجاست که نیاز به یک سیستم شناسایی لحن نظرات احساس می شود. در سال های اخیر سیستم های تشخیص لحن نظرات در تقریبا تمام محدوده های ممکن از پیش بینی فروش محصولات و خدمات مشتریان[^VOC] گرفته تا پیش بینی وقایع اجتماعی و نتیجه انتخابات سیاسی پخش شده اند [8]

### ۱.۲ شبکه های عصبی
تعاریف مختلفی برای یادگیری عمیق وجود دارد که همه ی آن ها در یک نکته مشترک هستند.ابتدا به معرفی **نورون ها**[^Neuron] و **شبکه های عصبی** میپردازیم و سپس یادگیری عمیق را معرفی خواهیم کرد.

- **سلول عصبی  مصنوعی** :   توافق دقیقی بر تعریف شبکه عصبی در میان محققان وجود ندارد؛ اما اغلب آنها موافقند که شبکه عصبی شامل شبکه‎ای از عناصر پردازش ساده (نورونها) است، که می‌تواند رفتار پیچیده کلی تعیین شده‎ای از ارتباط بین عناصر پردازش و پارامترهای عنصر را نمایش دهد.   ![تصویر ۱ - مدل تک نورون عصبی مصنوعی](http://8pic.ir/images/831xu97r5i6lmlz2p7ih.png) در تصویر ۱ مدل یک نورون عصبی مصنوعی را مشاهده می کنید که از بخش های ورودی ، تابع فعال ساز و خروجی تشکیل شده است. خروجی تابع فعال ساز یک شب از رابطه ی زیر بدست می آید. $$ a = f ( w*x + b ) $$
- **شبکه های عصبی:**
 ![شبکه ی عصبی- تصویر۲](http://8pic.ir/images/lvuw0byt8755p0u7d3qf.png) [تصویر-۲]
تا اینجا با یک نورون عصبی آشنا شدیم و اینکه چگونه به ورودی ها حساسیت نشان میدهد و خروجی خود یا تابع فعال سازی را ایجاد میکند. حال تصور کنید مجموعه ای از این نورون ها در کنار هم قرار بگیرند و یک شبکه را تشکیل بدهند.  ساختاری مشابه با تصویر-۲ را در نظر بگیرید  یک لایه ی ورودی ، یک یا چندین لایه ی مخفی داخلی و یک لایه خروجی .  با کنار هم قرار گرفتن این نورون های واحد چه در جهت عمودی (کنار هم) و چه در جهت افقی (روی هم) شکل خواهند گرفت و در نهایت با یک لایه ی خروجی پایان خواهند یافت .
لایه ی اول ورودی های شبکه را فراهم میکند و آن را به لایه های مخفی داخلی می دهد . لایه ی بعدی  بسته به نوع اتصال لایه  قبلی به آن و وزن های هر اتصال خروجی خود رو محاسبه میکند و به لایه ی بعدی خود می دهد و در نهایت لایه خروجی وظیفه دارد با توجه به ورودی های خود خروجی را در مقیاس مورد نظر تولید نماید.یک نوع متداول از لایه های خروجی با استفاده از تابع SIGMOID  و SOFTMAX ساخته می شود.
 $$   f(x) = sigmoid(x) =  \frac {1-  \mathrm{e}^{-۲x} }{1+ \mathrm{e}^{-۲x}}  $$ تابع sigmoid هر عدد طبیعی را به بازه ی [۱و۰] نگاشت خواهد کرد لذا تابع  فعال سازی می تواند به عنوان احتمال برای آن واحد عصبی در نظر گرفته شود.
    پس برای m  نورون عصبی که مشابه تصویر-۲ قرار گرفته اند با استفاده از نوشتار ماتریسی خواهیم داشت :
 ![تعریف ماتریسی برای شبکه ای از m نورون ](http://8pic.ir/images/kcpmisjqca028t31z71q.png)
  حال در صورت لزوم میتوان لایه ای دیگری از شبکه های افقی در مقابل این لایه اضافه کنیم و یا مستقیما خروجی را محاسبه نماییم. توجه نمایید که این  تنها یکی از حالت های ساخت یک شبکه عصبی بود و انواع مختلف دیگری موجود دارد که کاربردهای دیگری دارند ، مزایا و معایب گوناگونی دارند و هریک در کاربرد خاصی بهتر جواب می دهند . در تصویر-۲ این شبکه از نوع  FeedFoward می باشد به عبارتی جهت جریان اطلاعات از ورودی به خروجی و همواره در یک جهت است . ورودی های هر طبقه از طبقه ما قبل می آید و هر نورون در لایه های مخفی  به ورودی های طبقه قبلی واکنش نشان میدهد .نوع دیگری از شبکه های عصبی وجود دارد که RNN[^RNN] نامیده می شود. در این نوع شبکه هر لایه ی مخفی ممکن است با خروجی خود نیز در ارتباط باشد و نسبت به خروجی خود نیز واکنش نشان بدهد . برای اطلاعات بیشتر به [17] مراجعه بفرمایید
 
 **مزایا و معایب  :‌**   ایده شبکه های عصبی از بیش از ۶۰ سال است که مطرح شده است. ثابت می شود با کمک شبکه های عصبی هر تابعی قابل محاسبه می باشد و استفاده خاص آن بیشتر برای مواردی است که تقریب های خطی به کار نمی آیند و  در این حالت ها میتوان با ساختن یک تابع  غیر خطی  خروجی های قابل قبولی را تولید کرد .این ویژگی باعث می شود برای حل کردن مسائل در زندگی واقعی مناسب باشند و در این زمینه ها کاربرد داشته باشند. این شبکه ها میتوانند با روش های با ناظر[^Supervised Learning]   و بدون نظارت [^Unsupervised Learning]   و تقویتی [^Reinforcement Learning] یادگیری شوند و روش های گوناگونی نیز برای اموزش دادن این شبکه ها وجود دارد[17]. 

واقعیت این است که استفاده از این شبکه ها جز در موارد خاص بسیار هزینه بر و مشکل است . دلایل آن را میتوان   در موارد مختلفی جست و جو کرد.  از مشکلات آموزش دادن و مشکل کمبود منابع سخت افرازی میتوان نام برد که بعضا حتی با پیشرفت های کنونی بشر در زمینه ی سخت افزار هنوز هم  برای تامین منابع برای مواردی روی یک ماشین مشکل وجود دارد و باید از روش های پردازش توزیعی به عنوان راه حل استفاده کرد.
 
### ۱.۳ یادگیری عمیق
یادگیری عمیق[^Deep Learning] شاخه ای  از  بحث یادگیری ماشینی  و مجموعه ای از الگوریتم هایی است که تلاش می کنند مفاهیم انتزاعی سطح بالا را با استفاده یادگیری  در سطوح  و لایه های مختلف  مدل کنند . یادگیری عمیق در واقع نگرشی جدید به ایده ی شبکه های عصبی[^ Artificial Nueral Network ] می باشد که سالیان زیادی است وجود داشته و هر چند سال یکبار در قالبی جدید خود را نشان می دهد. دو مزیت این شیوه ی یادگیری را می بینید

+ بازنمود های یادگیری : نیاز اصلی هر الگوریتم یادگیری ویژگی هایی[^Feature] است که از ورودی ها استخراج می شود . ممکن است این ویژگی ها از پیش به صورت دستی تهیه  شده و به الگوریتم داده شود که این روش در الگوریتم های با ناظر  به کار می رود . در مقابل روش های بدون نظارت  خواهد بود که خود اقدام به استخراج ویژگی ها  از ورودی خواهد نمود. استخراج دستی ویژگی ها علاوه بر اینکه زمانبر است معمولا هم ناقص و در عین حال بیش از حد نیازِ ذکر شده می باشد. یادگیری عمقی برای ما یک راه استخراج خودکار ویژگی ها پدید می آورد.
+ یادگیری چند لایه ی بازنمود ها :‌ یادگیری عمقی برای ما این امکان را به وجود می آورد که بتوانیم که مفاهیم با سطح انتزاع بالا را با استفاده از یادگیری چند لایه از پایین به بالا بسازیم به تصویر زیر توجه کنید.این تصویر لایه لایه بودن مراحل یادگیری را در بازشناسی چهره ی انسان  به خوبی نمایش میدهد
![یادگیری لایه لایه ](http://8pic.ir/images/mi6czuxr81hc5hbxqs76.png)
 در پاسخ به این سوال که چرا اکنون دوباره به این ایده برگشته ایم و علت رستاخیر مجدد یادگیری عمقی میتوان دلایل متعددی ذکر کرد از جمله همان دلیل به وجود آمدن روش های استخراج خودکار که  از جمله  ی آن ها میتوان RBMs[^RBM] , autoencoder , ... نام برد و همچنین درک بهتر از روش های منظم کردن مدل ها . منبع [13] بود که با نتایج خیره کننده ی خود دوباره  توجه ها را به شبکه های عصبی و یادگیری عمیق بازگرداند.
 
### ۱.۴ مدل های پردازش زبان  

 یکی از اصلی ترین اهداف پردازش زبان های طبیعی  تحقق و توسعه یک مدل ارائه جامع و سراسری برای حل تمامی مسائل در این زمینه میباشد  که این موضوع خود با مشکلات اساسی روبرو می باشد . می توان از  ساده سازی مفروضات زبانی نام برد . در روش های کنونی ابتدا الگوریتم های یادگیری توسعه داده می شوند و سپس اطلاعات و ویژگی ها  با فرمت خاص متناسب با الگوریتم به آن خورانده می شوند. به عنوان مثال یکی از گام های اولیه در زمینه ی رده بندی متون این است که ترتیب لغات و ساختار گرامری در جملات حذف شده و عبارت به صورت یک لیست بدون ترتیب از لغات در می آید[^bags of words] و اکنون به روش های تحلیل آماری نظیر شمارش تعداد تکرار در جمله و .. پرداخته می شود.به این دو جمله دقت کنید :
  >   این مقاله ی او  موضوع عجیب و جالبی دارد ، برخلاف سایر  مقالاتش.
   >   سایر مقالاتش موضوع عجیب و جالبی دارند ، برخلاف این مقاله ی او.
   
 توجه کنید که مفهوم منتقل شده  در این جملات کاملا متفاوت می باشد حال آنکه کلمات استفاده شده دقیقا یکسان می باشند . بدیهی است که در صورت استفاده از این مدل ها با مشکلات جدی در زمینه ی استنتاج و دریافت مفهوم جملات مواجه خواهیم بود. در قالب روش ها به طور مثال اقدام به  حذف لغات ایست [^stop words] میکنیم که این خود برای مسئله ی تحلیل لحن نظرات ممکن است مشکلات جدی ایجاد کند . تصور کنید "!!!" از انتهای جمله حذف شود در حالی که ممکن است بیشتر مفهوم تمسخر ، تعجب و به طور کلی احساس و مفهوم منتقل شده تنها روی همین علامت متمرکز باشد! 

## ۲.روش های حل و کار های مرتبط
### روش های حل 
![روش های حل](https://boute.s3.amazonaws.com/143-sl.jpg)
روش های حل را به طور کلی میتوان در دسته بندی بالا جا داد . به طور کلی به روش های مبتنی بر NLP  نخواهیم پرداخت و به جای آن مطابق با روش های مبتنی بر یادگیری ماشینی پیش خواهیم رفت و در این مسیر هر دو روش یادگیری با ناظر و بدون ناظر را پوشش خواهیم داد.

### کار های مرتبط
### حوزه تحلیل لحن نظرات :
  بیشتر کار های انجام شده در این ضمینه مبتنی بر روش های مدل کردن [‌Bags of Words^] می باشد . از جمله آن ها [7] می باشد . همچنین در مقاله [8] به تحلیل  نظرات مردم در مورد کیفیت غذا و جَو و ... با در نظر گرفتن جنبه های مختلف رستوران ها بررسی شده است .کار های زیادی هم در حوزه ی کاوش احساسات با روش تغییر قطب ها در ساختار ترکیبی انجام شده است. [9][10]

### حوزه یادگیری عمیق :
   ایده های ترکیبی زیادی مربوط به شبکه های عصبی در [11][12] انجام شده است . اولین مدل بازگشتی خودکار-مستقل حافظه در [13] . همچنین ارتقای RBMs به عنوان یک لایه ی ویژه برای تشخیص صدا [14] از جمله مقاله های کلیدی در این زمینه می باشد.

----------
## ۳. آزمایشها

### ۳.۱
پیش از هر چیز لازم به ذکر است در پیاده سازی ها از دیتاست یکی از رقابت های وب سایت Kaggle[^kaggle] استفاده خواهیم کرد که مربوط به نظرات جمع اوری شده از  مردم در مورد عوامل مختلف فیلم ها و سریال ها در وب سایت IMDB  می باشد.
آزمایش را در دو مرحله انجام خواهیم داد . در مرحله ی اول از مدل Bags of Words استفاده میکنیم که  پیشتر با آن آشنا شدیم . ۲۵۰۰۰ نمونه ی لیبل خورده را   با استفاده از این روش یادگیری با ناظر مدل کرده و آن را  به یک دسته بند [^random forest]Random Forest میدهیم.  ابتدا اطلاعات را پاک سازی میکنیم . اطلاعاتی که از وب سایت ها جمع اوری می شوند اصطلاحا کثیف هستند و نیاز دارند کاراکتر های زاید از میانه ی آن ها حذف شود. سپس با استفاده از لایبرری scikit-learn  اقدام به ساختن BOW می کنیم و در نهایت با استفاده از اطلاعات بدست آمده دسته بند را آموزش می دهیم . این دسته بند در واقع مجموعه ای از الگوریتم هایی است که یک درخت تصمیم [^desicion tree] میسازند و  در نهایت با استفاده از این دسته بند برای ۲۵۰۰۰ داده ی لیبل نخورده دیگر پیش بینی خواهیم کرد.

| 4000  | 2000   | 500   | features|
|:-------|: ------ |: ----- |: ----    |
|  83.7 | 83.5   | 81.1  |   rate  |

### ۳.۲
در ازمایش دوم از یک روش الهام گرفته از یادگیری عمیق به نام [^word2vec]Word2Vec استفاده خواهیم کرد.این لایبرری که توسط شرکت گوگل منتشر شده است در واقع دقیقا یک الگوریتم یادگیری عمیق نمی باشد و مجموعه از الگوریتم هاست که با استفاده از یادگیری بدون ناظر میتوان مدل مربوطه را آموزش داد. این مجموعه در واقع رابطه ی بین کلمات را پیدا میکند و خروجی آن مجموعه ای از بردارهاست است به طول لغات منحصر به فرد موجود در تمامی نمونه ها . طول هر بردار نیز به اندازه  ی حداکثر  بعد  و ویژگی هایی است که برای الگوریتم پیش از آموزش مشخص می کنیم که در نهایت برای هر کلمه ی این مدل  با استفاده از رابطه ی کلمه با دیگر کلمات مقدار دهی می شود.در پایان دوباره با استفاده از دسته بند Random Forest اقدام به پیشبینی برای ۲۵۰۰۰ نمونه  ی تست میکنیم.
از ویژگی های الگوریتم ها و روش هایی که از یادگیری عمیق و شبکه های عصبی استفاده میکنند این است که زمان زیادی طول می کشند  و حافظه ی بسیار زیادی را نیاز دارند اما مجموعه ی  word2vec  از زبان C به python پورت شده است از نظر زمان و حافظه نسبتا کارآمد است و در زمان معقول محسبات انجام می پذیرد.
این آزمایش را فقط برای یک بار تکرار کردم و از ۵۰۰۰۰ نمونه لیبل نخورده استفاده کردم . نرخ ۷۵ درصد برای موفقیت بدست آمد.نسبت به روش قبلی مقدار خطا بیشتر شده است با این حال برای یک روش بدون ناظر هنوز نرخ خطا قابل قبول بنظر می رسد . دلیل این امر را میتوان در کم بودن تعداد نمونه ها و پارامتر های زیادی که در این زمینه دخیل هستند جست و جو کرد. قطعا با بیشتر کردن نمونه ها در مقیاس میلیون میتوان به نتایج بسیار بهتری دست پیدا کرد.لازم به ذکر است
 با این همین دیتاست در حال حاضر بورد عمومی وبسایت  kaggle نرخ های موفقیت بالای ۹۰ درصد را نشان میدهد که رقمی خیره کننده می باشد.

### ۳.۳
مقاله [2],[1]  نیز در این زمینه وجود دارد که در آن روشی کاملا متفاوت با ۲روش قبلی پیش گرفته شده است .در این روش متن داده شده به طور کامل تحلیل شده و نقش هر کلمه در جمله استخراج می شود سپس با توجه به مفهوم کلمه ، جای آن در جمله ، همسایه های آن و ... تاثیر کلمه در لحن جمله بدست میآید . حال کافی است با  استفاده از یک مدل گراف گونه  امتیاز ریشه را حساب کنیم.   در این فاز صرفا توانستم فایل [جاوای](nlp.stanford.edu/sentiment/) نوشته شده برای این قسمت را تست کنم و امکان تغییر آن برایم میسر نشد. در فاز بعدی به بهبود دو روش قبلی و این روش خواهم پرداخت

----------
## ۴. مراجع

Github  : [https://github.com/rAm1n/sentiment-analysis](https://github.com/rAm1n/sentiment-analysis)
**لطفا فقط شاخه ی master  را clone بفرمایید و در صورتی که  نیاز به اطلاعات دیتاست ها و نتایج بود به شاخه ی data  جابه جایی کنید.**
------
[1]. Richard S, Alex P, Jean  : Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank: Stanford University. [click](http://nlp.stanford.edu/~socherr/EMNLP2013_RNTN.pdf)
[2]. Richard Socher : Recursive Deep Learning For Natural Language Processing  : PhD Dissertation  , Department Of Computer Science , Stanford , Aug 2014 [click]( http://nlp.stanford.edu/~socherr/thesis.pdf ) 
[3]. Changliang Li, Bo Xu: Recursive Deep Learning for Sentiment Analysis over Social Data , International Joint Conference  on WI and IAT , 2014
[4]. Peter .D , Patric .P :  From Frequency to Meaning: Vector Space Models of Semantics: Journal of Artificial Intelligence Research , 2010
 [5]. Hidekazu Y : Study on Distributed Representation of Words with Sparse Neural Network Language Model , 3rd International Conference on Advanced Applied Informatics , Osaca , JAPAN , 2014
[6]. Baroni .M, A. Lenci : A general framework for corpus-based semantics:  Computational Linguistics , 2010
[7]. Pang B . Lee L : Opinion Mining and Sentiment Analysis : oundations and Trends in Information Retrieval  , 2008
[8]. Snyder and R. Barzilay:  Multiple aspect rank-ing using the Good Grief algorithm. In HLT-NAACL  , 2007
[9]. olanyi and A. Zaenen. 2006. Contextual valence shifters. In W. Bruce Croft, JamesThe Information Retrieval Series
[10]. Nakagawa, K. Inui, and S. Kurohashi. 2010. Dependency tree-based sentiment classification using CRFs
with hidden variables. In NAACL, HLT.
[11].Bottou. From machine learning to machine reasoning : CoRR ,  2011
[12].E. Hinton : Mapping part-whole hierarchies into connectionist networks. Artificial Intelligence, 1990
[13].ImageNet Classification with Deep Convolutional Neural  Networks [click](http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf)
[14].  L. Deng, and F. Seide. Large vocabulary speech recognition using deep tensor neural networks , In INTERSPEECH , 2010
[15].  Marvin Minsky :  Society Of Mind  , MIT Press 1985
[16]. Semantic-Analysis [click](http://www.boute.ir/iust-pr-93/sentiment-analysis)


[^Semantic Analysis]: [Semantic[17] Neural Networks A Comprehensive Foundation ,  Simon_Haykin  , 2th edition , 1998


[^Sentiment Analysis]: [Sentiment Analysis](http://en.wikipedia.org/wiki/Sentiment_analysis)
[^bags of words]: [Bags Of Word Model ](http://en.wikipedia.org/wiki/Bag-of-words_model)
[^Deep Learning]: [Deep Learning](http://en.wikipedia.org/wiki/Deep_learning)
[^Machine Learning]: [Machine Learning](http://en.wikipedia.org/wiki/Machine_learning)
[^Supervised Learning]: [Supervised Learning](http://en.wikipedia.org/wiki/Supervised_learning)
[^Unsupervised Learning]: [Unsupervised Learning](http://en.wikipedia.org/wiki/Unsupervised_learning)
[^Reinforcement Learning]: [Reinforcement Learning](http://en.wikipedia.org/wiki/Reinforcement_learning)
[^ Artificial Nueral Network ]: [Artificial Neural Network](http://en.wikipedia.org/wiki/Artificial_neural_network)
[^RBM]: [Restricted Boltzmen Machine](http://en.wikipedia.org/wiki/Restricted_Boltzmann_machine)

[^VOC]: [VOC](http://en.wikipedia.org/wiki/Voice_of_the_customer)
[^RNN]: [RNN](http://en.wikipedia.org/wiki/Recurrent_neural_network)
[^stop words]: [Stop Words](http://en.wikipedia.org/wiki/Stop_words)
[^kaggle]: [Kaggle](https://www.kaggle.com/c/word2vec-nlp-tutorial)
[^random forest]: [Random Forest](http://en.wikipedia.org/wiki/Random_forest)
[^desicion tree]: [Decision Tree](http://en.wikipedia.org/wiki/Decision_tree_learning)
[^word2vec]: [Word2Vec](https://code.google.com/p/word2vec/)