6 مهر 1402
تهران، خیابان آزادی، تقاطع قریب
برنامه نویسی نرم افزار

تجزیه و تحلیل احساسات با ابزار تشخیص کلامی Python و AssemblyAI

تجزیه و تحلیل احساسات در پایتون

برای مقاله‌ امروز، تصمیم بر این گرفتم که نگاهی جدید  و متفاوت به امکان تشخیص گفتار داشته باشم. اخیرا درباره یک تکنیک یادگیری ماشین (Machine Learning) جالب به نام تجزیه و تحلیل احساسات، چیزهایی شنیدم. از این تکنیک برای تعیین لحن یک بلوک متن (مثبت، منفی و خنثی)، یا ریکورد صوتی یک متن خواندنی استفاده می‌شود. اگر تا به حال درباره تجزیه و تحلیل احساسات چیزی نشنیده‌اید، من هم مانند شما قبل از این که در برخی از اسناد به آن‌ها برخورد کنم، چیزی درباره آن نشنیده بودم. به همین دلیل احساس کردم که این تکنیک ارزش امتحان کردن را دارد. با این حال، تجزیه و تحلیل احساسات می‌تواند بسیار پیچیده باشد. همان‌طور که در ادامه خواهیم خواند، خوشبختانه AssemblyAI استفاده از آن را بسیار آسان می‌کند.

برای این که دیگر به کپی کردن پروژه‌های دیگران نپردازم، تصمیم گرفتم از نُت‌کارت‌ها و تدوین ویدئوکلیپ فاصله بگیرم و به سمت یک پروژه جدید بروم. زمانی که در حال آموختن کاربرد تجزیه و تحلیل احساسات بودم، اولین چیزی که به ذهنم رسید خواندن کامنت‌ها و سیستم ستاره دهی بود؛ اما گاهی اوقات این سیستم می‌تواند گمراه کننده باشد. چرا که افرادی وجود دارند که به محصولات عالی ستاره‌های پایینی می‌دهند یا افراد دیگری هستند که برای محصولات بد از ستاره‌های متوسط استفاده می‌کنند. یادگیری ماشین برای تجزیه و تحلیل احساسات می‌تواند بسیار دشوار باشد، زیرا عوامل چالش‌برانگیز زیادی وجود دارند که باید در نظر گرفته شوند. با این حال، با استفاده از رابط برنامه‌نویسی اپلیکیشنی (API) که داشتم، ساخت یک پروژه‌ برای تجزیه و تحلیل احساسات بسیار ساده‌تر بود؛ زیرا مجبور نبودم از صفر شروع کنم.

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

تجزیه و تحلیل احساسات چیست؟

تجزیه و تحلیل احساسات شاخه‌ی دیگری از یادگیری ماشین است که برای تعیین مضمون و لحن مثبت، منفی یا خنثای یک جمله یا بلوک متن استفاده می‌شود. این نوع تحلیل با استخراج متنی از ری‌اکت‌هایی که حامل احساسات اجتماعی درباره یک بلوک متنی هستند، نتیجه‌گیری می‌کند. اگرچه هدف آن یافتن قطبیت متن (مثبت، منفی یا خنثی) است، اما تجزیه و تحلیل احساسات همچنین سعی در رمزگشایی احساسات زیرمتنی مانند شادی، غم یا خشم نیز دارد. این تکنیک بدین منظور از الگوریتم‌های مختلف NPL (پردازش زبان طبیعی) استفاده می‌کند.

3 نوع مختلف تجزیه و تحلیل احساسات

یکی از انواع تجزیه و تحلیل احساسات، تشخیص احساسات به شیوه واژگانی است که برای تعیین احساسات زیرمتنی مانند شادی، خشم، غم و … استفاده می‌شود.

نوع دیگر تجزیه وتحلیل چندزبانه است که به دنبال لحن مثبت، منفی یا خنثای متن در زبان‌های مختلف است. این روش یکی از پیچیده‌ترین وچالش‌برانگیزترین راه‌های تحلیل احساسات است.

نوع سوم، تجزیه و تحلیل مبتنی بر یک جنبه خاص است که بر همان متمرکز می‌شود. به عنوان مثال، ویژگی‌های یک تلفن همراه می‌تواند شامل قدرت باتری، کیفیت دوربین و غیره باشد.

