برنامه نویسی

تجزیه و تحلیل داده‌های Reddit: بینش‌هایی از مدل‌های یادگیری ماشین

Summarize this content to 400 words in Persian Lang

مقدمه

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

جمع آوری و پیش پردازش داده ها

تجزیه و تحلیل ما با جمع آوری داده ها از هشت زیرگروه آغاز می شود: Python، DataScience، MachineLearning، DataAnalysis، Data Mining، Data، DataSets و DataCenter. ما از کتابخانه PRAW (Python Reddit API Wrapper) برای حذف نظرات از این subreddits استفاده کردیم.

در اینجا قطعه ای از کد مورد استفاده برای جمع آوری داده ها آمده است:

async def get_comments(subreddit_name, num_comments=2000):
subreddit = await reddit.subreddit(subreddit_name)
comments = [] async for comment in subreddit.comments(limit=num_comments):
comments.append({
“subreddit”: subreddit_name,
“comment_body”: comment.body,
“upvotes”: comment.score,
})
return comments

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از جمع آوری داده ها، چندین مرحله پیش پردازش را برای پاکسازی و آماده سازی متن برای تجزیه و تحلیل انجام دادیم:

حذف مقادیر از دست رفته و موارد تکراری
فیلتر کردن نظرات با کمتر از سه کلمه
توکن کردن متن
حذف کاراکترها و کلمات خاص با اعداد
تبدیل به حروف کوچک
حذف کلمات توقف
خلاصه کردن کلمات

در اینجا یک قطعه از عملکرد پیش پردازش آمده است:

def clean_text(text):
text = word_tokenize(text)
text = [re.sub(r”[^a-zA-Z0-9]+”, ‘ ‘, word) for word in text] text = [word for word in text if not any(c.isdigit() for c in word)] text = [word.lower() for word in text] text = [word for word in text if word not in stopwords.words(‘english’)] lemmatizer = WordNetLemmatizer()
text = [lemmatizer.lemmatize(word) for word in text] text = ‘ ‘.join(text)
text = re.sub(r'[^\w\s]’, ”, text)
words = [‘http’,’com’,’www’,’reddit’,’comment’,’comments’,’http’,’https’,’org’,’jpg’,’png’,’gif’,’jpeg’] text = ‘ ‘.join(word for word in text.split() if word not in words)
return text

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل داده های اکتشافی

توزیع نظر در میان زیرمجموعه ها

ما ابتدا توزیع نظرات را در زیر ردیت های مختلف بررسی کردیم:

print(df[‘subreddit’].value_counts())

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتایج نشان داد:

DataCenter 934
Python 859
DataMining 847
Data 803
DataScience 763
DataSets 763
MachineLearning 733
DataAnalysis 645

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

تجسم ابری ورد

برای دریافت یک نمای کلی سریع از متداول ترین کلمات در مجموعه داده ما، یک ابر کلمه ایجاد کردیم:

text = ” “.join(comment for comment in df.cleaned_comment)
wordcloud = WordCloud(width=800, height=400, background_color =’white’).generate(text)
plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolation=’bilinear’)
plt.axis(“off”)
plt.show()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کلمه ابر رایج ترین عبارات را در همه نظرات برجسته می کند و به ما نمایشی بصری از موضوعات و اصطلاحات غالب در مجموعه داده ما می دهد.

تحلیل احساسات

ما تجزیه و تحلیل احساسات را با استفاده از کتابخانه TextBlob انجام دادیم تا احساسات کلی نظرات را درک کنیم:

df[‘polarity’] = df[‘cleaned_comment’].apply(lambda x: TextBlob(x).sentiment.polarity)
df[‘sentiment’] = df[‘polarity’].apply(lambda x: ‘positive’ if x > 0 else ‘negative’ if x 0 else ‘neutral’)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس توزیع احساسات را تجسم کردیم:

