تجزیه و تحلیل احساسات چیست و چگونه انجام می شود؟ – از صفر تا صد
«پردازش زبان طبیعی» (Natural Language Processing | NLP) زیرشاخهای از هوش مصنوعی است و تمرکز آن بر تجزیه و تحلیل، درک و تولید زبان انسان است. پردازش زبان طبیعی به کامپیوترها این امکان را میدهد تا با استفاده از زبانهایی همچون انگلیسی، کارهایی مانند ترجمه، خلاصهسازی و «تجزیه و تحلیل احساسات» (Sentiment Analysis) را انجام دهند. تجزیه و تحلیل احساسات یا «عقیدهکاوی» (Opinion Mining)، یکی از روشهای پردازش زبان طبیعی برای تشخیص «مثبت» (Positive)، «منفی» (Negative) یا «خنثی» (Neutral) بودن حس متن است. بهطور معمول، از تجزیه و تحلیل احساسات برای کسبوکارهایی استفاده میشود که در آنها، بازخورد و همچنین درک نیازهای مشتری اهمیت فراوانی دارد. در این مطلب از مجله فرادرس، با مفهوم تجزیه و تحلیل احساسات، چگونگی استفاده از آن و کاربردهایش آشنا میشویم.
در این مطلب، ابتدا تعریفی ساده از تجزیه و تحلیل احساسات ارائه میدهیم و سپس با انواع مختلف و چند مثال کاربردی از آن آشنا میشویم. در ادامه و پس از درک چگونگی کارکرد تحلیل احساسات و معرفی چند مجموعهداده رایج در این زمنیه، نمونههایی از این سیستمها را در حوزه کسبوکار مورد بررسی قرار میدهیم. سپس با نحوه استفاده از مدلهای آماده تجزیه و تحلیل احساسات آشنا شده و یاد میگیریم که چگونه سیستم تحلیل احساسات شخصی خودمان را پیادهسازی کنیم. در انتهای این مطلب از مجله فرادرس، با اشاره به برخی از چالشها، چند نمونه از پرسشهای متداول این حوزه را نیز پاسخ میدهیم.
تجزیه و تحلیل احساسات چیست؟
تجزیه و تحلیل احساسات فرایندی است که در آن مثبت یا منفی بودن حس متن شناسایی میشود. کسبوکارهای بسیاری از تجزیه و تحلیل احساسات برای تشخیص احساسات در شبکههای اجتماعی، سنجش میزان شهرت برند و کشف نیازهای مشتری استفاده میکنند. با بهرهگیری از این تکنیک، میتوان دادهها را در مقیاس بزرگ و بهصورت بیدرنگ (Real-time) پردازش کرد.
به عنوان مثال اگر بخواهید نظرات مرتبط با محصولی را به روش قدیمی تجزیه و تحلیل کنید، ابتدا باید آنها را مرتب ساخته و سپس تک-تک به بررسی آنها بپردازید. اما با استفاده از تجزیه و تحلیل احساسات، میتوانید بهشکل خودکار و با پردازش هزاران نظر مختلف، به دیدگاه افراد در مورد آن محصول خاص پیبرده، تصمیمات بهتری برای آینده اتخاذ و همچنین فرایندهای زمانبر بسیاری را خودکارسازی کنید.
انواع مختلف تحلیل احساسات
کاربرد تجزیه و تحلیل احساسات، تنها بر کشف «قطبیت» (Polarity) یا به اصطلاح فضای کلی متن خلاصه نمیشود. تحلیل احساسات، همچنین این قابلیت را دارد تا متوجه احساسات مختلفی مانند حس شادی و غم یا نیاز ضرورت و میزان علاقهمندی در متن شود. میتوان بر اساس تفسیر خود از بازخورد مشتری، دستهبندیهایی که نتیجه خوبی را در تجزیه و تحلیل احساسات از خود نشان دادهاند تعریف و سپس انتخاب کرد. در ادامه این مطلب به بررسی چند نمونه کاربردی و رایج تحلیل احساسات میپردازیم.
تجزیه و تحلیل احساسات ترتیبی
در صورتیکه دقت و میزان مثبت یا منفی بودن متن نقش مهمی را در کسبوکار ایفا کند، میتوان دستهبندی قطبیت را به سطوح مختلفی که در فهرست زیر به آن اشاره شده است گسترش داد:
- بسیار مثبت
- مثبت
- خنثی
- منفی
- بسیار منفی
به این روش تحلیل احساسات، «درجهبندی شده» (Graded) یا «ظریف» (Fine-Grained) نیز گفته میشود و در تفسیر مواردی چون امتیاز محصول کاربرد دارد. به عنوان مثال محصولی که از ۱ تا ۵، امتیاز ۵ را گرفته باشد به دسته بسیار مثبت و محصولی با امتیاز ۱، به دسته بسیار منفی تعلق میگیرد.
تشخیص عواطف
با بهرهگیری از قابلیت تشخیص عواطف در تحلیل احساسات، میتوان عواطفی مانند شادی، خستگی، خشم و ناراحتی را تشخیص داد. سیستمهای تشخیص عواطف از «لیست واژگان» (Lexicons) و عواطفی که انتقال میدهند یا الگوریتمهای «یادگیری ماشین» (Machine Learning) پیچیده استفاده میکنند. از آنجایی که افراد از طریق راههای مختلفی عواطف و احساسات خود را ابراز میکنند، گاهی اوقات، تنها بهرهگیری از لیست واژگان کفایت نمیکند. به عنوان مثال، واژگانی همچون «هیچ» که ممکن است در جملاتی مانند: «این محصول هیچ کاربردی ندارد» نقش منفی داشته باشند، در عباراتی دیگر مانند: «در این محصول هیچ عیب و ایرادی پیدا نمیکنید»، میتوانند مثبت ظاهر شوند.
تحلیل احساسات مبتنی بر ویژگی
هنگام تجزیه و تحلیل احساسات در متون، بهطور معمول، هدف پیدا کردن ویژگیها یا جنبههایی است که افراد در غالب سه حس مثبت، خنثی یا منفی به آنها اشاره دارند. در چنین کاربردی، روش تحلیل «مبتنی بر ویژگی» (Aspect-Based) میتواند مفید باشد. به عنوان مثال در بازخوردی همچون: «عمر باتری این دوربین بیش از حد کم است»، یک «دستهبند» (Classifier) مبتنی بر ویژگی میتواند متوجه ماهیت منفی نظر درباره عمر باتری محصول مورد اشاره در جمله شود.
تجزیه و تحلیل احساسات چند زبانه
تحلیل احساسات چند زبانه (Multilingual) نیازمند پیشپردازش و منابع بسیاری است؛ به همین خاطر این نوع از تجزیه و تحلیل ممکن است عمل دشواری باشد. حجم زیادی از منابع مورد نیاز بهصورت آنلاین در دسترس است و موارد دیگری همچون الگوریتمهای شناسایی نویز را باید با دانش کدنویسی ساخت. همچنین میتوان با استفاده از «دستهبند زبانی» (Language Classifier)، ابتدا و بهطور خودکار زبان متن را شناسایی و سپس با آموزش دادن یک مدل تحلیل احساسات شخصیسازی شده، متون زبان مورد نظر خود را دستهبندی کرد.
چرا تجزیه و تحلیل احساسات مهم است؟
با توجه به اینکه انسانها بیش از هر زمان دیگری، افکار و احساسات خود را آزادانه به اشتراک میگذارند، تحلیل احساسات بهسرعت در حال تبدیل شدن به ابزاری ضروری برای پایش و درک احساسات هر نوع از داده است. فرایند خودکار تجزیه و تحلیل بازخورد مشتری از طریق نظرسنجی و مکالمات موجود در شبکههای اجتماعی، به کسبوکارها اجازه میدهد تا عوامل رضایت مشتریهای خود را پیدا کرده و محصولات خود را مطابق با نیاز آنها طراحی کنند. به عنوان مثال، با استفاده از تجزیه و تحلیل احساسات برای خودکارسازی بررسی بیش از ۴ هزار بازخورد، میتوان به علت رضایت یا نارضایتی مشتری در هر مرحله از تعاملش با کسبوکار پیبرد.
یکی دیگر از دیگر کاربردهای تحلیل احساسات، شناسایی آنی مشتریهای ناراضی و پاسخگویی به آنها است. در ادامه این مطلب به بررسی و شرح مزایای تحلیل احساسات میپردازیم.
دستهبندی داده ها در مقیاس بزرگ
مرتبسازی نظرسنجیها یا هزاران مکالمه از کاربران بهصورت دستی، کار بسیار دشواری است. تجزیه و تحلیل احساسات به کسبوکارها این امکان را میدهد تا حجم بالایی از «دادههای بدون ساختار» (Unstructured Data) را به شیوهای کارآمد و موثر پردازش کنند.
بررسی بیدرنگ
از تجزیه و تحلیل احساسات میتوان برای شناسایی بیدرنگ مشکلات حیاتی استفاده کرد. به عنوان مثال، میتوان پیش از افزایش نارضایتیها یا ترک پلتفرم توسط کاربران، مشکل را شناسایی و آن را برطرف کرد.
معیار ثابت قدمی
تصور کنید پس از بهرهگیری از «معیار ثابت قدمی» (Consistent Criteria) در تعیین حس متنی خاص، متوجه میشوید که افراد تنها در ۶۰ الی ۶۵ درصد مواقع با شما موافق هستند. علامتگذاری متن بر اساس حس استخراج شده از آن سلیقهایست و به تجربه، اندیشه و باور افراد بستگی دارد. با استفاده از یک سیستم تحلیل احساسات، شرکتها میتوانند شاخصهای یکسانی را بر تمامی دادههای خود اعمال کنند، دقت را بالاتر برده و درک بهتری از نیاز مشتری پیدا کنند. در ادامه، چند نمونه از متون مورد استفاده در تجزیه و تحلیل احساسات را بررسی میکنیم.
مثال هایی از کاربرد تجزیه و تحلیل احساسات
برای درک بهتر هدف و چالشهای تحلیل احساسات، در فهرست زیر چند نمونه از عبارتهای ورودی این سیستمها را ملاحظه میکنید:
- «شبکه اینترنتی «نتفلیکس» (Netflix) بهترین عنواین سینمایی را دارد».
- «شبکه اینترنتی «هولو» (Hulu) رابط کاربری بسیار خوبی دارد».
- «علاقهای به سریالهای جدید در ژانر جنایی ندارم».
- «از منتظر ماندن برای انتشار سریالها متنفرم».
همچنین چند نمونه از مثالهای چالشیتر به شرح زیر است:
- «از فیلمهای ترسناک بدم نمیآید».
- «دوست نداشتن فیلمهای ترسناک، نارایج نیست».
- «گاهی اوقات، واقعا از برنامهای متنفر میشوم».
- «عاشق انتظار کشیدن برای انتشار سریال بعدی هستم!» (کنایه).
- «قسمت آخر هیجانانگیز بود؛ اما پایان غافلگیرکننده افتضاحی داشت».
- «فیلم سادهای بود؛ اما به دوستانم پیشنهاد نمیکنم».
- «در سکانس پایانی کیک، از خنده منفجر شدم!».
همانطور که در مثالهای بالا مشاهده میکنید، فرایند تجزیه و تحلیل احساسات، فراتر از تنها پیدا کردن جنبه مثبت یا منفی عبارات است. زبانها در جهان حقیقی، شامل چالشهای بسیاری از جمله منفی سازی، کنایه، عبارات ناآشنا و پیچیدهای هستند که دستهبندی آنها را دشوار میسازد. در حالی که تحلیل احساسات پایهای، قادر به دستهبندی عبارات آسان است، سیستمهای پیشرفتهتر با استفاده از پیشزمینه و سرنخهای زبانی، میتوانند عملکرد دقیقتری از خود نشان دهند.
تجزیه و تحلیل احساسات چگونه کار میکند؟
تجزیه و تحلیل احساسات یا عقیدهکاوی، با استفاده از پردازش زبان طبیعی و الگوریتمهای یادگیری ماشین، قادر است لحن عاطفی مکالمات آنلاین را تشخیص دهد. بر اساس مقدار دادهای که میخواهید پردازش کنید و همچنین میزان دقت موردنظر خود، میتوانید الگوریتمهای مختلفی را برای پیادهسازی مدلهای تحلیل احساسات بهکار گیرید. الگوریتمهای تجزیه و تحلیل احساسات را میتوان به سه دسته کلی زیر تقسیم کرد:
- قاعده-محور: این سیستمها بر پایه مجموعهای از قوانین از پیش تعریف شده، فرایند تجزیه و تحلیل احساسات را اجرا میکنند.
- خودکار: سیستمهایی در این دسته قرار میگیرند که با تکیه بر روشهای یادگیری ماشین از دادهها یاد میگیرند.
- ترکیبی: سیستمهایی که از ترکیب دو دسته قاعده-محور و خودکار برای اجرای فرایند تجزیه و تحلیل احساسات استفاده میکنند.
در ادامه این مطلب، به شرح و توضیح دقیقتر هر یک از الگوریتمهای فهرست بالا میپردازیم.
روش های قاعده-محور
بهطور معمول، سیستمهای قاعده-محور از مجموعه قواعدی که توسط انسان تنظیم شده است، برای تحلیل «ذهنیت» (Subjectivity) و قطبیت دیدگاهی خاص کمک میگیرند. این قواعد ممکن است شامل تکنیکهای NLP مختلفی در «زبانشناسی محاسباتی» (Computational Linguistics) از جمله موارد زیر باشند:
- «ریشهیابی» (Stemming)
- «جداسازی» (Tokenization)
- «برچسبگذاری نقش دستوری» (Part of Speech Tagging | POS)
- تجزیه (Parsing)
- «مجموعهای از واژگان و احساسات مختلف» (Lexicons)
در ادامه مثالی ساده از نحوه کارکرد یک سیستم قاعده-محور را بررسی میکنیم:
- دو لیست شامل واژگان قطبیشده (Polarized) تعریف میکنیم. لیست اول از واژگانی با بار منفی مانند بد، بدترین و زشت تشکیل شده و لیست دوم متشکل از واژگان مثبتی مانند خوب، بهترین و زیبا است.
- تعداد واژگان مثبت و منفی موجود در یک جمله را میشماریم.
- اگر تعداد واژگان مثبت در جمله مورد نظر، بیشتر از واژگان منفی باشد، سیستم حس جمله را مثبت و در غیر اینصورت منفی توصیف میکند. در صورتی که تعداد واژگان مثبت و منفی برابر باشد، سیستم پاسخ خنثی را برمیگرداند.
به دلیل در نظر نگرفتن چگونگی ترکیب واژگان در جمله، سیستمهای قاعده-محور عملکرد به مراتب سادهتری نسبت به سایر روشها دارند. البته در همین سیستمها نیز میتوان از تکنیکهای پیشرفتهای استفاده و قواعد تازهای برای پشتیبانی از عواطف و واژگان جدید اضافه کرد. با این حال، اضافه کردن اصول و قواعد جدید، ممکن است نتایج پیشین را تحت تاثیر قرار داده و به پیچیدگی سیستم افزوده شود. از آنجایی که روشهای قاعده-محور به «میزانسازی دقیق» (Fine-Tuning) و نگهداری نیاز دارند، سرمایهگذاری مدوام نیز یکی از موارد دیگری است که در چنین سیستمهایی ضرورت دارد.
روشهای خودکار
برخلاف سیستمهای قاعده-محور، روشهای خودکار بهجز تکنیکهای یادگیری ماشین، نیازی به الگوهای دیگر مانند قواعد انسانی ندارند. در روشهای خودکار، عمل تجزیه و تحلیل احساسات در قالب یک مسئله دستهبندی طراحی شده و در نتیجه دستهبند، ورودی متنی را دریافت و دستهای حاوی مواردی مانند مثبت، خنثی یا منفی را نتیجه میدهد. در تصویر زیر نمونهای از نحوه پیادهسازی یک دستهبند یادگیری ماشین را مشاهده میکنید:
فرایند های آموزش و پیشبینی
همانطور که در قسمت «الف» تصویر بالا آمده است، مدل یاد میگیرد که هر ورودی را بر اساس نمونههای از پیش مشاهده شده در طول فرایند آموزش، به خروجی یا برچسب (Tag) مشخصی نسبت دهد. وظیفه بخش «استخراجگر ویژگی» (Feature Extractor)، تغییر شکل ورودی متنی به یک «بردار ویژگی» (Feature Vector) است. در نهایت جفت بردارهای ویژگی و برچسبها از جمله مثبت، خنثی و منفی، برای ساخت مدلی پیشبینی کننده، به الگوریتم یادگیری ماشین تغزیه میشود. در قسمت «ب» یا همان فرایند پیشبینی، از استخراجگر ویژگی برای تغییر متن ورودی به بردار ویژگی استفاده میشود. سپس بردارهای ویژگی بدون برچسب به مدل ارسال و برچسب خروجی با سه حالت مثبت، خنثی یا منفی تولید میشود.
استخراج ویژگی از متن
اولین مرحله کار یک دستهبند متن یادگیری ماشین، تغییر شکل یا «بردارسازی متن» (Text Vectorization) است. روش قدیمی انجام این کار «کیسه واژگان» (Bag of Words) نام دارد. به تازگی روشهای استخراج ویژگی جدیدی بر اساس «تعبیهسازی واژگان» (Word Embedding) یا همان «بردار واژگان» (Word Vectors) مورد استفاده قرار میگیرند. چنین نمایشی باعث میشود تا ارائه واژگان مترادف، مشابه هم باشد؛ امری که موجب بهبود عملکرد دستهبندها میشود.
الگوریتم های دستهبندی
بهطور معمول مرحله دستهبندی، شامل مدلهای آماری همچون «بیز ساده» (Naive Bayes)، «رگرسیون لاجستیک» (Logistic Regression)، «ماشینهای بردار پشتیبان» (Support Vector Machine | SVM) یا «شبکههای عصبی» (Neural Networks) میشود. در فهرست زیر به توضیح مختصر هر یک از الگوریتمها میپردازیم:
- بیز ساده: خانوادهای از الگوریتمهای مبتنی بر احتمال که از «قضیه بیز» (Bayes's Theorem) برای پیشبینی دسته یا گروه یک متن استفاده میکنند.
- رگرسیون خطی: الگوریتمی شناختهشده در آمار و احتمال که بر اساس مجموعه ویژگی به نام X، مقدار عددی Y را نتیجه میدهد.
- ماشین بردار پشتیبان: مدلی «غیراحتمالاتی» (Non-Probabilistic) که نمونههای متنی را به عنوان نقاطی در یک فضای چند بعدی به نمایش میگذارد. در این روش، نمونه دستههای مختلف یا همان احساسات، به نواحی مجزایی درون فضای احتمالاتی تشبیه میشوند. سپس نمونههای جدید، بر اساس شباهتی که با سایر متون موجود دارند، به ناحیهای با بیشترین اشتراک نسبت داده میشوند.
- «یادگیری عمیق» (Deep Learning): مجموعه متنوعی از الگوریتمها که با توسعه شبکه عصبی برای پردازش داده، سعی در تقلید رفتار مغز انسان دارند.
روش های ترکیبی
نحوه کارکرد روشهای ترکیبی به این شکل است که عناصر مطلوبی از دو روش قاعده-محور و خودکار را در یک سیستم جمعآوری میکنند. بزرگترین مزیت این سیستمها، نتایجی با دقت بالاتر از سایر روشها است.
مجموعه داده های کاربردی تحلیل احساسات
کار کردن با مجموعهدادههای مختلف، بخش اساسی کسب مهارت و حرفهای شدن در تجزیه و تحلیل احساسات است. برای هر گونه آزمایشی که بخواهید انجام دهید، ابتدا باید مجموعهدادهای مرتبط با موضوع مسئله پیدا کنید. در فهرست زیر مجموعهدادههای رایجی را برای شروع کار با سیستمهای تجزیه و تحلیل احساسات و روشهای یادگیری ماشین معرفی میکنیم:
- مجموعهداده نقد محصول از آمازون: این مجموعهداده شامل چند میلیون بازخورد محصول از شرکت «آمازون» (Amazon) همراه با امتیاز است. از این مجموعهداده، برای آموزش مدلهای تحلیل احساسات استفاده میشود.
- مجموعهداده نقد رستوران ِYelp: این مجموعهداده از ۵/۲ میلیون دیدگاه سرویس «یِلپ» (Yelp) همراه با امتیاز تشکیل شده است.
- مجموعهداده نقد فیلم Pabo: مجموعهدادهای متشکل از هزار دیدگاه مثبت و هزار دیدگاه منفی که برای هر دو گروه مثبت و منفی، تعداد ۵ هزار و ۳۳۱ نقد فیلم را نیز شامل میشود.
- مجموعهداده نقد غذا از آمازون: این مجموعهداده شامل چیزی نزدیک به ۵۰۰ هزار نقد غذا از شرکت آمازون است. از جمله نمونه دادههای دیگر موجود در این مجموعهداده میتوان به اطلاعات محصولات و کاربران، امتیازها و نسخهای متنی از هر دیدگاه اشاره کرد.
امروزه مجموعهدادههای رایگان بسیاری در اختیار افراد علاقهمند به یادگیری پردازش زبانهای طبیعی و بهطور دقیقتر، تجزیه و تحلیل احساسات وجود دارد. انتخاب مجموعهداده مناسب برای اجرای یک پروژه بسیار حائز اهمیت است و مجموعهدادههای معرفی شده، میتوانند گزینههای مناسبی برای شروع باشند.
ابزارهای متن باز تحلیل احساسات
کتابخانههای «متنباز» (Open Source) در زبانهای برنامهنویسی مانند «پایتون» (Python) و «جاوا» (Java)، به دلیل جامعه مخاطب و پشتیبانی خوبی که در زمینه پردازش زبانهای طبیعی و یادگیری ماشین دارند، میتوانند راهحل مناسبی برای ساخت سیستمهای شخصی تجزیه و تحلیل احساسات باشند. در ادامه به معرفی چند نمونه از این ابزارها در زبان پایتون میپردازیم.
پایتون
زبانبرنامه نویسی پایتون کتابخانههای متن باز بسیاری را در زمینه تجزیه و تحلیل احساسات در اختیار کاربر قرار میدهد. انتخاب کتابخانه و ابزار مناسب، به مواردی همچون میزان پیچیدگی سیستم، در دسترس بودن مجموعه آموزشی و دقت ایدهآل بستگی دارد. در فهرست زیر چند نمونه پراستفاده از این ابزارها را ملاحضه میکنید:
- کتابخانه Scikit-learn: یکی از مشهورترین کتابخانههای یادگیری ماشین است و ابزارهای بسیاری برای بردارسازی متن دارد. این کتابخانه از پیش الگوریتمهایی مانند ماشین بردار پشتیبان، بیز ساده و رگرسیون لاجستیک را پیادهسازی کرده و به راحتی میتوان از آنها استفاده کرد.
- کتابخانه NLTK: کتابخانهای مرسوم برای پردازش زبان طبیعی و دارای جامعه مخاطبی بزرگ است. با استفاده از این ابزار میتوان مدلهای یادگیری ماشین را آموزش داد.
- کتابخانه SpaCy: کتابخانهای دیگر در زمینه NLP که روزبهروز به تعداد کاربرانش اضافه میشود. مانند NLTK، این کتابخانه نیز مجموعه عظیمی از توابع آماده را برای آموزش دستهبندهای متنی فراهم میکند.
- کتابخانه TensorFlow: مجموعهای از ابزارهای مورد نیاز برای ساخت و آموزش شبکههای عصبی که توسط شرکت گوگل توسعه پیدا میکند. از این کتابخانه میتوان برای بردارسازی متن نیز استفاده کرد.
- کتابخانه Keras: با بهرهگیری از زیرساختهایی که این کتابخانه برای ساخت انواع مختلفی از شبکههای عصبی از جمله «شبکههای عصبی بازگشتی» (Recurrent Neural Networks | RNNs) و «شبکههای عصبی پیچشی» (Convolutional Neural Networks | CNNs) در اختیار افراد قرار میدهد، میتوان شبکههایی عمیق چند لایهای را برای کاربردهای مختلف طراحی و اجرا کرد.
- کتابخانه PyTorch: فریمورک یادگیری عمیق به نسبت جدیدی است که توسط شرکتهای معتبری مانند: مِتا (Meta)، اِکس (توییتر سابق) و اِنویدیا (Nvidia) مورد استفاده قرار میگیرد. همچنین از آنجایی که PyTorch جامعه مخاطب بزرگی دارد، سرعت توسعه و پشتیبانی آن نیز بالاست و میتواند گزینه مطمئنی برای شروع یادگیری باشد.
استفاده از مدل های تحلیل احساسات با پایتون
وبسایت Hugging Face «+» مجموعهای بزرگ از مدلها و مجموعهدادههایی در دسترس عموم برای یادگیری ماشین است. در این وبسایت بیش از ۲۷ هزار مدل یادگیری ماشین «از پیش آموزش دیده» (Pre-trained) با عملکرد بالا برای کاربردهایی همچون تجزیه و تحلیل احساسات، «تشخیص اشیاء» (Object Detection)، «تولید متن» (Text Generation) و «بازشناسی گفتار» (Speech Recognition) قرار داده شده است. بیش از ۲۱۵ مدل تحلیل احساسات در این سایت موجود است که میتوانید با تنها ۵ خط کد پایتون مانند زیر، از آنها در کارهای خود استفاده کنید:
1pip install -q transformers
2from transformers import pipeline
3sentiment_pipeline = pipeline("sentiment-analysis")
4data = ["I love you", "I hate you"]
5sentiment_pipeline(data)
قطعه کد بالا، با استفاده از کلاس pipeline ، ورودیهای متنی را به مدلهای از پیش آموزش دیده شده ارسال و نتایج پیشبینی شده را به عنوان خروجی برمیگرداند. اگر مانند کد بالا، پارامتری برای کلاس pipeline مشخص نشود، از مدل تحلیل احساسات پیشفرض برای پایش لیست متون به نام data استفاده میکند. در آخر خروجی مانند زیر خواهد بود:
[{'label': 'POSITIVE', 'score': 0.9998}, {'label': 'NEGATIVE', 'score': 0.9991}]
اگر مدل پیشفرض تجزیه و تحلیل احساسات عملکرد مناسبی برای کاربرد شما نداشت، میتوانید با ذکر نام مدل، از مدل دیگری که با زبان مدنظر شما هماهنگتر است استفاده کنید. به عنوان مثال، اگر مدلی میخواهید که بر روی دادههای شبکه اجتماعی اِکس (توییتر سابق) آموزش دیده شده باشد، میتوانید مانند زیر عمل کنید:
1specific_model = pipeline(model="finiteautomata/bertweet-base-sentiment-analysis")
2specific_model(data)
نمونه کدهای بالا را اجرا و نتایج آن را مشاهده کنید. مدلهایی که در فهرست زیر به آنها اشاره شده است، برخی از محبوبترین مدلهای تجزیه و تحلیل احساسات در وبسایت Hugging Face هستند:
- مدل Twitter-roberta-base-sentiment: مدلی زبانی که بر روی تعداد تقریبی ۸۵ میلیون توییت آموزش دیده و برای کاربرد تحلیل احساسات میزانسازی دقیق شده است. میزانسازی دقیق فرایندی است که در آن یک «مدل زبانی گسترده» (LLM) مانند مدل RoBERTa در این مثال انتخاب و سپس با تغذیه دادههای آموزشی اضافی، برای کاربرد دیگری مانند تجزیه و تحلیل احساسات مشابهسازی میشود.
- مدل Bert-base-multilingual-uncased-sentiment: نوعی مدل زبانی که برای اجرای فرایند تحلیل احساسات روی بازخورد محصولات آنلاین به ۶ زبان انگلیسی، هلندی، آلمانی، فرانسوی، اسپانیایی و ایتالیایی تنظیم شده است.
- مدل Distilbert-base-uncased-emotion: از این مدل برای شناسایی احساساتی مانند: ناراحتی، لذت، عشق، خشم، ترس و شگفتی در متن استفاده میشود.
مدل تحلیل احساسات خودتان را بسازید
کار با مدلهای از پیش آموزش دیده موجود، راهی بسیار خوب برای شروع کار در زمینه تجزیه و تحلیل احساسات است. این مدلها از معماریهای یادگیری عمیق مانند «ترنسفورمرها» (Transformers) و دیگر روشهای یادگیری ماشین برای تجزیه و تحلیل دقیق احساسات استفاده میکنند. اگرچه میتوان این مدلها را برای بهبود نتایج و کسب دقت بالاتر در کاربردهایی خاص، با دادههای اضافه دیگری نیز آموزش داد. در ادامه این مطلب از مجله فرادرس، یاد میگیریم که چگونه یک مدل یادگیری ماشین را برای تجزیه و تحلیل احساسات و بر اساس دادهها و معیارهای شخصی، میزانسازی کنیم و سپس آموختههای خود را در یک مثال کاربردی بهکار ببریم.
میزانسازی دقیق مدل با پایتون
در این بخش، از مجموعهداده IMDB برای میزانسازی دقیق یک مدل DistilBERT و تجزیه و تحلیل احساسات استفاده میکنیم. مجموعهداده IMDB در مجموع شامل ۵۰ هزار نقد فیلم است که ۲۵ هزار مورد از آنها برچسبگذاری شده و در «مجموعه آموزش» (Training Set) و ۲۵ هزار نمونه داده دیگر در «مجموعه آزمون» (Test Set) و برای ارزیابی قرار دارند. مدل DistilBERT نسخهای کوچکتر، سریعتر و ارزانتری از مدل BERT است. این مدل ۴۰ درصد کوچکتر است و با حفظ ۹۵ درصد از عملکرد مدل BERT، به میزان ۶۰ درصد نیز سریعتر اجرا میشود. با استفاده از مجموعهداده IMDB، مدل DistilBERT را بهگونهای تنظیم میکنیم که قادر باشد بازخورد فیلمها را به دو دسته مثبت و منفی تقسیم کند. پس آموزش مدل، میتوانید از آن برای تجزیه و تحلیل دادههای جدید بهره ببرید. در ادامه این مطلب، به شرح کامل مراحل ایجاد و اجرای مدل تحلیل احساسات میپردازیم.
۱. فعالسازی GPU و نصب وابستگی ها
در قدم اول و برای آنکه فرایند آموزش سریعتر انجام شود، حالت پیشفرض که از CPU استفاده میکند را به GPU تغییر میدهیم. برای انجام اینکار در منو Google Colab روی گزینه Runtime کلیک کرده و سپس از بخش Change runtime type، گزینه T4 GPU را به عنوان شتابدهنده سختافزاری انتخاب کنید.
سپس با اجرای قطعه کد زیر بررسی کنید که آیا GPU فعال شده است یا خیر:
1import torch
2torch.cuda.is_available()
کتابخانههایی که در ادامه قرار است از آنها استفاده کنیم را مانند زیر نصب میکنیم:
!pip install datasets transformers huggingface_hub
همچنین برای استفاده از ابزار Git در مخزن مدل، باید از طریق زیر کتابخانه git-lfs را نیز نصب کنیم:
!apt-get install git-lfs
۲. پیشپردازش دادهها
برای تنظیم یا میزانسازی دقیق مدل DistilBERT برای تحلیل احساسات به مجموعهای از دادهها نیاز داریم. در نتیجه برای دانلود و سپس پیشپردازش مجموعهداده IMDB، کتابخانه Datasets را مانند زیر فراخوانده و از آن برای آموزش مدل استفاده میکنیم:
1from datasets import load_dataset
2imdb = load_dataset("imdb")
مجموعهداده IMDB از تعداد زیادی داده تشکیل شده است؛ از همینرو و برای انجام سریعتر فرایند آموزش و آزمون دو خط کد زیر را اجرا میکنیم:
1small_train_dataset = imdb["train"].shuffle(seed=42).select([i for i in list(range(3000))])
2small_test_dataset = imdb["test"].shuffle(seed=42).select([i for i in list(range(300))])
سپس برای پیشپردازش دادهها، از کتابخانه DistilBERT tokenizer استفاده و مانند زیر عمل میکنیم:
1from transformers import AutoTokenizer
2tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
در مرحله بعد باید متن ورودی خود برای مدل را با استفاده از متد map() به دو زیرمجموعه آموزش و آزمون تقسیم کنیم:
1def preprocess_function(examples):
2 return tokenizer(examples["text"], truncation=True)
3
4tokenized_train = small_train_dataset.map(preprocess_function, batched=True)
5tokenized_test = small_test_dataset.map(preprocess_function, batched=True)
برای سرعتدهی به فرایند آموزش و مانند قطعه کد زیر، نمونههای آموزشی را از شکل اولیه آنها به شکل داده «تانسور» (Tensor) از کتابخانه PyTorch تبدیل و سپس با اضافه کردن میزان مناسبی از «لایهسازی» (Padding)، دادهها را به یکدیگر الحاق (Concatenate) میکنیم:
1from transformers import DataCollatorWithPadding
2data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
۳. آموزش مدل
پس از اتمام مرحله پیشپردازش میتوانیم به سراغ آموزش مدل برویم. در این مرحله، تنها بخشی از مدل از پیش آموزش دیده DistilBERT را با بخش دیگری که مناسب تجزیه و تحلیل احساسات باشد عوض میکنیم. با اینکار دانش مدل DistilBERT را به مدل سفارشی شده خود انتقال میدهیم. در مرحله آموزش، از (API) با نام Trainer که برای منظمسازی «مدلهای ترنسفورمر» (Transformer Models) از جمله DistilBERT وBERT و RoBERTa بهینهسازی شده است استفاده میکنیم. ابتدا مانند زیر، مدل DistilBERT را به عنوان مدل پایه خود تعریف میکنیم:
1from transformers import AutoModelForSequenceClassification
2model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=2)
سپس با تعریف تابع compute_metrics مانند کد زیر، دو معیار «صحت» (Accuracy) و «امتیاز اِفوان» (F1-Score) برای ارزیابی عملکرد مدل تعریف میکنیم:
1import numpy as np
2from datasets import load_metric
3
4def compute_metrics(eval_pred):
5 load_accuracy = load_metric("accuracy")
6 load_f1 = load_metric("f1")
7
8 logits, labels = eval_pred
9 predictions = np.argmax(logits, axis=-1)
10 accuracy = load_accuracy.compute(predictions=predictions, references=labels)["accuracy"]
11 f1 = load_f1.compute(predictions=predictions, references=labels)["f1"]
12 return {"accuracy": accuracy, "f1": f1}
سپس باید برای مدیریت مدلها، وارد اکانت خود در وبسایت Hugging Face شوید. توجه داشته باشید که پس از اجرای تابع notebook_login() ، باید مانند زیر در کادر باز شده توکن اکانت خود را وارد کنید:
1from huggingface_hub import notebook_login
2notebook_login()
پیش از آموزش مدل، ابتدا باید آرگومانهای آموزش و همچنین کلاس Trainer را با همه متغیرهایی که تا به اینجا تعریف کردهایم، مانند زیر فراخوانی کنیم:
1from transformers import TrainingArguments, Trainer
2
3repo_name = "finetuning-sentiment-model-3000-samples"
4
5training_args = TrainingArguments(
6 output_dir=repo_name,
7 learning_rate=2e-5,
8 per_device_train_batch_size=16,
9 per_device_eval_batch_size=16,
10 num_train_epochs=2,
11 weight_decay=0.01,
12 save_strategy="epoch",
13 push_to_hub=True,
14)
15
16trainer = Trainer(
17 model=model,
18 args=training_args,
19 train_dataset=tokenized_train,
20 eval_dataset=tokenized_test,
21 tokenizer=tokenizer,
22 data_collator=data_collator,
23 compute_metrics=compute_metrics,
24)
در مرحله آخر و برای منظمسازی دقیق مدل روی مجموعهداده تحلیل احساسات، تنها کافی است متد train() را بر روی نمونه شیء کلاس trainer مانند زیر صدا بزنیم:
1trainer.train()
با اجرای قطعه کد بالا، فرایند منظمسازی دقیق مدل DistilBERT برای تحلیل احساسات انجام میشود. قابل ذکر است که مدت زمان اجرای فرایند آموزش، به سختافزار شما و همچنین تعداد نمونههای موجود در مجموعهداده بستگی دارد. هر چه تعداد نمونهها بیشتر باشد، عملکرد مدل دقیقتر شده اما زمان اجرای آن نیز طولانیتر میشود. سپس برای آنکه ببینیم مدل ما، بر اساس معیارهای ارزیابی تعریف شده، چه عملکردی از خود نشان میدهد، مانند زیر، متد evaluate() را بر روی شیء trainer صدا میزنیم:
1trainer.evaluate()
پس از اجرای کد بالا، صحت ۸۸ درصد و امتیاز F1 برابر با ۸۹ درصد بهدست میآید. عملکردی بسیار خوب برای مدل تجزیه و تحلیل احساساتی که تنها با ۳ هزار نمونه آموزش دیده است.
۴. پایش نمونه های جدید از طریق مدل آموزش داده شده
در سه مرحله قبل، مدل تحلیل احساسات خود را آموزش دادیم. در این مرحله آن را روی نمونههای جدید مورد آزمایش قرار میدهیم. ابتدا باید مانند زیر، مدل را با استفاده از متد push_to_hub() در سایت Hugging Face آپلود کنیم:
1trainer.push_to_hub()
در مرحله بعد و با استفاده از کلاس pipeline ، مدل خود را بر روی دو نقد فیلم جدید مورد آزمایش قرار میدهیم. برای اینکار باید قطعه کد زیر را اجرا کنیم:
1from transformers import pipeline
2
3sentiment_model = pipeline(model="federicopascual/finetuning-sentiment-model-3000-samples")
4sentiment_model(["I love this move", "This movie sucks!"])
پس از اجرای کد بالا، خروجی مانند زیر خواهد بود:
[{'label': 'LABEL_1', 'score': 0.9558}, {'label': 'LABEL_0', 'score': 0.9413}]
در مجموعهداده IMDB، برچسب ۱ به معنی مثبت و برچسب ۰ به معنی منفی است.
مثال کاربردی از تجزیه و تحلیل احساسات در پایتون
در این بخش از مطلب، به تحلیل توییتهایی حوزه NFT با استفاده از تجزیه و تحلیل احساسات میپردازیم. در مرحله اول از کتابخانه Tweepy برای دریافت متون با تگ NFT از API توییتر استفاده میکنیم. سپس از طریق یک مدل تحلیل احساسات از پیش آموزش دیده، اطلاعات دریافتی را تحلیل و در آخر برای درک بهتر، نتایج بهدست آمده را مورد بررسی قرار میدهیم.
۱. نصب وابستگی ها
ابتدا باید مانند نمونه، کتابخانههای مورد نیاز را نصب کنیم:
!pip install -q transformers tweepy wordcloud matplotlib
۲. ایجاد حساب برای استفاده از API توییتر
برای برقراری ارتباط با API توییتر، ابتدا باید حسابی در بخش توسعهدهنگان توییتر (Developer Account) ساخته و سپس با ایجاد پروژهای جدید، کلید API و توکن (Token) خود را دریافت کنیم. برای ایجاد حساب کاربری و دریافت اطلاعات مورد نیاز مانند زیر عمل میکنیم:
ثبت نام
ابتدا به قسمت ثبتنام رفته و حساب کاربری خود را ایجاد میکنیم.
ساخت یک پروژه
پس از ثبتنام، به بخش Developer Portal رفته و پروژه جدیدی میسازیم:
بعد از انتخاب نام و توضیحی مختصر برای پروژه، باید مانند تصویر زیر، App جدیدی برای پروژه خود ایجاد کنیم. یک App در API توییتر، تنها بخشی برای نگهداری کلیدهای API است؛ کلیدهایی که برای برقراری هر «درخواست اِچتیتیپی» (HTTP Request) به آنها نیاز داریم.
بر روی گزینه Create a new App instead کلیک کرده و نامی برای App خود انتخاب کنید:
پس از کلیک کردن روی دکمه Complete، کلیدهای API و توکنی که برای اتصال App خود به API توییتر نیاز دارید، مانند تصویر زیر به شما نمایش داده میشود. در آخر بر روی علامت (+) کنار هر بخش کلیک کرده و کلیدها و توکن دریافتی خود را ذخیره کنید.:
پس از دریافت کلید API و توکن، با استفاده از کتابخانه Tweepy، مانند زیر قطعه کدی برای تعامل با API توییتر مینویسیم:
1import tweepy
2
3# Add Twitter API key and secret
4consumer_key = "XXXXXX"
5consumer_secret = "XXXXXX"
6
7# Handling authentication with Twitter
8auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
9
10# Create a wrapper for the Twitter API
11api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
۳. جستجو برای توییت های مورد نظر
در این بخش، با استفاده از کلاس Tweepy Cursor «+» مانند زیر، هزار توییت مرتبط با حوزه NFT را از طریق API توییتر جمعآوری میکنیم:
1# Helper function for handling pagination in our search and handle rate limits
2def limit_handled(cursor):
3 while True:
4 try:
5 yield cursor.next()
6 except tweepy.RateLimitError:
7 print('Reached rate limite. Sleeping for >15 minutes')
8 time.sleep(15 * 61)
9 except StopIteration:
10 break
11
12# Define the term you will be using for searching tweets
13query = '#NFTs'
14query = query + ' -filter:retweets'
15
16# Define how many tweets to get from the Twitter API
17count = 1000
18
19# Let's search for tweets using Tweepy
20search = limit_handled(tweepy.Cursor(api.search,
21 q=query,
22 tweet_mode='extended',
23 lang='en',
24 result_type="recent").items(count))
۴. اجرای تحلیل احساسات روی توییت ها
در این مرحله، پس از انتخاب یکی از مدلهای از پیش آموزش دیده برای تجزیه و تحلیل احساسات «+»، مانند کد زیر، از کلاس pipeline برای پیشبینی برچسب هر توییت استفاده میکنیم:
1from transformers import pipeline
2
3# Set up the inference pipeline using a model from the Hugging Face
4sentiment_analysis = pipeline(model="finiteautomata/bertweet-base-sentiment-analysis")
5
6# Let's run the sentiment analysis on each tweet
7tweets = []
8for tweet in search:
9 try:
10 content = tweet.full_text
11 sentiment = sentiment_analysis(content)
12 tweets.append({'tweet': content, 'sentiment': sentiment[0]['label']})
13
14 except:
15 pass
۵. بررسی نتایج تحلیل احساسات
با بررسی نتایج حاصل از تجزیه و تحلیل احساسات، متوجه نظر عموم مردم نسبت به جریان NFTها میشویم. اینکه آیا بیشتر نظرات مثبت است یا منفی. برای اینکار ابتدا نتایج بهدست آمده در مرحله قبل را بهصورت نوع دادهی «دیتافریم» (DataFrame) فراخوانی کرده و از هر سه گروه مثبت (POS)، خنثی (NEU) و منفی (NEG)، یک توییت را مانند زیر نمایش میدهیم:
1import pandas as pd
2
3# Load the data in a dataframe
4df = pd.DataFrame(tweets)
5pd.set_option('display.max_colwidth', None)
6
7# Show a tweet for each sentiment
8display(df[df["sentiment"] == 'POS'].head(1))
9display(df[df["sentiment"] == 'NEU'].head(1))
10display(df[df["sentiment"] == 'NEG'].head(1))
خروجی از این قرار است:
Tweet: @NFTGalIery Warm, exquisite and elegant palette of charming beauty Its price is 2401 ETH. \nhttps://t.co/Ej3BfVOAqc\n#NFTs #NFTartists #art #Bitcoin #Crypto #OpenSeaNFT #Ethereum #BTC Sentiment: POS Tweet: How much our followers made on #Crypto in December:\n#DAPPRadar airdrop — $200\nFree #VPAD tokens — $800\n#GasDAO airdrop — up to $1000\nStarSharks_SSS IDO — $3500\nCeloLaunch IDO — $3000\n12 Binance XMas #NFTs — $360 \nTOTAL PROFIT: $8500+\n\nJoin and earn with us https://t.co/fS30uj6SYx Sentiment: NEU Tweet: Stupid guy #2\nhttps://t.co/8yKzYjCYIl\n\n#NFT #NFTs #nftcollector #rarible https://t.co/O4V19gMmVk Sentiment: NEG
در ادامه میخواهیم ببینیم از هر گروه چه تعداد توییت موجود است و نتیجه را مانند زیر به تصویر درآوریم:
1# Let's count the number of tweets by sentiments
2sentiment_counts = df.groupby(['sentiment']).size()
3print(sentiment_counts)
4
5# Let's visualize the sentiments
6fig = plt.figure(figsize=(6,6), dpi=100)
7ax = plt.subplot(111)
8sentiment_counts.plot.pie(ax=ax, autopct='%1.1f%%', startangle=270, fontsize=12, label="")
همانطور که در نمودار زیر مشاهده میکنید، ۵۶ درصد توییتهایی که درباره NFT نوشته شده مثبت و تنها ۲ درصد منفی بوده است:
در آخر با استفاده از قطعه کد زیر، برای هر یک از سه گروه احساسی، «ابر برچسب» (Word Cloud) آن را ترسیم میکنیم:
1from wordcloud import WordCloud
2from wordcloud import STOPWORDS
3
4# Wordcloud with positive tweets
5positive_tweets = df['tweet'][df["sentiment"] == 'POS']
6stop_words = ["https", "co", "RT"] + list(STOPWORDS)
7positive_wordcloud = WordCloud(max_font_size=50, max_words=100, background_color="white", stopwords = stop_words).generate(str(positive_tweets))
8plt.figure()
9plt.title("Positive Tweets - Wordcloud")
10plt.imshow(positive_wordcloud, interpolation="bilinear")
11plt.axis("off")
12plt.show()
13
14# Wordcloud with negative tweets
15negative_tweets = df['tweet'][df["sentiment"] == 'NEG']
16stop_words = ["https", "co", "RT"] + list(STOPWORDS)
17negative_wordcloud = WordCloud(max_font_size=50, max_words=100, background_color="white", stopwords = stop_words).generate(str(negative_tweets))
18plt.figure()
19plt.title("Negative Tweets - Wordcloud")
20plt.imshow(negative_wordcloud, interpolation="bilinear")
21plt.axis("off")
22plt.show()
در تصویر زیر، ابر برچسب واژگان مرتبط با توییتهای مثبت را مشاهده میکنید. واژگانی همچون: Discord، Ethereum، Join، Mars4 و Shroom.
در مقابل، واژگان مربوط به توییتهای منفی را داریم. واژگانی مانند: cookies chaos، Solana و OpenseaNFT میشود.
در این آموزش یاد گرفتیم که چگونه تنها با چند خط کد پایتون، توییتهایی را جمعآوری کرده و با استفاده از تجزیه و تحلیل احساسات آنها را مورد بررسی قرار دهیم. همچنین در آخر و برای تحلیل دقیقتر، نتایج را در قالب چند ابر برچسب به تصویر کشیدیم.
چالشهای تجزیه و تحلیل احساسات
تجزیه و تحلیل احساسات یکی از دشوارترین وظایف پردازش زبان طبیعی یا همان NLP است؛ چرا که حتی انسانها نیز در تجزیه و تحلیل دقیق احساسات با چالش روبهرو هستند. با وجود اینکه دانشمندان علم داده توانستهاند مدلهایی با عملکرد بالا را ساخته و به اجرا بگذارند، همچنان راه درازی در پیش است. در فهرست زیر به تعدادی از چالشهای تجزیه و تحلیل مبتنی بر ماشین احساسات اشاره میکنیم:
- «ذهنیت و لحن» (Subjectivity and Tone)
- «محتوا و قطبیت» (Context and Polarity)
- «طعنه و کنایه» (Irony and Sarcasm)
- مقایسه
- «ایموجی» (Emoji)
- تعریف حس خنثی
- «دقت حاشیهنویسی انسانی» (Human Annotator Accuracy)
در ادامه این مطلب، هر یک از عنواین فهرست بالا را شرح میدهیم.
ذهنیت و لحن
متون مختلف به دو دسته «ذهنی» (Subjective) و «عینی» (Objective) تقسیم میشوند. متون عینی برخلاف متنون ذهنی، احساسات صریحی را شامل نمیشوند. فرض کنید میخواهید احساسات دو نمونه متن زیر را تجزیه و تحلیل کنید:
بستهبندی خوبی است.
بستهبندی قرمز است.
بیشتر افراد بر این باور هستند که جمله اول مثبت و جمله دوم خنثی است. نباید با تمامی گزارهها از جمله صفات، افعال و برخی اسمها، به شکل یکسانی رفتار کرد. در دو مثال بالا، واژه «خوب» از «قرمز» ذهنیتر است.
محتوا و قطبیت
هر سخنی در زمانی مشخص، توسط فردی و در محتوایی بیان شده است. تجزیه و تحلیل احساسات صرفنظر از محتوایی که در آن قرار دارند، کار بسیار دشواری است. با این حال اگر بهطور صریح اشاره نشود، ماشینها قادر به یادگیری محتوای متن نیستند. تغییر در قطبیت، یکی از مشکلاتی است که از محتوا سرچشمه میگیرد. به پاسخهای یک نظرسنجی که در بخش زیر آورده شده توجه کنید:
همه چیز.
با اطمینان هیچ چیز!
فرض کنید عبارات بالا دو پاسخی به این پرسش هستند: «چه چیزی را درباره رویداد برگزار شده دوست داشتید؟». پاسخ اول مثبت و دوم منفی برداشت میشود. حالا تصور کنید پرسش از این قرار است: «چه چیزی را درباره رویداد برگزار شده دوست نداشتید؟»؛ نفی به کار رفته در پرسش، بهطور کامل فرایند تجزیه و تحلیل احساسات را دگرگون میکند. اگر هدف، بررسی حداقل بخشی از محتوای متن تولید شده است، دو فرایند «پیشپردازش» (Pre-Processing) و «پسپردازش» (Post-Processing) باید اجرا شود. اگرچه نحوه اجرای فرایند پیشپردازش یا پسپردازش برای استخراج بخشهایی از متحوای مورد نظر کار راحتی نیست.
طعنه و کنایه
وقتی نوبت به طعنه و کنایه میرسد، افراد احساسات منفی خود را در قالب واژگان مثبت بیان میکنند؛ موضوعی که تشخیص صحیح آن، بدون داشتن درکی مناسب از موقعیت، برای ماشین دشوار است. به عنوان مثال دو عبارت زیر، پاسخی هستند به پرسش: «آیا از تجربه خرید خود لذت بردید؟»:
بدون شک. حرف نداشت!
نه یک بار، بلکه هزار بار!
از پاسخ اول و با توجه به علامت تعجب پایانی، میتوان حس منفی را برداشت کرد. اما مشکل اینجاست که عبارت «بدون شک» میتواند معنی مثبت یا خنثی داشته باشد و هیچگونه سرنخ متنی یا تردیدی برای مدل یادگیری ماشین وجود ندارد. در محتوای این پرسش، عبارت دوم پاسخ مثبتی است؛ اما نمونههای مختلفی را میتوان مثال زد که در آنها، همین پاسخ منفی برداشت شود.
مقایسه
چگونگی مقابله با مبحث مقایسه در تجزیه و تحلیل احساسات، یکی دیگر از چالشهایی است که باید به آن پرداخته شود. به عبارات زیر توجه کنید:
این محصول دومی ندارد.
این از ابزارهای قدیمی بهتر است.
از هیچی بهتر است.
مقایسه اول به هیچ نوع سرنخ متنی برای دستهبندی درست نیاز ندارد؛ مشخص است که حس مثبتی دارد. اما دستهبندی عبارت دوم و سوم کمی دشوارتر است. بهنظر شما این دو عبارت در کدام دسته قرار میگیرند؟ مثبت؟ خنثی؟ یا حتی منفی؟ محتوای متن بسیار نقش تعیینکنندهای دارد. به عنوان مثال اگر عبارت «ابزارهای قدیمی» در جمله دوم به معنی بیاستفاده و ناکارآمد در نظر گرفته شود، میتوان جمله دوم و سوم را در یک گروه قرار داد.
ایموجی
طبق تعریف، دو نوع ایموجی وجود دارد. «ایموجیهای غربی» (Western Emojis) مانند: :D که تنها با یک یا دو حرف کدگذاری شدهاند و «ایموجیهای شرقی» (Eastern Emojis) مانند: ¯ \ (ツ) / ¯ که ترکیب بلندتری از حروف خاص هستند. ایموجیها نقش مهمی را برای انتقال حس در متون مختلف، بهویژه گفتوگوهای موجود در شبکههای اجتماعی ایفا میکنند. هنگام اجرای فرایند تحلیل احساسات بر روی متون شبکههای اجتماعی، باید به دو سطح «حرف» (Character-Level) و «واژه» (Word-Level) توجه ویژه داشته باشید. همچنین ممکن است نیاز باشد فرایند پیشپردازش بسیاری نیز انجام شود. به عنوان مثال، شاید بخواهید پس از پیشپردازش محتوای یک شبکه اجتماعی، انواع ایموجیهای بهکار رفته را به «توکن» (Token) تبدیل و از آنها در فرایند دستهبندی، برای بهبود عملکرد استفاده کنید.
تعریف حس خنثی
نحوه تعریف حس خنثی، از دیگر چالشهایی است که برای اجرای دقیقتر تجزیه و تحلیل احساسات باید به بررسی آن بپردازیم. تعریف دستهها و گروهها در مسائل «دستهبندی» (Classification)، در این مورد دسته خنثی، از مهمترین چالشهای موجود است. هنگام آموزش مدلهای تحلیل احساسات، برداشت ما از خنثی، مثبت یا منفی از اهمیت بالایی برخوردار است. از آنجایی که شاخص برچسبگذاری دادهها باید ثابت باشد، تعریف مناسبی از مسئله امری حیاتی است. در فهرست زیر به چند ایده کاربردی برای شناسایی و تعریف متون خنثی اشاره میکنیم:
- متون عینی: متون به اصطلاح عینی احساسات صریحی را شامل نمیشوند؛ در نتیجه چنین متونی را باید در دسته خنثی قرار داد.
- اطلاعات نامرتبط: اگر برای جدا کردن اطلاعات نامرتبط، دادههای فرایند پیشپردازش روی دادهها صورت نگرفته باشد، میتوان متون را در دسته خنثی قرار داد. با این حال پیشنهاد میشود تنها زمانی این کار انجام شود که از تاثیرش بر عملکرد کلی آگاه باشیم. در مواردی ممکن است به مدل نویز اضافه کرده و در نتیجه از عملکرد آن کاسته شود.
- متون حاوی آرزو: عباراتی که شامل آرزوهایی همچون: «ای کاش محصول یکپارچگی بیشتری داشت» میشوند، بهطور معمول در دسته خنثی قرار میگیرند. با این حال دستهبندی عبارات مقایسهای مانند: «ای کاش محصول بهتری بود» کار دشواری است.
دقت حاشیهنویسی انسانی
همانطور که پیشتر هم به آن اشاره شد، تجزیه و تحلیل احساسات، برای انسانها نیز کار بسیار پیچیده و دشواری است. وقتی از دو نفر یا بیشتر خواسته شود تا برچسبگذاری متن مشترکی را انجام دهند، بهطور میانگین، احتمال پایینی دارد که برچسبهای مشابهی را انتخاب کنند. در نتیجه چون ماشینها از دادههای برچسبگذاری شده استفاده میکنند، این احتمال وجود دارد که مدلهای تجزیه و تحلیل احساسات، عملکرد به مراتب پایینتری نسبت به سیار مدلها از خود به نمایش بگذارند. اما در مجموع، تجزیه و تحلیل احساسات فرایندی ارزشمند است؛ حتی اگر در همه موارد عملکرد مناسبی نداشته باشد.
موارد کاربردی تجزیه و تحلیل احساسات
کاربردهای تجزیه و تحلیل احساسات فراوان و قابل استفاده در صنایع بسیاری از جمله مالی، خردهفروشی، گردشگری و تکنولوژی است. در فهرست زیر برخی از محبوبترین موارد کاربردی که در آنها از تحلیل احساسات بهرهبرداری میشود را ملاحظه میکنید:
- «پایش شبکههای اجتماعی» (Social Media Monitoring)
- «پایش برند» (Brand Monitoring)
- «صدای مشتری» (Voice of Customer | VoC)
- «خدمات مشتری» (Customer Service)
- «تحقیقات بازار» (Market Research)
در ادامه این مطلب، به بررسی مفصلتر کاربردهای عنوان شده در فهرست بالا میپردازیم.
پایش شبکه های اجتماعی
کسبوکارها با استفاده از تجزیه و تحلیل احساسات در شبکههای اجتماعی، درک بهتری از حس مشتریهای خود نسبت به موضوعات خاص پیدا کرده و میتوانند پیش از آنکه کنترل مشکلات از دسترس خارج شود، به مسائل رسیدگی کنند. تمامی برندها، با هر شکل و اندازهای، تعاملات معنیداری با کاربران و حتی رقبای خود در شبکههای اجتماعی دارند. از طریق پایش این مکالمات و در نتیجه با پیبردن به حس کاربر بهصورت بیدرنگ و با گذشت زمان، میتوان کاربران ناراضی را سریع شناسایی و به نیازهای آنها پاسخ داد.
مدتهاست اکثر واحدهای بازاریابی به همان اندازه که به مسئله «آگاهی از برند» (Brand Awareness) میپردازند، در شبکههای اجتماعی نیز مشغول پایش اطلاعات هستند. اما برای موفقیت بیشتر، نیاز است تا فراتر از اعداد رفته و بینش عمیقتری بهدست آورد.
پایش برند
امروزه نه تنها برندها به حجم بالایی اطلاعات در شبکههای اجتماعی دسترسی دارند، بلکه وبسایتها، وبلاگها، انجمنهای اینترنتی و بازخورد محصولات آنلاین نیز از دیگر موارد قابل استفاده موجود در اینترنت هستند. قابل ذکر است که در چنین مواردی، نه تنها کمیت، بلکه کیفیت محتوا نیز از اهمیت بالایی برخوردار است. پایش برند، به معنی تجزیه و تحلیل مکالمات موجود درباره برند و یا محصول خود، برای دستیابی به درکی عمیقتر از دیدگاه کاربران در فضای اینترنت است. بررسی مقالات خبری، وبلاگها و انجمنهای آنلاین برای ارزیابی احساسات و در ادامه هدف قرار دادن جامعه مخاطبی خاص، از جمله این فعالیتها است. در ادامه با دستهبندی خودکار بازخوردهای ضروری و سپس ارسال آنها برای تیمهای مربوطه، فرایند بررسی و مشکلزدایی آغاز میشود. کسبوکارها باید فراتر از آمار، احساس و عقاید مشتری را درک کنند و با بررسی روند تکامل شهرت برند، خود را با رقبای دیگر مقایسه کنند.
صدای مشتری
علاوهبر پایش برند، بررسی رویدادهای شبکههای اجتماعی و اطلاعات ارزشمند درباره احساسات مشتری، نظرسنجیها و پشتیبانی امور مشتریان از دیگر کاربردهای تجزیه و تحلیل احساسات است. تا پیش از این، تحلیل نظرسنجیهای تشریحی کار دشواری بود. با تجزیه و تحلیل احساسات میتوان پاسخهای نظرسنجیها را به سه کلاس مثب، خنثی یا منفی تقسیم و سپس از نتایج بهدست آمده در سیستمهای صدای مشتری یا به اصطلاح VoC استفاده کرد. برای آشنایی با عواطف و دیدگاه کاربران، تحلیل احساسات را بر انواع سیستمهای نظرسنجی و پشتیبانی امور مشتریان اعمال میکنیم. تجزیه و تحلیل بیدرنگ، سیستمهای صدای مشتری را متحول کرده و به ما کمک میکند تا درک عمیقتری از تجربه مشتری بهدست آوریم.
خدمات مشتری
تجربه مشتری درخشان است که در آن نرخ بازگشت مشتریها بالا باشد. شرکتهای بزرگ به خوبی میدانند که اگر اهمیت نحوه خدمترسانی بیشتر از محصول نهایی نباشد، کمتر هم نیست. مشتریها انتظار دارند تجربهشان با شرکتها سریع، تعاملی، شخصی و بدون دردسر باشد. در غیر اینصورت به سرویس دیگری مهاجرت میکنند. با استفاده از تحلیل احساسات و «دستهبندی متن» (Text Classification)، میتوان پیامهای پشتیبانی را بهصورت خودکار و بر اساس موضوع و میزان ضرورت طبقهبندی و به آنها رسیدگی کرد. همچنین از طریق تجزیه و تحلیل تعاملات کاربران با واحدهای پشتیبانی، میتوان از برخورد مناسب کارمندان با مشتریها و عدم اتلاف زمان اطمینان حاصل کرد.
تحقیقات بازار
تجزیه و تحلیل احساسات در هر زمینه از تحقیقات بازار گرفته تا تحلیل رقابتی موثر بوده است. چه بهدنبال کشف بازاری جدید باشید چه بخواهید جریانهای پرطرفدار (Trends) آینده را پیشبینی کنید، تجزیه و تحلیل احساسات به کمک شما میآید. میتوانید با مقایسه نظرات افراد در مورد محصولات خود، کیفیت کار را با رقبای دیگر مقایسه کنید. ممکن است رقیب شما محصولی جدید اما ناموفقی را به بازار معرفی کند. با بررسی جنبههای منفی آن محصول، میتوانید از اشتباهات یاد گرفته و کار خود را بهبود بخشید. بهطور دقیقتر، برند خود و همچنین رقابتی که در حوزه فعالیت شما در حال رخ دادن است را در شبکههای اجتماعی دنبال و بازارهای جدیدی که حدس میزنید در آنها موفق باشید را پیدا کنید.
سوالات متداول در زمینه تجزیه و تحلیل احساسات
حال که با جنبههای مختلف تجزیه و تحلیل احساسات آشنا شدیم و نمونههایی از آن را پیادهسازی کردیم، در این بخش از مطلب فرادرس، به سوالات متداول و مطرح در این حوزه پاسخ میدهیم.
چه زمان باید به سراغ استفاده از الگوریتمهای تجزیه و تحلیل احساسات برویم؟
شما با استفاده از تجزیه و تحلیل احساسات، میتوانید به دستهبندی متون خود پرداخته و دید بهتری از حوزه فعالیت خود پیدا کنید. همانطور که در این مطلب نیز به آن اشاره شد، الگوریتمهای تجزیه و تحلیل احساسات انواع مختلفی دارند و شما میتوانید مطابق با نیاز خود، یکی از سه روش قاعده-محور، خودکار و یا ترکیبی را انتخاب کنید.
آیا برای استفاده از سیستمهای تجزیه و تحلیل احساسات، باید خودمان دادهها را جمعآوری کنیم؟
خیر. جمعآوری دادهها بهصورت شخصی همیشه ارزشمند است و از آنجایی که بیش از همه با مسئله مورد نظر آشنایی داریم، بهطور معمول مناسبترین دادهها را نیز جمعآوری میکنیم. با این وجود، امروزه دیگر جمعآوری داده ضرورتی نداشته و میتوانید از دادههای رایگان و کاربردی موجود در اینترنت استفاده کنید.
چگونه میتوانیم تحلیل احساسات را در حوزه فعالیت خود پیادهسازی کنیم؟
گاهی اوقات پروژه شما شباهت بسیاری با سایر مسائل مطرح از پیش حل شده دارد. در چنین مواقعی بهتر است انواع مختلفی از مدلهای از پیش آموزش دیده موجود را پیدا کرده و از آنها استفاده کنید. همچنین در صورت پیدا نکردن مدلهای مشابه با پروژه مدنظر، همیشه این امکان وجود دارد که از همان مدلهای موجود برای تنظیم مجدد، اینبار با مجموعهدادههای دیگر بهره ببرید.
آیا سیستمهای تجزیه و تحلیل احساسات، از دقت کافی برای انجام وظایف حقیقی برخوردار هستند؟
تجزیه و تحلیل احساسات برای ما انسانها نیز فرایند پیچیده و دشواری است. از همینرو طبیعی است که سیستمهای تحلیل احساسات فعلی، با چالشهایی که کاملتر در مطلب به آنها اشاره شد مواجه باشند. با این حال و از آنجایی که روزبهروز به دقت این سیستمها افزوده میشود، بهکار گرفتن و آموزش دادن آنها بر روی دادههای خود همیشه مفید و ارزشمند است.
جمعبندی
در سالهای اخیر، تجزیه و تحلیل احساسات به موضوعی فراتر از یک فناوری دوردست تبدیل شده و بهزودی به عنوان ابزاری ضروری در دسترس شرکتهای بزرگ قرار میگیرد. در این مطلب از مجله فرادرس، پس از آشنایی با مفهوم تجزیه و تحلیل احساسات و انواع مختلف آن، یاد گرفتیم که چگونه میتوان با بهرهگیری از مجموعهدادههای موجود بهصورت رایگان، نمونههایی از این سیستمها را به سادگی پیادهسازی کرد. تحلیل احساسات، به ما این قابلیت را میدهد تا با نگرشی نو و درکی بهتر از نیازهای کاربر، تیمهای کارآمدتری تشکیل داده و در حوزه فعالیت خود پیشرفت چشمگیری را تجربه کنیم.