آخرین نوع از این تکنیک که به آن اشاره می‌کنیم، تجزیه و تحلیل احساسات دانه‌ریز است که قطبیت متن را در مقیاس خاصی درجه‌بندی می‌کند. به عنوان مثال، سیستم رتبه‌بندی ستاره‌ای، تعیین می‌کند که آیا یک بلوک متن قطبیتی بسیار مثبت دارد (5 ستاره)، خنثی است (3 ستاره)، یا قطبیتی بسیار منفی دارد. (1 ستاره) 2 ستاره و 4 ستاره بودنش نیز تا حد کمتری مثبت یا منفی بودنش را نشان می‌دهد.

3 رویکرد مختلف در تجزیه و تحلیل احساسات

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

رویکرد دوم برای تجزیه و تحلیل احساسات، استفاده از یک رویکرد اتوماتیک است. این رویکرد در تکنیک یادگیری ماشین با استفاده از تجزیه و تحلیل پیش‌بینی‌گرایانه کاربرد بیشتری دارد.

سپس، رویکرد اتوماتیک کلمات را استخراج می‌کند. همچنین می‌توانید این دو رویکرد را با هم ترکیب و از هر دوی آن‌ها استفاده کنید که سرعت کار شما را نیز افزایش می‌‌دهد.

استفاده از تجزیه و تحلیل احساسات

تجزیه و تحلیل احساسات برای ساختاربندی داده‌ها به شیوه‌ای کارآمد و مقرون به صرفه استفاده می‌شود. همچنین، این تکنیک برای حل فوری مسائل یا برنامه‌ریزی فوری کارهایی که باید انجام شود نیز مورد استفاده قرار می‌گیرد. با این حال، چالش‌هایی نیز در این کار وجود دارد. یکی از چالش‌ها مقایسه یک عبارت خنثی است؛ زیرا ممکنی است اشتباهاً در دسته بندی مثبت یا منفی قرار بگیرد و به یادگیری ماشین قوی‌تر، و با تمرین و درک بیشتر احتیاج داشته باشد.

چالش بعدی دشوار بودن تعیین لحن است. ممکن است نویسنده متن خوشبین یا بدبین باشد. علاوه بر این، تشخیص نظرات کنایه آمیزنیز دشوار است. در نهایت این ابزار می‌بایست واکنش‌های تصویری مردم با استفاده از ایموجی یا استیکر را نیز تجزیه و تحلیل و خوب یا بد بودن آن‌ها را تشخیص دهد.

چرا باید از تجزیه و تحلیل احساسات استفاده کنیم؟

ممکن است دلایل زیادی وجود داشته باشند که بخواهید برای آن‌ها از تجزیه و تحلیل احساسات استفاده کنید، اما اجازه دهید تنها چند مورد را پوشش دهیم. یکی از این دلایل، نظارت بر رسانه‌های اجتماعی است. بدین وسیله می‌توان نظرات مردم درباره محصولات، خدمات یا مشاغل را ارزیابی کرد.

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

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

یکی دیگر از کاربردهای تجزیه و تحلیل احساسات، پشتیبانی از مشتری است. این کاربرد از تجزیه و تحلیل احساسات به منظور جلوگیری از ترتیب‌بندی تصادفی تیکت‌های ارسالی از سمت مشتریان، و استفاده از رویکردهای مختلف ترتیب بندی بر اساس نظر منفی، تکرر نظرات مشابه یا غیره مورد استفاده می‌گیرد. 

تجزیه و تحلیل احساسات نباید تنها به شرکت یا محصول خودتان محدود شود. از این ابزار برای تحقیق درباره رقبا یا فضای کلی بازار نیز می‌توان استفاده کرد. اگر شرکت رقیب نظرات مثبتی برای محصولات یا اقدامات خاصی دریافت می‌کند، این می‌تواند نشانه‌ای برای انجام یک حرکت مشابه از سمت شما باشد. به همین ترتیب، اگر مردم نسبت به محصولات خاصی که شما در حال تحقیق درباره آن‌ها هستید واکنشی شدیداً منفی نشان می‌دهند، نشانگر این است که تولید آن محصول می‌تواند حامل ریسک یک ضرر بزرگ برای شما باشد.