plt.figure(figsize=(10, 6))
sns.histplot(df[‘polarity’], kde=True)
plt.title(‘Sentiment Distribution’)
plt.xlabel(‘Polarity’)
plt.ylabel(‘Count’)
plt.show()

plt.figure(figsize=(10, 6))
df[‘sentiment’].value_counts().plot.pie(autopct=’%1.1f%%’)
plt.title(‘Sentiment Distribution’)
plt.ylabel(”)
plt.show()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

مدل سازی موضوع

برای کشف موضوعات اصلی مورد بحث در این زیرگروه‌ها، ما از تخصیص دیریکله پنهان (LDA) برای مدل‌سازی موضوع استفاده کردیم:

lda_model = gensim.models.ldamodel.LdaModel(
corpus, num_topics=5, id2word=dictionary, passes=15
)

topics = lda_model.print_topics(num_words=5)
for topic in topics:
print(topic)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل LDA پنج موضوع اصلی را شناسایی کرد:

بحث و آداب عمومی (کلمات کلیدی: پست، لطفا، r، پیام، تشکر)
زیرساخت مرکز داده (کلمات کلیدی: خنک کننده، پاور، رک، آپدیت، سیستم)
تجزیه و تحلیل داده ها و ابزارها (کلمات کلیدی: داده، n، مانند، خواهد، دریافت)
کاربردهای علم داده (کلمات کلیدی: داده، n، استفاده، نیاز، نیاز)
عملیات مرکز داده (کلمات کلیدی: داده، قدرت، مرکز، دریافت، مانند)

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

تحلیل احساسات

برای به دست آوردن درک عمیق تر از محتوای احساسی نظرات، تجزیه و تحلیل احساسات را با استفاده از کتابخانه NRCLex انجام دادیم:

df[“emotions”] = df[“cleaned_comment”].apply(analyze_emotions)
emotion_df = df[“emotions”].apply(pd.Series).fillna(0)
df = pd.concat([df, emotion_df], axis=1)

emotion_totals = emotion_df.sum().sort_values(ascending=False)
plt.figure(figsize=(12, 8))
sns.barplot(x=emotion_totals.index, y=emotion_totals.values, palette=”viridis”)
plt.title(“Total Emotion Counts in Reddit Comments”)
plt.xlabel(“Emotion”)
plt.ylabel(“Count”)
plt.xticks(rotation=45)
plt.show()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل احساسات نشان داد که بیشترین احساسات در نظرات عبارتند از:

اعتماد کنید
پیش بینی
شادی
ترس
غم و اندوه

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

به نام Entity Recognition

برای شناسایی موجودیت های کلیدی ذکر شده در نظرات، با استفاده از کتابخانه spaCy، شناسایی نام نهاد (NER) را انجام دادیم:

def extract_entities(text):
doc = nlp(text)
entities = [(ent.text, ent.label_) for ent in doc.ents] return entities

df[“entities”] = df[“cleaned_comment”].apply(extract_entities)

entities_df = pd.DataFrame(all_entities, columns=[“Entity”, “Label”])
label_counts = entities_df[“Label”].value_counts()

plt.figure(figsize=(12, 6))
label_counts.plot(kind=”bar”, color=”skyblue”)
plt.title(“Distribution of Entity Labels”)
plt.xlabel(“Entity Label”)
plt.ylabel(“Count”)
plt.xticks(rotation=45)
plt.show()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل NER رایج ترین انواع موجودیت های ذکر شده در نظرات را برجسته می کند که شامل موارد زیر است:

سازمان ها (ORG)
افراد (PERSON)
محصولات (PRODUCT)
مکان ها (GPE)

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

مدل های طبقه بندی متن

برای پیش بینی subreddit یک نظر داده شده، چندین مدل یادگیری ماشین را پیاده سازی و مقایسه کردیم:

