با ضریب نفوذ جهانی از 58.4٪، رسانه های اجتماعی انبوهی از نظرات، ایده ها و بحث ها را ارائه می دهند که روزانه به اشتراک گذاشته می شوند. این داده ها بینش های غنی را در مورد مهم ترین و محبوب ترین موضوعات مکالمه در بین کاربران ارائه می دهد.
در بازاریابی، تجزیه و تحلیل رسانه های اجتماعی می تواند به شرکت ها کمک کند تا رفتار مصرف کننده را درک کنند و از آنها استفاده کنند. دو روش رایج و عملی عبارتند از:
- مدل سازی موضوع، که به این سوال پاسخ می دهد: “کاربران در مورد چه موضوعاتی صحبت می کنند؟”
- تحلیل احساسات، که به این سوال پاسخ می دهد: “کاربران چقدر مثبت یا منفی در مورد یک موضوع صحبت می کنند؟”
در این مقاله، ما از Python برای تجزیه و تحلیل دادههای رسانههای اجتماعی استفاده میکنیم و نحوه جمعآوری اطلاعات حیاتی بازار، استخراج بازخورد عملی و شناسایی ویژگیهای محصولی که برای مشتریان مهم هستند را نشان میدهیم.
برای اثبات سودمندی تجزیه و تحلیل رسانه های اجتماعی، بیایید تجزیه و تحلیل محصول ساعت های هوشمند مختلف را با استفاده از داده های Reddit و Python انجام دهیم. پایتون یک انتخاب قوی برای پروژههای علم داده است و کتابخانههای زیادی را ارائه میدهد که اجرای مدلهای یادگیری ماشین (ML) و پردازش زبان طبیعی (NLP) را که ما استفاده خواهیم کرد، تسهیل میکنند.
این تجزیه و تحلیل از دادههای Reddit (برخلاف دادههای توییتر، فیسبوک یا اینستاگرام) استفاده میکند، زیرا Reddit دومین پلتفرم رسانه اجتماعی مورد اعتماد برای اخبار و اطلاعات است. به گزارش موسسه مطبوعات آمریکا. علاوه بر این، سازمان فرعی Reddit «subreddits» را تولید می کند که در آن کاربران محصولات خاصی را توصیه و انتقاد می کنند. ساختار آن برای تجزیه و تحلیل داده های محصول محور ایده آل است.
ابتدا ما از تجزیه و تحلیل احساسات برای مقایسه نظرات کاربران در مورد مارک های محبوب ساعت های هوشمند استفاده می کنیم تا کشف کنیم که کدام محصولات بیشتر مورد توجه قرار می گیرند. سپس، از مدلسازی موضوع برای محدود کردن ویژگیهای ساعت هوشمند خاص که کاربران اغلب در مورد آن بحث میکنند، استفاده میکنیم. اگرچه مثال ما خاص است، اما می توانید همان تحلیل را برای هر محصول یا خدمات دیگری اعمال کنید.
آماده سازی داده های نمونه Reddit
مجموعه دادههای این مثال شامل عنوان پست، متن پست، و متن تمام نظرات برای 100 پست اخیری است که در ساب ردیت r/smartwatch ایجاد شده است. مجموعه داده ما حاوی 100 بحث کامل درباره محصول، از جمله تجربیات کاربران، توصیههای مربوط به محصولات و مزایا و معایب آنها است.
برای جمع آوری این اطلاعات از Reddit، ما استفاده خواهیم کرد حقوق، Python Reddit API Wrapper. ابتدا یک شناسه مشتری و رمز مخفی در Reddit با استفاده از راهنمای OAuth2. در مرحله بعد، آموزش های رسمی PRAW را دنبال کنید دانلود نظرات پست و دریافت URL های پست.
تجزیه و تحلیل احساسات: شناسایی محصولات پیشرو
برای شناسایی محصولات پیشرو، میتوانیم نظرات مثبت و منفی کاربران در مورد برندهای خاص را با اعمال تحلیل احساسات در مجموعه متنی خود بررسی کنیم. مدلهای تحلیل احساسات ابزارهای NLP هستند که متون را بر اساس کلمات و عباراتشان به عنوان مثبت یا منفی دستهبندی میکنند. طیف گسترده ای از مدل های ممکن وجود دارد، از شمارنده ساده کلمات مثبت و منفی تا شبکه های عصبی عمیق.
ما استفاده خواهیم کرد VADER به عنوان مثال، زیرا برای بهینه سازی نتایج برای متون کوتاه از شبکه های اجتماعی با استفاده از واژگان و الگوریتم های مبتنی بر قانون طراحی شده است. به عبارت دیگر، VADER در مجموعه داده هایی مانند آنچه که ما در حال تجزیه و تحلیل هستیم، عملکرد خوبی دارد.
از نوت بوک Python ML مورد نظر خود (به عنوان مثال Jupyter) برای تجزیه و تحلیل این مجموعه داده استفاده کنید. ما VADER را با استفاده از pip نصب می کنیم:
pip install vaderSentiment
ابتدا، سه ستون جدید به مجموعه دادههای خود اضافه میکنیم: مقادیر احساسات ترکیبی برای عنوان پست، متن پست و متن نظر. برای انجام این کار، روی هر متن تکرار کنید و VADER را اعمال کنید polarity_scores
روشی که یک رشته را به عنوان ورودی می گیرد و یک فرهنگ لغت را با چهار امتیاز برمی گرداند: مثبت، منفی، خنثی و مرکب.
برای اهداف خود، ما فقط از نمره مرکب استفاده خواهیم کرد – احساسات کلی بر اساس سه نمره اول، که در یک مقیاس نرمال شده از 1- تا 1 شامل رتبه بندی شده است، که در آن -1 منفی ترین و 1 مثبت ترین است. برای توصیف احساس یک متن با یک مقدار عددی واحد:
# Import VADER and pandas
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
import pandas as pd
analyzer = SentimentIntensityAnalyzer()
# Load data
data = pd.read_json("./sample_data/data.json", lines=True)
# Initialize lists to store sentiment values
title_compound = []
text_compound = []
comment_text_compound = []
for title,text,comment_text in zip(data.Title, data.Text, data.Comment_text):
title_compound.append(analyzer.polarity_scores(title)["compound"])
text_compound.append(analyzer.polarity_scores(text)["compound"])
comment_text_compound.append(analyzer.polarity_scores(comment_text["compound"])
# Add the new columns with the sentiment
data["title_compound"] = title_compound
data["text_compound"] = text_compound
data["comment_text_compound"] = comment_text_compound
در مرحله بعد، می خواهیم متون را بر اساس محصول و برند فهرست کنیم. این به ما امکان می دهد تا نمرات احساسات مرتبط با ساعت های هوشمند خاص را تعیین کنیم. برای انجام این کار، لیستی از خطوط محصولی را که میخواهیم آنالیز کنیم تعیین میکنیم، سپس بررسی میکنیم که کدام محصولات در هر متن ذکر شده است:
list_of_products = ["samsung", "apple", "xiaomi", "huawei", "amazfit", "oneplus"]
for column in ["Title","Text","Comment_text"]:
for product in list_of_products:
l = []
for text in data[column]:
l.append(product in text.lower())
data["{}_{}".format(column,product)] = l
در برخی متون خاص ممکن است چندین محصول ذکر شود (به عنوان مثال، یک نظر ممکن است دو ساعت هوشمند را با هم مقایسه کند). ما می توانیم به یکی از دو روش ادامه دهیم:
- ما می توانیم آن متون را کنار بگذاریم.
- ما می توانیم آن متون را با استفاده از تکنیک های NLP تقسیم کنیم. (در این صورت قسمتی از متن را به هر محصول اختصاص می دهیم.)
به خاطر وضوح و سادگی کد، تحلیل ما آن متون را کنار می گذارد.
نتایج تحلیل احساسات
اکنون میتوانیم دادههای خود را بررسی کرده و میانگین احساسات مرتبط با برندهای مختلف ساعت هوشمند را که توسط کاربران بیان میشود، تعیین کنیم:
for product in list_of_products:
mean = pd.concat([data[data["Title_{}".format(product)]].title_compound,
data[data["Text_{}".format(product)]].text_compound,
data[data["Comment_text_{}".format(product)]].comment_text_compound]).mean()
print("{}: {})".format(product,mean))
ما نتایج زیر را مشاهده می کنیم:
ساعت هوشمند |
سامسونگ |
سیب |
شیائومی |
هواوی |
آمازفیت |
وان پلاس |
---|---|---|---|---|---|---|
امتیاز ترکیب احساسات (متوسط) |
0.4939 |
0.5349 |
0.6462 |
0.4304 |
0.3978 |
0.8413 |
تجزیه و تحلیل ما اطلاعات ارزشمند بازار را نشان می دهد. به عنوان مثال، کاربران مجموعه داده ما نسبت به ساعت هوشمند OnePlus نسبت به سایر ساعت های هوشمند احساسات مثبت تری دارند.
فراتر از در نظر گرفتن احساسات متوسط، کسب و کارها باید عوامل مؤثر بر این امتیازات را نیز در نظر بگیرند: کاربران چه چیزی را در مورد هر برند دوست دارند یا از آن متنفرند؟ ما میتوانیم از مدلسازی موضوع برای غوطهور شدن عمیقتر در تحلیلهای موجود و تولید بازخورد عملی در مورد محصولات و خدمات استفاده کنیم.
مدلسازی موضوع: یافتن ویژگیهای مهم محصول
مدلسازی موضوع شاخهای از NLP است که از مدلهای ML برای توصیف ریاضی آنچه یک متن در مورد آن است استفاده میکند. ما دامنه بحث خود را به رویکردهای مدلسازی مبحث NLP کلاسیک محدود میکنیم، اگرچه پیشرفتهای اخیر با استفاده از ترانسفورماتورها، مانند موضوع.
الگوریتمهای مدلسازی موضوعی زیادی وجود دارد، از جمله فاکتورسازی ماتریس غیر منفی (NMF)، تجزیه و تحلیل اجزای اصلی پراکنده (PCA پراکنده)، و تخصیص دیریکله نهفته (LDA). این مدل های ML از یک ماتریس به عنوان ورودی استفاده می کنند و سپس ابعاد داده ها را کاهش می دهند. ساختار ماتریس ورودی به گونه ای است که:
- هر ستون نشان دهنده یک کلمه است.
- هر ردیف نشان دهنده یک متن است.
- هر سلول نشان دهنده بسامد هر کلمه در هر متن است.
اینها همه مدل های بدون نظارت هستند که می توانند برای تجزیه موضوع استفاده شوند. مدل NMF معمولاً برای تجزیه و تحلیل رسانه های اجتماعی استفاده می شود، و مدلی است که ما برای مثال خود استفاده خواهیم کرد، زیرا به ما امکان می دهد نتایج به راحتی قابل تفسیر به دست آوریم. یک ماتریس خروجی تولید می کند که:
- هر ستون نشان دهنده یک موضوع است.
- هر ردیف نشان دهنده یک متن است.
- هر سلول نشان دهنده درجه ای است که یک متن در مورد یک موضوع خاص بحث می کند.
گردش کار ما این فرآیند را دنبال می کند:
ابتدا، مدل NMF خود را برای تجزیه و تحلیل موضوعات عمومی مورد علاقه اعمال می کنیم و سپس موضوعات مثبت و منفی را محدود می کنیم.
تجزیه و تحلیل موضوعات عمومی مورد علاقه
ما به موضوعات مربوط به ساعت هوشمند OnePlus نگاه خواهیم کرد، زیرا بالاترین امتیاز احساسات ترکیبی را داشت. بیایید بسته های مورد نیاز را وارد کنیم که دارای عملکرد NMF و مشترک هستند کلمات را متوقف کنید برای فیلتر کردن از متن ما:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.decomposition import NMF
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
حال، بیایید یک لیست با مجموعه متن هایی که استفاده خواهیم کرد ایجاد کنیم. ما از کتابخانه ML با یادگیری scikit استفاده می کنیم CountVectorizer
و TfidfTransformer
توابعی برای تولید ماتریس ورودی ما:
product = "oneplus"
corpus = pd.concat([data[data["Title_{}".format(product)]].Title,
data[data["Text_{}".format(product)]].Text,
data[data["Comment_text_{}".format(product)]].Comment_text]).tolist()
count_vect = CountVectorizer(stop_words=stopwords.words('english'), lowercase=True)
x_counts = count_vect.fit_transform(corpus)
feature_names = count_vect.get_feature_names_out()
tfidf_transformer = TfidfTransformer()
x_tfidf = tfidf_transformer.fit_transform(x_counts)
(به جزئیات مربوط به جابجایی توجه کنید n-گرم – یعنی املای جایگزین و استفاده از جمله “یک بعلاوه” – را می توان در مقاله قبلی من در مورد مدل سازی موضوع پیدا کرد.)
ما آماده ایم مدل NMF را اعمال کنیم و موضوعات پنهان را در داده های خود پیدا کنیم. مانند سایر روشهای کاهش ابعاد، NMF نیاز دارد که تعداد کل موضوعات به عنوان یک پارامتر تنظیم شود.dimension
). در اینجا، ما یک کاهش ابعاد 10 مبحثی را برای سادگی انتخاب می کنیم، اما می توانید مقادیر مختلف را آزمایش کنید تا ببینید چه تعداد از موضوعات بهترین نتیجه یادگیری بدون نظارت را به همراه دارد. تنظیم را امتحان کنید dimension
برای به حداکثر رساندن معیارهایی مانند ضریب سیلوئت یا روش آرنج. ما همچنین یک را تنظیم کردیم حالت تصادفی برای تکرارپذیری:
import numpy as np
dimension = 10
nmf = NMF(n_components = dimension, random_state = 42)
nmf_array = nmf.fit_transform(x_tfidf)
components = [nmf.components_[i] for i in range(len(nmf.components_))]
features = count_vect.get_feature_names_out()
important_words = [sorted(features, key = lambda x: components[j][np.where(features==x)], reverse = True) for j in range(len(components))]
important_words
شامل فهرستی از کلمات است که در آن هر فهرست نشان دهنده یک موضوع است و کلمات بر اساس اهمیت در یک موضوع مرتب شده اند. این شامل ترکیبی از موضوعات معنادار و “زباله” است. این یک نتیجه رایج در مدلسازی موضوع است، زیرا برای الگوریتم دشوار است که همه متون را با موفقیت در چند موضوع دستهبندی کند.
بررسی important_words
در خروجی، متوجه عناوین معنیداری در مورد کلماتی مانند «بودجه» یا «شارژ» میشویم، که به ویژگیهایی اشاره میکند که هنگام بحث درباره ساعتهای هوشمند OnePlus برای کاربران اهمیت دارند:
['charge', 'battery', 'watch', 'best', 'range', 'days', 'life', 'android', 'bet', 'connectivity']
['budget', 'price', 'euros', 'buying', 'purchase', 'quality', 'tag', 'worth', 'smartwatch', '100']
از آنجایی که تجزیه و تحلیل احساسات ما امتیاز ترکیبی بالایی را برای OnePlus ایجاد کرد، ممکن است فرض کنیم که این بدان معناست که هزینه کمتر یا عمر باتری بهتری در مقایسه با سایر برندها دارد. با این حال، در این مرحله، ما نمی دانیم که آیا کاربران این عوامل را مثبت یا منفی می بینند، بنابراین بیایید یک تجزیه و تحلیل عمیق انجام دهیم تا پاسخ های ملموس را دریافت کنیم.
تحلیل موضوعات مثبت و منفی
تحلیل دقیقتر ما از همان مفاهیمی استفاده میکند که تحلیل کلی ما بهطور جداگانه برای متون مثبت و منفی اعمال میشود. ما کشف خواهیم کرد که کاربران هنگام صحبت مثبت یا منفی در مورد یک محصول به کدام عوامل اشاره می کنند.
بیایید این کار را برای ساعت هوشمند سامسونگ انجام دهیم. ما از خط لوله یکسانی استفاده خواهیم کرد اما با مجموعه متفاوت:
- ما فهرستی از متون مثبت ایجاد می کنیم که دارای امتیاز ترکیبی بیشتر از 0.8 هستند.
- ما فهرستی از متون منفی ایجاد می کنیم که دارای امتیاز ترکیبی کمتر از 0 هستند.
این اعداد برای انتخاب 20 درصد برتر نمرات متن های مثبت (> 0.8) و 20 درصد امتیازات برتر متن های منفی (<0) انتخاب شده اند و قوی ترین نتایج را برای تجزیه و تحلیل احساسات ساعت هوشمند ما ایجاد می کنند:
# First the negative texts.
product = "samsung"
corpus_negative = pd.concat([data[(data["Title_{}".format(product)]) & (data.title_compound < 0)].Title,
data[(data["Text_{}".format(product)]) & (data.text_compound < 0)].Text,
data[(data["Comment_text_{}".format(product)]) & (data.comment_text_compound < 0)].Comment_text]).tolist()
# Now the positive texts.
corpus_positive = pd.concat([data[(data["Title_{}".format(product)]) & (data.title_compound > 0.8)].Title,
data[(data["Text_{}".format(product)]) & (data.text_compound > 0.8)].Text,
data[(data["Comment_text_{}".format(product)]) & (data.comment_text_compound > 0.8)].Comment_text]).tolist()
print(corpus_negative)
print(corpus_positive)
میتوانیم همان روش مدلسازی موضوعی را که برای موضوعات عمومی مورد علاقه استفاده کردیم، تکرار کنیم تا موضوعات مثبت و منفی را آشکار کنیم. نتایج ما اکنون اطلاعات بازاریابی بسیار خاص تری را ارائه می دهد: به عنوان مثال، خروجی بدنه منفی مدل ما شامل موضوعی در مورد دقت کالری سوزانده شده است، در حالی که خروجی مثبت در مورد ناوبری/GPS و شاخص های سلامتی مانند ضربان نبض و سطح اکسیژن خون است. در نهایت، ما بازخورد قابلتوجهی در مورد جنبههایی از ساعت هوشمند که کاربران دوست دارند و مناطقی که محصول در آن جا برای بهبود دارد، داریم.
wordcloud
کتابخانه
برای تقویت یافته های داده های خود، توصیه می کنم ایجاد یک ابر کلمه یا تجسم مشابه دیگری از موضوعات مهم شناسایی شده در آموزش ما.
از طریق تجزیه و تحلیل خود، ما درک می کنیم که کاربران در مورد محصول هدف و رقبای آن چه فکر می کنند، کاربران چه چیزی را در مورد مارک های برتر دوست دارند، و چه چیزی ممکن است برای طراحی بهتر محصول بهبود یابد. تجزیه و تحلیل داده های رسانه های اجتماعی عمومی به شما این امکان را می دهد که تصمیمات آگاهانه ای در مورد اولویت های تجاری بگیرید و رضایت کلی کاربر را افزایش دهید. برای بهبود کمپین های بازاریابی و طراحی محصول، تجزیه و تحلیل رسانه های اجتماعی را در چرخه محصول بعدی خود بگنجانید – زیرا گوش دادن همه چیز است.
ادامه مطلب در وبلاگ مهندسی تاپتال:
- داده کاوی برای تحلیل شبکه های اجتماعی پیش بینی کننده
- روشهای مجموعه: تکنیکهای زیبا برای تولید نتایج یادگیری ماشینی بهبودیافته
- شروع با TensorFlow: آموزش یادگیری ماشین
- یادگیری ماشین متخاصم: نحوه حمله و دفاع از مدلهای ML
تیم تحریریه وبلاگ مهندسی تاپتال از شما تشکر می کند دانیل روبیو برای بررسی نمونه کدها و سایر مطالب فنی ارائه شده در این مقاله.