``` عنوان این مقاله 'یادگیری عمیق' می باشد که از نظر نگارنده عنوان مناسبی و مرتبطی با مطالب درون این گزارش نمی باشد . در سالیان اخیر توجه زیادی به روش های یادگیری عمیق شده است و موضوعات و مطالب زیادی در این زمینه وجود که قابل پوشش دادن تحت یک عنوان کلی و در قالب این گزارش نمی باشد. در این گزارش قصد دارم به مسئله ی تحلیل لحن نظرات بپردازم و ضمن بررسی روش های موجود برای حل این مسئله به رویکرد های نوین آن با استفاده از روش های یادگیری عمیق نیز خواهیم پرداخت. ```
##خلاصه
یادگیری عمیق شاخه ای از بحث یادگیری ماشینی و مجموعه ای از الگوریتم هایی است که تلاش می کنند مفاهیم انتزاعی سطح بالا را با استفاده یادگیری در سطوح و لایه های مختلف مدل کنند . یادگیری عمیق در واقع نگرشی جدید به ایده ی شبکه های عصبی می باشد که سالیان زیادی است وجود داشته و هر چند سال یکبار در قالبی جدید خود را نشان می دهد. در این مقاله میخواهیم از یادگیری عمیق در زمینه ی تحلیل زبان های طبیعی استفاده کنیم . به طور مشخص به تحلیل لحن نظرات خواهیم پرداخت و برای اینکار مدل بازگشتی عمقی برای تحلیل زبان طبیعی را معرفی خواهیم کرد .
----------
## ۱. مقدمه
### ۱.۱ پردازش زبان طبیعی
با گسترش روز افزون متونی که توسط بشر روی بستر اینترنت منتشر می شود امروز بیش از پیش نیاز به روش های تحلیل و استخراج دانش و اطلاعات مفید احساس می شود و تقریبا تمامی شرکت ها و کمپانی ها روی به استفاده از روش های تحلیل زبانی خودکار آورده اند به همین دلیل اکنون روش های بسیاری برای تحلیل زبان های طبیعی وجود دارد و پیشرفت های بسیاری در زمینه ی حل مسائل آن به وجود آمده است . از جمله ی این مسائل می توان به موضوع تحلیل لحن نظرات[^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 نخواهیم پرداخت و به جای آن مطابق با روش های مبتنی بر یادگیری ماشینی پیش خواهیم رفت و در این مسیر هر دو روش یادگیری با ناظر و بدون ناظر را پوشش خواهیم داد.
### کار های مرتبط
### حوزه تحلیل لحن نظرات :
بیشتر کار های انجام شده در این ضمینه مبتنی بر روش های مدل کردن BOW می باشد . از جمله آن ها [7] می باشد . همچنین در مقاله [8] به تحلیل نظرات مردم در مورد کیفیت غذا و جَو و ... با در نظر گرفتن جنبه های مختلف رستوران ها بررسی شده است .کار های زیادی هم در حوزه ی کاوش احساسات با روش تغییر قطب ها در ساختار ترکیبی انجام شده است. [9][10]
### حوزه یادگیری عمیق :
ایده های ترکیبی زیادی مربوط به شبکه های عصبی در [11][12] انجام شده است . اولین مدل بازگشتی خودکار-مستقل حافظه در [13] . همچنین ارتقای RBMs به عنوان یک لایه ی ویژه برای تشخیص صدا [14] از جمله مقاله های کلیدی در این زمینه می باشد.
منبع [20] در زمینه معرفی یک مدل کارآمد و پیاده سازی برروی RNN بسیار خوب عملکرده است .
----------
## ۳. آزمایشها
###جمع آوری اطلاعات
پیش از هر چیز لازم به ذکر است در پیاده سازی ها از دیتاست یکی از رقابت های وب سایت Kaggle[^kaggle] استفاده خواهیم کرد که مربوط به نظرات جمع اوری شده از مردم در مورد عوامل مختلف فیلم ها و سریال ها در وب سایت IMDB می باشد. این دیتاست وبسایت مرجع خود آماده کرده و وب سایت Kaggle زیر مجموعه ای از آن را برای رقابت قرار داده است.[دانلود](https://www.kaggle.com/c/word2vec-nlp-tutorial/data)
اطلاعاتی که از وب سایت ها جمع اوری می شوند اصطلاحا کثیف هستند و نیاز دارند پاک سازی شوند بنابراین در درجه ی اول باقیمانده های تگ های Html را پاک می کنیم
در ادامه بررسی را در دو مرحله انجام خواهیم داد . در مرحله ی اول از مدل Bags of Words استفاده می کنیم که پیشتر با آن آشنا شدیم و در مرحله ی دوم از مجموعه الگوریتم های word2vec استفاده خواهیم کرد.
### ۳.۱
در آزمایش اول می خواهیم ۲۵۰۰۰ نمونه ی لیبل خورده را با استفاده از این روش یادگیری با ناظر مدل کرده و آن را به یک دسته بند [^random forest]Random Forest بدهیم . به عبارتی با استفاده از لایبرری scikit-learn اقدام به ساختن BOW می کنیم . با استفاده از این BOW تنها با توجه به تعداد تکرار ها بردار ویژگی ها رو تولید می کنیم .طول بردار ویژگی ها برای هر یک از داده ها قابل تعیین است و با ۳ طول متفاوت اقدام به تولید مدل خواهیم کرد و با استفاده از این مدل دسته بند را آموزش می دهیم . روش کار این دسته بند به این صورت است که با تعیین یک زیر مجموعه از دیتاست و انتخاب رندوم از ویژگی ها یک درخت تصمیم [^desicion tree] می سازند . علت انتخاب آن نیز این بوده است که به طرز کاملا کارآمدی روی برخی دیتاست ها اجرا می شود و برای بعضی از دسته دیتا ها جزو دقیق ترین دسته بند ها می باشد. از شرح نحوه ی عملکرد این دسته بند گذر می کنیم و تنها یک پارامتر تعداد درخت ها را برای آن در نظر می گیریم.
در آخر با استفاده از این دسته بند برای ۵۰۰۰ داده ی دیگر پیش بینی خواهیم کرد. در فاز قبلی از ۲۰۰۰۰ داده برای آموزش استفاده کردم و برای ۵۰۰۰ داده تست دقت انجام دادم در این فاز با ۲۴۰۰۰ داده اقدام به آموزش کرده و برای ۱۰۰۰ داده تست کردم و با کاهش عجیب ۱۰ درصدی دقت مواجه شدم. نتیجه ی حاصل اینکه لزوما افزایش نمونه های آموزش منجر به افزایش دقت نمی شود و ممکن از با پدیده over fiting مدل مواجه شویم ؟
| 4000 | 2000 |1000 | 500 | features |
|:-------|: ------|: ------ |: ----- |: ---- |: |
| 73.4 | 71.2 | 71.1 | 70.8 | 50 | tree size |
| 74.3| 72.7 | 73 | 71.9 | 100 | |
### ۳.۲
در ازمایش دوم از یک روش الهام گرفته از یادگیری عمیق به نام [^word2vec]Word2Vec استفاده خواهیم کرد.این لایبرری که توسط شرکت گوگل منتشر شد و در واقع دقیقا یک الگوریتم یادگیری عمیق نمی باشد و مجموعه از الگوریتم هاست که با استفاده از یادگیری بدون ناظر میتوان مدل مربوطه را آموزش داد. این مجموعه در رابطه ی بین کلمات را پیدا می کند و خروجی آن مجموعه ای از بردارهاست است به تعداد لغات منحصر به فرد موجود در تمامی نمونه ها . طول هر بردار نیز به اندازه ی حداکثر بعد و ویژگی هایی است که برای الگوریتم پیش از آموزش مشخص می کنیم .
در [18] نحوه ی ساختن این بردار ها بیان شده است .هدف این است برای یک کلمه اطرافیان آن که به صورت معمول همراه کلمه به کار می روند تشخیص داده شوند Skip-gram در واقع یک نوع عمومی سازی N-gram ها می باشد . اجزای سازنده ی آن که معمولا لغات می باشد نیاز است تا به صورت پشت سر هم باشند حال آنکه ممکنه است گپ هایی وجود داشته باشد که نظر گرفته نشده باشند. حال تصور کنید لغت ورودی مدل W <sub> i</sub> باشد با توجه به هدف تشخیص زمینه برای یک لغت با توجه به اطرافیان W <sub> i+2</sub> W <sub> i-2</sub> W <sub> i-1</sub> , W <sub> i+1</sub> , ... میخواهیم تا احتمال لگاریتمی زیر را بیشینه نماییم . که در آن C سایز پنجره آموزش است (تعداد لغاتی که در عقب و جلوی لغت فعلی قرار دارند با در نظر گرفتن امکان داشتن گپ) بنابراین C بزرگتر به داشتن دقت بیشتر منجر خواهد شد.
![skip gram](https://boute.s3.amazonaws.com/143-formula.jpg)
برای محاسبه ی احتمالات فوق از فرمول زیر استفاده می کنیم
![formula-1](https://boute.s3.amazonaws.com/143-f1.jpg)
از آنجایی که به دست آوردن این مقدار از لحاظ پیچیدگی محاسباتی متناسب با W می باشد و نسبتا زیاد می باشد برای محاسبه کردن آن یک Hierarchical Softmax می سازیم و با توجه به فرمول زیر مقدار احتمال را محاسبه می نماییم. حال پچیدگی محاسباتی به log(w) کاهش پیدا کرد
![formula-2](https://boute.s3.amazonaws.com/143-f2.jpg)
در این فرمول در واقع سعی می کنیم از روی درخت باینری ساخته شده یک مسیر از ریشه به برگ پیدا کند L طول مسر از ریشه و تابع n نیز پدر مربوطه را مشخص می کند.ch نیز یک فرزند دلخواه را مشخص می نماید.
در منبع [18] توضیحات بیشتری در مورد نحوه ی بهبود این محاسبات آورده شده است . به طور خلاصه می توان به Sub sampling لغات غالب اشاره کرد که باعث می شود سرعت در حد خوبی بهبودی یافته و مدل برای لغات غیر تکراری نیز بسیار دقیق تر عمل کند . مورد دیگر نیز Negative sampling می باشد باعث می شود برای لغات تکراری مدل بهبود یابد .
در پایان بعد از ساختن بردار ها دوباره با استفاده از دسته بند Random Forest اقدام به پیشبینی برای ۱۰۰۰ نمونه ی تست می کنیم.از ویژگی های الگوریتم ها و روش هایی که از یادگیری عمیق و شبکه های عصبی استفاده می کنند این است که زمان زیادی طول می کشند و حافظه ی بسیار زیادی را نیاز دارند اما مجموعه ی word2vec از زبان C به python پورت شده است از نظر زمان و حافظه نسبتا کارآمد است و در زمان معقول محسبات انجام می پذیرد. لازم به ذکر است من برای پیاده سازی از لایبرری gensim استفاده کردم که این لایبرری تماما به زبان پایتون نوشته شده است و در حدود 20x کندتر از نسخه ی اصلی که به صورت چند ریسه ای نوشته شده می باشد. می توان در صورت بزرگ بودن مدل و نیاز به بهبود قسمت های گلوگاه را با زبان C بازنویسی کرد.
این آزمایش را چندین بار تکرار کردم و از ۵۰۰۰۰ نمونه لیبل نخورده استفاده کردم و مدل را آموزش دادم . با ۲ پارامتر تعداد Feature ها و min_word_count برای ساخت مدل و پارامتر تعداد درخت ها برای دسته بند نتایج متفاوتی بدست آمد . آزمون بررسی را برای همان ۱۰۰۰ داده لیبل خورده تکرار کردم و نتایج به شرح زیر است.
| 400 | 300 | 200 | Features | |
|:---:|:----:|:----:|:--------:|:--------------:|
| 85 | 85.4 | 83.8 | 40 | Min_Word_Count |
| 84 | 83.6 | 84.9 | 60 | |
Tree Size = 50
| 400 | 300 | 200 | Features | |
|:----:|:----:|:----:|:--------:|:--------------:|
| 84.8 | 84.6 | 84.5 | 40 | Min_Word_Count |
| 85.2 | 85.3 | 85.3 | 60 | |
Tree Size = 100
همان طور که مشاهده می فرمایید با تغییر پارامتر ها ، تغییر محسوسی در خروجی و دقت مشاهده نشد . در کل دقت نسبت به روش قبل بیش از ۱۰ درصد بهبود یافته و قابل قبول می باشد . قطعا با بیشتر کردن نمونه ها در مقیاس میلیون میتوان به نتایج بسیار بهتری دست پیدا کرد.لازم به ذکر است با این همین دیتاست در حال حاضر بورد عمومی وبسایت kaggle نرخ های موفقیت بالای ۹۰ درصد را نشان میدهد که رقمی خیره کننده می باشد.
### ۳.۳
روش ساخت دیگری برای بردار ها وجود دارد[19] که طبق گفته ی نویسندگان نتایج دقیق تری می توان از آن استخراج کرد و سرعت بیشتری از word2vec دارد.
بررسی مقالات و نظرات در اینترنت نشان می داد نتایج عملی و واقعی تفاوت محسوسی را نشان نمی دهد و این دو روش تقریبا دقت مشابه دارند .من فقط یکبار با پارامتر های مشابه این روش را تست کردم و زمان آموزش بسیار طولانی شد . برای ۳۰۰ ویژگی و ۱۰۰ درخت به ۵.۳ درصد دقت کمتری رسیدم.
### ۳.۴
مقاله [2],[1] نیز در این زمینه وجود دارد که در آن روشی کاملا متفاوت با ۲روش قبلی پیش گرفته شده است .در این روش متن داده شده به طور کامل تحلیل شده و نقش هر کلمه در جمله استخراج می شود سپس با توجه به مفهوم کلمه ، جای آن در جمله ، همسایه های آن و ... تاثیر کلمه در لحن جمله بدست میآید . حال کافی است با استفاده از یک مدل گراف گونه امتیاز ریشه را حساب کنیم. صرفا توانستم فایل [جاوای](http://nlp.stanford.edu/sentiment) نوشته شده برای این قسمت را تست کنم و امکان تغییر آن برایم میسر نشد. می توان در آینده روی این مورد بررسی بیشتری انجام داد چرا که آینده ی روش های پردازش زبان طبیعی خواهد بود.
----------
## ۴. مراجع
Github : [https://github.com/rAm1n/sentiment-analysis](https://github.com/rAm1n/sentiment-analysis)
**لطفا فقط شاخه ی master را clone بفرمایید درغیر اینصورت حجم زیادی را باید دریافت کنید . در صورتی که نیاز به اطلاعات دیتاست ها و نتایج بود کل مخرن را کلون و به شاخه ی data جابه جایی کنید.**
------
[1]. R Socher, 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]. M Minsky : Society Of Mind , MIT Press 1985
[16]. Semantic-Analysis [click](http://www.boute.ir/iust-pr-93/sentiment-analysis)
[17]. S. Haykin , Neural Networks A Comprehensive Foundation , 2th edition , 1998
[18]. T Mikolov & colleages , Distributed Representations of Words and Phrases and their Compositionality , NIPS , 2013
[19]. J Pennington & colleages , GloVe: Global Vectors for Word Representation , stanford
[20] . T. Mikolov & colleages , Efficient Estimation of Word Representations in Vector Space , google
[^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)
[^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/)