ماشین بردار پشتیبانی (SVM)
رگرسیون لجستیک
جنگل تصادفی
K-نزدیکترین همسایگان (KNN)
شبکه عصبی حافظه کوتاه مدت (LSTM).

در اینجا خلاصه ای از معیارهای عملکرد برای هر مدل آمده است:

Model Accuracy Precision Recall F1 Score ROC AUC
SVM 0.523622 0.533483 0.523622 0.525747 0.853577
Logistic Regression 0.541732 0.545137 0.541732 0.536176 0.857676
Random Forest 0.485039 0.488424 0.485039 0.477831 0.819124
KNN 0.230709 0.326545 0.230709 0.151028 0.720319
LSTM 0.483302 0.483103 0.483302 0.478265 NaN

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما عملکرد این مدل ها را تجسم کردیم:

plt.figure(figsize=(12, 6))
plt.plot(models, accuracies, marker=”o”, label=”Accuracy”)
plt.plot(models, precisions, marker=”.”, label=”Precision”)
plt.plot(models, recalls, marker=”.”, label=”Recall”)
plt.plot(models, f1_scores, marker=”.”, label=”F1 Score”)
plt.plot(models, roc_auc_scores, marker=”.”, label=”ROC AUC”)
plt.title(“Model Comparison”)
plt.xlabel(“Model”)
plt.ylabel(“Score”)
plt.legend()
plt.xticks(rotation=45)
plt.show()

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تحلیل عملکرد مدل

رگرسیون لجستیک با بالاترین دقت (54.17٪)، دقت (54.51٪)، یادآوری (54.17٪)، و امتیاز F1 (53.62٪) بهترین عملکرد را در کل انجام داد. همچنین دارای بالاترین امتیاز ROC AUC (0.8577) بود که نشان دهنده توانایی تشخیص خوب است.
SVM با معیارهای عملکرد بسیار شبیه به رگرسیون لجستیک، در رده دوم قرار گرفت. این نشان می دهد که هر دو مدل خطی (رگرسیون لجستیک و SVM) برای این کار طبقه بندی متن مناسب هستند.
جنگل تصادفی عملکرد کمی بدتر از مدل های خطی داشت اما همچنان به نتایج معقولی دست یافت. عملکرد پایین تر آن ممکن است نشان دهد که رویکرد مبتنی بر درخت تصمیم در مقایسه با مدل های خطی برای گرفتن تفاوت های ظریف در داده های متنی کمتر موثر است.
را LSTM مدل از نظر دقت، دقت، یادآوری و امتیاز F1 عملکرد قابل مقایسه ای با Random Forest نشان داد. با این حال، به دلیل محدودیت در اجرا، نتوانستیم امتیاز ROC AUC آن را محاسبه کنیم.
KNN در تمام معیارها به طور قابل توجهی بدتر از سایر مدل ها عمل کرد. این عملکرد ضعیف نشان می دهد که رویکرد نزدیکترین همسایه ممکن است برای داده های متنی با ابعاد بالا مناسب نباشد.

عملکرد نسبتاً نزدیک مدل‌های مختلف (به جز KNN) نشان می‌دهد که کار پیش‌بینی subreddits بر اساس محتوای نظرات چالش برانگیز است. این می‌تواند به دلیل همپوشانی موضوعات در زیر ردیت‌های مختلف یا وجود بحث‌های کلی باشد که مختص هیچ subreddit خاصی نیست.

نتیجه گیری

تجزیه و تحلیل ما از نظرات Reddit از subreddit های مرتبط با فناوری، بینش های ارزشمندی را در مورد ماهیت بحث ها در این جوامع آنلاین ارائه کرده است:

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

این یافته ها بینش های ارزشمندی را برای مدیران جامعه، دانشمندان داده و محققان علاقه مند به درک پویایی بحث های مرتبط با فناوری در Reddit ارائه می دهد. کار آینده می‌تواند تکنیک‌های پیشرفته‌تر پردازش زبان طبیعی، مانند مدل‌های مبتنی بر ترانسفورماتور مانند BERT را بررسی کند تا به طور بالقوه عملکرد طبقه‌بندی را بهبود بخشد و بینش‌های ظریف‌تری را از داده‌های متن استخراج کند.