اکنون که کمی‌ بیشتر در مورد چرایی استفاده از تجزیه و تحلیل اطلاعات می‌دانیم، وقت آن است که نمونه‌ای از آن را نشان دهیم.

تجزیه و تحلیل احساسات با ابزار تشخیص کلامی در رابط برنامه نویسی اپلیکیشن‌ Python و AssemblyAI

نسخه دمو

کدنویسی یک برنامه بر محوریت یادگیری ماشین برای انجام فرایند تجزیه و تحلیل احساسات، کاری نیست که افراد مبتدی بتوانند آن را انجام دهند. خوشبختانه با استفاده از ابزار تشخیص کلام در رابط برنامه نویسی اپلیکیشن‌ AssemblyAl، راه آسان تری برای ما وجود دارد.

برای شروع، باید فایلی به نام speak_to_text.py ایجاد کنیم. این فایل شامل یک کلاس با تمام توابع اولیه مورد نیاز ما است. مانند همیشه، اولین تابع، تابع initializer است. دومین کاری که برای آپلود فایل باید انجام دهیم، ایجاد یک نقطه پایان (endpoint) برای آپلود در AssemblyAI است.

سپس، تابعی برای ارسال فایل صوتی وجود دارد. در JSON برای این تابع، گزینه‌ای را اضافه می‌کنیم که به پاسخ “sentiment_analysis” ما اجازه می‌دهد به صورت دیفالت بر روی گزینه true قرار بگیرد. پس از این، تابع get_text، رونوشت را پیدا کرده و پاسخ را برمی‌گرداند.

در نهایت تابع upload_file از __read_file استفاده می کند که آن را در آخر اعلام می‌کنیم. تابع __read_file فایل را به آسانی باز می کند و آن را به صورت تکه‌تکه می‌خواند. کد نهایی به شکل زیر خواهد بود:

				
					class speech_to_text:
   """
   """
 
   def __init__(self, api_key):
       self.endpoint = "https://api.assemblyai.com/v2/"
       self.header = {
           "authorization": api_key
       }
 
   def upload_file(self, file):
       response = requests.post(f"{self.endpoint}upload", headers=self.header, data=self.__read_file(file))
       return response.json()
 
   def submit_audio(self, uploaded_file):
       self.header["content-type"] = "application/json"
 
       json = {
           "audio_url": uploaded_file,
           "punctuate": True,
           "format_text": True,
           "auto_chapters": True,
           "sentiment_analysis": True
       }
 
       url = f"{self.endpoint}transcript"
      
       response = requests.post(url, json=json, headers=self.header)
 
       return response.json()
 
   def get_text(self, transcript_id):
       url = f"{self.endpoint}transcript/{transcript_id}"
 
       response = requests.get(url, headers=self.header)
 
       return response.json()
 
 
   def __read_file(self, filename, chunk_size=5242880):
       print(filename)
       with open(filename, 'rb') as file:
           while True:
               data = file.read(chunk_size)
               if not data:
                   break
               yield data

				
			

دومین فایلی که نیاز داریم آن را تست کنیم، فایل کلاسی است که به تازگی ساخته‌ایم. در این فایل، باید فایل کلاس، فایل تاریخچه کتابخانه، کلاسی که برای کلید API از آن استفاده می‌کنیم و هر تابعی که می‌خواهیم آپلود کنیم را ارسال و نسخه متنی آن را دریافت کنیم. همچنین قبل از چاپ نتایج بررسی می‌کنیم که خطایی وجود نداشته باشد:

				
					from speech_to_text import *
import time
 
file = "<PATH_TO_FILE>"
 
converter = speech_to_text("<YOUR_API_KEY>")
 
upload = converter.upload_file(file)
 
video_file = converter.submit_audio(upload["upload_url"])
 
time.sleep(30)
 
analysis = converter.get_text(video_file["id"])
 
if analysis["status"] != "error":
   print(analysis)
else:
   print("Error getting sentiment analysis.")

				
			

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

				
					'sentiment_analysis_results': [{'text': "Hey guys, what's up?", 'start': 790, 'end': 1542, 'sentiment': 'NEUTRAL', 'confidence': 0.7341238260269165,
				
			

نتیجه گیری نهایی

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

Leave feedback about this

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
X