امروزه برای هر محصول یا موضوع هزاران نظر گذاشته می شود. با بررسی نظرات کاربران میتوان از رضایت یا عدم رضایت افراد از یک موضوع یا محصول یا ... مطلع شد. با توجه به این نکته میتوان به اهمیت تشخیص لحن جملات پی برد. اما از انجایی که همیشه نظرات واضح بیان نشده اند بررسی آن ها اسان نیست. علاوه بر این تعداد نظرات هر موضوع ممکن است بسیار زیاد باشد.
۱. مقدمه
تشخیص لحن جملات به چه معناست؟
تشخیص لحن جملات یا sentiment analysis، فرآیند خودکار درک مطلب در مورد یک موضوع مشخص شده از زبان نوشته شده یا گفتاری است.
در جهانی که ما روزانه 2.5 کیلو بایت داده را تولید می کنیم، تشخیص لحن جملات یک ابزار کلیدی برای فهم این داده ها است. این امر به شرکت ها اجازه می دهد بینش کلی هر فرایندی را به دست آورد. [1]
تشخیص لحن جملات از شاخه های Natural Language Processing (NLP) است. به کمک sentiment analysis میتوان جملات بدون ساختار را به جملات ساختار مند تبدیل کرد. این داده ها می توانند برای شرکت های تجاری، روابط عمومی، بررسی محصول، بازخورد محصول و خدمات مشتری بسیار مفید باشند.
نظر چیست؟
اطلاعات متنی را می توان به طور عمده به دو نوع اصلی تقسیم کرد: حقایق و نظرات. واقعیت ها عبارات عینی در مورد چیزی است (objective expressions). اظهارنظر معمولا عبارات ذهنی است (subjective expressions) که احساسات، ارزیابی ها و احساسات افراد نسبت به یک موضوع را توصیف می کند.
مزیت های تشخیص لحن جملات
مقیاس پذیری:داده های بسیار زیادی برای پردازش دستی وجود دارد. تشخیص لحن جملات اجازه می دهد تا پردازش داده ها در این حجم بالا را به شیوه ای کارآمد و مقرون به صرفه انجام دهد.
انالیز بی درنگ (Real-time analysis):میتوان از تشخیص لحن جملات برای شناسایی اطلاعات بحرانی استفاده کرد. برای مثال برای یک مشتری عصبانی می تواند به شما کمک کند که بلافاصله این نوع موقعیت ها را شناسایی کرده و اقداماتی را انجام دهید.
معیارهای سازگار:انسانها معیارهای واضح را برای ارزیابی احساسات یک متن مشخص نمیکنند. برآورد شده است که افراد مختلف تنها در حدود 60 تا 65 درصد از موارد زمانی که قضاوت احساسات برای یک متن خاص را انجام می دهند، موافقند. شرکت ها می توانند با استفاده از تشخیص لحن جملات معیارهای مشابهی را برای همه داده های خود اعمال کنند. این کار به کاهش اشتباهات و بهبود سازگاری داده ها کمک می کند.
روش های حل مسئله
روش های زیادی برای حل این مسئله وجود دارند.روش Rule based:سیستم های مبتنی بر قانون که تشخیص لحن را بر اساس مجموعه ای از قوانین دستی انجام می دهند.
روش Automatic: سیستم های خودکار که بر تکنیک های یادگیری ماشین تکیه می کنند تا از داده ها یاد بگیرند.
روش Hybrid: ترکیبی از هر دو روش بالاست.
۲. کار های مرتبط
روش Rule based معمولا مجموعه ای از قوانین را در نوع خاصی از زبان اسکریپتی تعریف می کنند که ذهنیت، قطبیت یا موضوع عقاید را شناسایی می کنند. قوانین ممکن است از ورودی های مختلف مانند موارد زیر استفاده کنند:تکنیک های کلاسیک NLP مانند stemming، نشانه گذاری، برچسب زدن و تجزیه گفتار و ...
یک مثال اساسی از پیاده سازی آن به این صورت است:دو لیست از کلمات قطبی را تعریف کنید (مثلا کلمات منفی مانند بد، بدترین، زشت، و غیره و کلمات مثبت مانند خوب، بهترین، زیبا و غیره).با توجه به متن:تعدادی از کلمات مثبت که در متن ظاهر می شود را شمارش کنید.تعدادی از کلمات منفی که در متن ظاهر می شود را شمارش کنید.اگر تعداد نمایشهای مثبت در کلمه بیشتر از تعداد نمایشهای منفی باشد، احساسات مثبت را نشان می دهند، در غیر این صورت ، احساسات منفی را به ارمغان می آورند.
خنثی کردن این سیستم ساده است، زیرادر نظر نمی گیرد که چگونه کلمات در یک دنباله ترکیب شده اند. پردازش پیشرفته تر می تواند انجام شود، اما این سیستم ها به سرعت پیچیده می شوند. زیرا ممکن است برای افزودن پشتیبانی برای عبارات جدید و واژگان، قوانین جدید مورد نیاز باشند و اضافه کردن قوانین جدید می تواند نتیجه های ناخواسته را در نتیجه تعامل با قوانین قبلی ایجاد کند. در نتیجه، این سیستم ها نیاز به سرمایه گذاری های مهم در تنظیم دستی و حفظ قوانین دارند.روش Automatic: براساس قواعد دستی نیست بلکه بر اساس قوانین یادگیری ماشین است. در این روش به کلاسه بندی مسئله پرداخته می شود. و یک classifier با یک متن تغذیه می شود و دسته بندی مثبت یا منفی یا خنثی را به عنوان خروجی برمیگرداند.
فرآیند train و prediction:
در train مدل یاد میگیرد که یک ورودی مشخص (text) را به خروجی مناسب (tag) ارتباط دهد. این کار را با استفاده از test sample ای که train کرده است انجام می دهد.feature extractor متن ورودی را به یک vector میکند. زوج feature vectors و tag (مثبت، منفی، خنثی) به الگئریتم های یادگیری ماشین داده می شوند تا مدل را ایجاد کند.
در prediction ، feature extractor برای تبدیل متن ورودی به feature vectors استفاده می شود. سپس feature vectors به مدل داده می شود و مدل tag را تولید می کند.
۳. راه حل ارائه شده
ما از روش دوم استفاده کرده ایم. اولین گام در یادگیری ماشین کلاسه بندی است. تبدیل متن به نمایش عددی. معمولا بر اساس اهمیت و کاربرد کلمه است. به این فرآیند feature extraction یا text vectorization می گویند.
روش های کلاسه بندی:
روش Naïve Bayes: یک خانواده از الگوریتم های احتمالاتی است که از قضیه Bayes برای پیش بینی دسته متن استفاده می کند.
naive bayes رگرسیون خطی: یک الگوریتم بسیار شناخته شده در آمار استفاده شده برای پیش بینی مقدار (Y) با توجه به مجموعه ای از ویژگی های (X) است.
روش Support Vector Machines: یک مدل غیر احتمالی است که از نمایندگی از نمونه های متن به عنوان نقاط در یک فضای چند بعدی استفاده می کند. این نمونه ها به گونه ای طراحی شده اند که نمونه هایی از دسته های مختلف (احساسات) متعلق به مناطق متمایز آن فضا باشد .. سپس متون جدید بر روی همان فضا قرار می گیرند و پیش بینی می شود که متعلق به یک دسته بندی باشند که بر اساس آن منطقه قرار می گیرند.
روش Deep Learning: مجموعه ای متنوع از الگوریتم هایی است که تلاش می کند تا با استفاده از شبکه های عصبی مصنوعی برای پردازش داده ها مغز انسان کار کند.
ما از روش اول استفاده کرده ایم.
جمعآوری داده: ما از دیتاست اماده ی توییتر استفاده کرده ایم که شامل تعداد زیادی توییت بود. در هر خط از متن دیتاست یک جمله و یک tag قرار داشت.
1+ به معنای مثبت، 1- به معنای منفی و صفر به معنای خنثی بود.
سپس جملات و عدد را با توجه به tab از هم جدا می کنیم و در یک لیست می ریزیم.
کلمات هر جمله را tokenize میکنیم
همه ی کلمات را با ارزش عددی شان در یک لیست میریزیم.
این لیست را با استفاده از توابع nltk که به راحتی در پایتون Import می شود، feature میکنیم. تعداد دفعاتی که هر نتیجه ی یک ازمایش رخ داده است را ثبت میکند.
پیش از آغاز کار با دادهها نیاز است که بر روی آن ها پردازش صورت گیرد.
@و # و ... ها را حذف میکنیم.
برای هر توییت ابتدا هر خط را جدا میکنیم.
الگوریتم را بر آن پیاده سازی میکنیم. سپس کلاسه بندی میکنیم.
در یک فایل جدید لحن جمله را مینویسیم.
لینک کد: گیت هاب
۴. مراجع
[1] sentiment analysis
naive bayes
(https://en.wikipedia.org/wiki/Bayes%27_theorem)