GitHub Repo با تمام کدها و تجزیه و تحلیل دقیقلینک Github Repo

مقدمه

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

جمع آوری و پیش پردازش داده ها

تجزیه و تحلیل ما با جمع آوری داده ها از هشت زیرگروه آغاز می شود: Python، DataScience، MachineLearning، DataAnalysis، Data Mining، Data، DataSets و DataCenter. ما از کتابخانه PRAW (Python Reddit API Wrapper) برای حذف نظرات از این subreddits استفاده کردیم.

در اینجا قطعه ای از کد مورد استفاده برای جمع آوری داده ها آمده است:

async def get_comments(subreddit_name, num_comments=2000):
    subreddit = await reddit.subreddit(subreddit_name)
    comments = []
    async for comment in subreddit.comments(limit=num_comments):
        comments.append({
            "subreddit": subreddit_name,
            "comment_body": comment.body,
            "upvotes": comment.score,
        })
    return comments
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از جمع آوری داده ها، چندین مرحله پیش پردازش را برای پاکسازی و آماده سازی متن برای تجزیه و تحلیل انجام دادیم:

  1. حذف مقادیر از دست رفته و موارد تکراری
  2. فیلتر کردن نظرات با کمتر از سه کلمه
  3. توکن کردن متن
  4. حذف کاراکترها و کلمات خاص با اعداد
  5. تبدیل به حروف کوچک
  6. حذف کلمات توقف
  7. خلاصه کردن کلمات

در اینجا یک قطعه از عملکرد پیش پردازش آمده است:

def clean_text(text):
    text = word_tokenize(text)
    text = [re.sub(r"[^a-zA-Z0-9]+", ' ', word) for word in text]
    text = [word for word in text if not any(c.isdigit() for c in word)]
    text = [word.lower() for word in text]
    text = [word for word in text if word not in stopwords.words('english')]
    lemmatizer = WordNetLemmatizer()
    text = [lemmatizer.lemmatize(word) for word in text]
    text = ' '.join(text)
    text = re.sub(r'[^\w\s]', '', text)
    words = ['http','com','www','reddit','comment','comments','http','https','org','jpg','png','gif','jpeg']
    text = ' '.join(word for word in text.split() if word not in words)
    return text
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل داده های اکتشافی

توزیع نظر در میان زیرمجموعه ها

ما ابتدا توزیع نظرات را در زیر ردیت های مختلف بررسی کردیم:

print(df['subreddit'].value_counts())
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتایج نشان داد:

DataCenter        934
Python            859
DataMining        847
Data              803
DataScience       763
DataSets          763
MachineLearning   733
DataAnalysis      645
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

تجسم ابری ورد

برای دریافت یک نمای کلی سریع از متداول ترین کلمات در مجموعه داده ما، یک ابر کلمه ایجاد کردیم:

text = " ".join(comment for comment in df.cleaned_comment)
wordcloud = WordCloud(width=800, height=400, background_color ='white').generate(text)
plt.figure(figsize=(10, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تصویر WordCloud

کلمه ابر رایج ترین عبارات را در همه نظرات برجسته می کند و به ما نمایشی بصری از موضوعات و اصطلاحات غالب در مجموعه داده ما می دهد.

تحلیل احساسات

ما تجزیه و تحلیل احساسات را با استفاده از کتابخانه TextBlob انجام دادیم تا احساسات کلی نظرات را درک کنیم:

df['polarity'] = df['cleaned_comment'].apply(lambda x: TextBlob(x).sentiment.polarity)
df['sentiment'] = df['polarity'].apply(lambda x: 'positive' if x > 0 else 'negative' if x  0 else 'neutral')
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس توزیع احساسات را تجسم کردیم:

plt.figure(figsize=(10, 6))
sns.histplot(df['polarity'], kde=True)
plt.title('Sentiment Distribution')
plt.xlabel('Polarity')
plt.ylabel('Count')
plt.show()

plt.figure(figsize=(10, 6))
df['sentiment'].value_counts().plot.pie(autopct='%1.1f%%')
plt.title('Sentiment Distribution')
plt.ylabel('')
plt.show()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل قطبیت احساسات

توزیع احساسات

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

مدل سازی موضوع

برای کشف موضوعات اصلی مورد بحث در این زیرگروه‌ها، ما از تخصیص دیریکله پنهان (LDA) برای مدل‌سازی موضوع استفاده کردیم:

lda_model = gensim.models.ldamodel.LdaModel(
    corpus, num_topics=5, id2word=dictionary, passes=15
)

topics = lda_model.print_topics(num_words=5)
for topic in topics:
    print(topic)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مدل LDA پنج موضوع اصلی را شناسایی کرد:

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

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

تحلیل احساسات

برای به دست آوردن درک عمیق تر از محتوای احساسی نظرات، تجزیه و تحلیل احساسات را با استفاده از کتابخانه NRCLex انجام دادیم:

df["emotions"] = df["cleaned_comment"].apply(analyze_emotions)
emotion_df = df["emotions"].apply(pd.Series).fillna(0)
df = pd.concat([df, emotion_df], axis=1)

emotion_totals = emotion_df.sum().sort_values(ascending=False)
plt.figure(figsize=(12, 8))
sns.barplot(x=emotion_totals.index, y=emotion_totals.values, palette="viridis")
plt.title("Total Emotion Counts in Reddit Comments")
plt.xlabel("Emotion")
plt.ylabel("Count")
plt.xticks(rotation=45)
plt.show()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تحلیل عاطفی

تجزیه و تحلیل احساسات نشان داد که بیشترین احساسات در نظرات عبارتند از:

  1. اعتماد کنید
  2. پیش بینی
  3. شادی
  4. ترس
  5. غم و اندوه

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

به نام Entity Recognition

برای شناسایی موجودیت های کلیدی ذکر شده در نظرات، با استفاده از کتابخانه spaCy، شناسایی نام نهاد (NER) را انجام دادیم:

def extract_entities(text):
    doc = nlp(text)
    entities = [(ent.text, ent.label_) for ent in doc.ents]
    return entities

df["entities"] = df["cleaned_comment"].apply(extract_entities)

entities_df = pd.DataFrame(all_entities, columns=["Entity", "Label"])
label_counts = entities_df["Label"].value_counts()

plt.figure(figsize=(12, 6))
label_counts.plot(kind="bar", color="skyblue")
plt.title("Distribution of Entity Labels")
plt.xlabel("Entity Label")
plt.ylabel("Count")
plt.xticks(rotation=45)
plt.show()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تصویر NER

تجزیه و تحلیل NER رایج ترین انواع موجودیت های ذکر شده در نظرات را برجسته می کند که شامل موارد زیر است:

  1. سازمان ها (ORG)
  2. افراد (PERSON)
  3. محصولات (PRODUCT)
  4. مکان ها (GPE)

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

مدل های طبقه بندی متن

برای پیش بینی subreddit یک نظر داده شده، چندین مدل یادگیری ماشین را پیاده سازی و مقایسه کردیم:

  1. ماشین بردار پشتیبانی (SVM)
  2. رگرسیون لجستیک
  3. جنگل تصادفی
  4. K-نزدیکترین همسایگان (KNN)
  5. شبکه عصبی حافظه کوتاه مدت (LSTM).

در اینجا خلاصه ای از معیارهای عملکرد برای هر مدل آمده است:

Model                 Accuracy  Precision  Recall    F1 Score  ROC AUC
SVM                   0.523622  0.533483   0.523622  0.525747  0.853577
Logistic Regression   0.541732  0.545137   0.541732  0.536176  0.857676
Random Forest         0.485039  0.488424   0.485039  0.477831  0.819124
KNN                   0.230709  0.326545   0.230709  0.151028  0.720319
LSTM                  0.483302  0.483103   0.483302  0.478265  NaN
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما عملکرد این مدل ها را تجسم کردیم:

plt.figure(figsize=(12, 6))
plt.plot(models, accuracies, marker="o", label="Accuracy")
plt.plot(models, precisions, marker=".", label="Precision")
plt.plot(models, recalls, marker=".", label="Recall")
plt.plot(models, f1_scores, marker=".", label="F1 Score")
plt.plot(models, roc_auc_scores, marker=".", label="ROC AUC")
plt.title("Model Comparison")
plt.xlabel("Model")
plt.ylabel("Score")
plt.legend()
plt.xticks(rotation=45)
plt.show()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مقایسه مدل

تحلیل عملکرد مدل

  1. رگرسیون لجستیک با بالاترین دقت (54.17٪)، دقت (54.51٪)، یادآوری (54.17٪)، و امتیاز F1 (53.62٪) بهترین عملکرد را در کل انجام داد. همچنین دارای بالاترین امتیاز ROC AUC (0.8577) بود که نشان دهنده توانایی تشخیص خوب است.

  2. SVM با معیارهای عملکرد بسیار شبیه به رگرسیون لجستیک، در رده دوم قرار گرفت. این نشان می دهد که هر دو مدل خطی (رگرسیون لجستیک و SVM) برای این کار طبقه بندی متن مناسب هستند.

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

  4. را LSTM مدل از نظر دقت، دقت، یادآوری و امتیاز F1 عملکرد قابل مقایسه ای با Random Forest نشان داد. با این حال، به دلیل محدودیت در اجرا، نتوانستیم امتیاز ROC AUC آن را محاسبه کنیم.

  5. KNN در تمام معیارها به طور قابل توجهی بدتر از سایر مدل ها عمل کرد. این عملکرد ضعیف نشان می دهد که رویکرد نزدیکترین همسایه ممکن است برای داده های متنی با ابعاد بالا مناسب نباشد.

عملکرد نسبتاً نزدیک مدل‌های مختلف (به جز KNN) نشان می‌دهد که کار پیش‌بینی subreddits بر اساس محتوای نظرات چالش برانگیز است. این می‌تواند به دلیل همپوشانی موضوعات در زیر ردیت‌های مختلف یا وجود بحث‌های کلی باشد که مختص هیچ subreddit خاصی نیست.

نتیجه گیری

تجزیه و تحلیل ما از نظرات Reddit از subreddit های مرتبط با فناوری، بینش های ارزشمندی را در مورد ماهیت بحث ها در این جوامع آنلاین ارائه کرده است:

  1. احساسات و عواطف: احساسات کلی خنثی تا اندکی مثبت است و اعتماد و انتظار احساسات غالب هستند. این نشان می دهد که یک فضای کلی سازنده و آینده نگر در این بحث های متمرکز بر فناوری وجود دارد.

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

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

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

این یافته ها بینش های ارزشمندی را برای مدیران جامعه، دانشمندان داده و محققان علاقه مند به درک پویایی بحث های مرتبط با فناوری در Reddit ارائه می دهد. کار آینده می‌تواند تکنیک‌های پیشرفته‌تر پردازش زبان طبیعی، مانند مدل‌های مبتنی بر ترانسفورماتور مانند BERT را بررسی کند تا به طور بالقوه عملکرد طبقه‌بندی را بهبود بخشد و بینش‌های ظریف‌تری را از داده‌های متن استخراج کند.

GitHub Repo با تمام کدها و تجزیه و تحلیل دقیق
لینک Github Repo

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا