آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت
021-88146330
021-88146323
0

سبد خرید شما خالی است!

آموزشگاه برنامه نویسی تحلیل‌داده

با مجوز رسمی از سازمان فنی و حرفه‌ای کشور

ورود / ثبت‌نام

ورود کاربر جدید هستید؟ ثبت نام کنید

تحلیل احساسات نظرات کاربران با استفاده از یادگیری ماشین

احساسات نظرات کاربران با استفاده از یادگیری ماشین

شرح مختصر پروژه

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

توضیحات پروژه

مقدمه

یادگیری ماشین (Machine Learning) به یکی از مهم‌ترین و پرکاربردترین فناوری‌های هوش مصنوعی تبدیل شده است که در بسیاری از صنایع و حوزه‌ها مورد استفاده قرار می‌گیرد. پروژه‌های یادگیری ماشین به دلیل توانایی آنها در تحلیل داده‌ها، پیش‌بینی‌ها و تصمیم‌گیری‌ها، بسیار محبوب شده‌اند. در این مقاله، به بررسی یکی از پروژه‌های عملی یادگیری ماشین یعنی تحلیل احساسات نظرات کاربران فیلم‌ها می‌پردازیم. این پروژه می‌تواند به عنوان یک نمونه کاربردی در آموزش یادگیری ماشین مورد استفاده قرار گیرد.

مراحل پروژه ماشین لرنینگ

  1. جمع‌آوری و بارگذاری داده‌ها
  2. پیش‌پردازش داده‌ها
  3. استخراج ویژگی‌ها
  4. آموزش مدل
  5. ارزیابی مدل
  6. پیش‌بینی احساسات نظرات جدید
1. جمع‌آوری و بارگذاری داده‌ها

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

    import pandas as pd

# ایجاد داده‌های نمونه برای تحلیل احساسات
data = {
    'review': [
        "من واقعا این فیلم را دوست داشتم! بازیگری فوق‌العاده بود و داستان بسیار جذاب بود.",
        "این بدترین فیلمی بود که تا به حال دیده‌ام. کاملاً وقت تلف کردن بود.",
        "فیلم بدی نبود، نه خیلی عالی و نه خیلی بد.",
        "داستان فوق‌العاده و اجرای عالی بازیگران. شدیداً توصیه می‌کنم!",
        "من اصلاً از این فیلم لذت نبردم. داستان خیلی خسته‌کننده و قابل پیش‌بینی بود.",
        "فیلم لحظات خوبی داشت، اما در کل ناامید کننده بود.",
        "تصاویر شگفت‌انگیز و داستان جذاب. باید دید!",
        "فیلم خیلی کسل‌کننده و بی‌مزه بود.",
        "فیلم بسیار عالی با پیام قوی. بازیگران کار فوق‌العاده‌ای انجام دادند.",
        "من این فیلم را توصیه نمی‌کنم. عمق نداشت و ضعیف اجرا شده بود."
    ],
    'sentiment': [
        "positive",
        "negative",
        "neutral",
        "positive",
        "negative",
        "negative",
        "positive",
        "negative",
        "positive",
        "negative"
    ]
}

# ساخت DataFrame از داده‌ها
df = pd.DataFrame(data)

# ذخیره DataFrame به عنوان یک فایل Excel
file_path = "IMDB_Dataset_Farsi.xlsx"
df.to_excel(file_path, index=False)

2. پیش‌پردازش داده‌ها

برای پیش‌پردازش داده‌های متنی فارسی، از کتابخانه Hazm استفاده می‌کنیم. این کتابخانه شامل ابزارهایی برای نرمال‌سازی، توکن‌سازی، حذف کلمات توقف و ریشه‌یابی کلمات است.

    import re
from hazm import Normalizer, word_tokenize, Stemmer, stopwords_list

# بارگذاری مجموعه داده‌ها
df = pd.read_excel('IMDB_Dataset_Farsi.xlsx')

# نمایش چند نمونه از داده‌ها
print(df.head())

# پیش‌پردازش داده‌ها
normalizer = Normalizer()
stop_words = set(stopwords_list())
stemmer = Stemmer()

def preprocess_text_farsi(text):
    text = normalizer.normalize(text)
    words = word_tokenize(text)
    words = [stemmer.stem(word) for word in words if word not in stop_words]
    return ' '.join(words)

df['review'] = df['review'].apply(preprocess_text_farsi)
print(df.head())

3. استخراج ویژگی‌ها

برای استخراج ویژگی‌ها از داده‌های متنی، از تکنیک Bag of Words استفاده می‌کنیم. این تکنیک با استفاده از کتابخانه Scikit-learn پیاده‌سازی می‌شود.

from sklearn.feature_extraction.text import CountVectorizer

    vectorizer = CountVectorizer(max_features=5000)
    X = vectorizer.fit_transform(df['review']).toarray()
    y = df['sentiment'].apply(lambda x: 1 if x == 'positive' else 0)  # تبدیل برچسب‌ها به اعداد
    
4. آموزش مدل

مدل Naive Bayes برای طبقه‌بندی نظرات به مثبت و منفی آموزش داده می‌شود.

    from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB

# تقسیم داده‌ها به مجموعه‌های آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# آموزش مدل
model = MultinomialNB()
model.fit(X_train, y_train)

 
5. ارزیابی مدل

مدل با استفاده از معیارهای دقت، ماتریس درهم‌ریختگی و گزارش طبقه‌بندی ارزیابی می‌شود.

    from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# پیش‌بینی بر روی داده‌های تست
y_pred = model.predict(X_test)

# ارزیابی مدل
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

print(f'Accuracy: {accuracy}')
print('Confusion Matrix:')
print(conf_matrix)
print('Classification Report:')
print(class_report)

 
6. پیش‌بینی احساسات نظرات جدید

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

def predict_sentiment(review):
    review = preprocess_text_farsi(review)
    review_vector = vectorizer.transform([review]).toarray()
    sentiment = model.predict(review_vector)
    return 'مثبت' if sentiment[0] == 1 else 'منفی'

# متن‌های ورودی برای تست
test_reviews_farsi = [
    "من واقعا این فیلم را دوست داشتم! بازیگری فوق‌العاده بود و داستان بسیار جذاب بود.",
    "این بدترین فیلمی بود که تا به حال دیده‌ام. کاملاً وقت تلف کردن بود.",
    "فیلم بدی نبود، نه خیلی عالی و نه خیلی بد.",
    "داستان فوق‌العاده و اجرای عالی بازیگران. شدیداً توصیه می‌کنم!",
    "من اصلاً از این فیلم لذت نبردم. داستان خیلی خسته‌کننده و قابل پیش‌بینی بود.",
    "فیلم لحظات خوبی داشت، اما در کل ناامید کننده بود.",
    "تصاویر شگفت‌انگیز و داستان جذاب. باید دید!",
    "فیلم خیلی کسل‌کننده و بی‌مزه بود.",
    "فیلم بسیار عالی با پیام قوی. بازیگران کار فوق‌العاده‌ای انجام دادند.",
    "من این فیلم را توصیه نمی‌کنم. عمق نداشت و ضعیف اجرا شده بود."
]

# پیش‌بینی احساسات برای هر یک از متن‌های تست
for review in test_reviews_farsi:
    sentiment = predict_sentiment(review)
    print(f'نظر: {review}\nاحساس: {sentiment}\n')
خروجی پروژه:
    0  من واقعا این فیلم را دوست داشتم! بازیگری فوق‌ا...  positive
1  این بدترین فیلمی بود که تا به حال دیده‌ام. کام...  negative
2          فیلم بدی نبود، نه خیلی عالی و نه خیلی بد.   neutral
3  داستان فوق‌العاده و اجرای عالی بازیگران. شدیدا...  positive
4  من اصلاً از این فیلم لذت نبردم. داستان خیلی خس...  negative
                                            review sentiment
0  واقعا فیل دوس دا ! بازیگر فوق‌العاده داس جذاب .  positive
1                          بد فیلم دیده . وق تلف .  negative
2                                    فیل بد ، بد .   neutral
3       داس فوق‌العاده اجرا بازیگر . شدیدا توصیه !  positive
4      اصلا فیل لذ نبرد . داس خسته‌کننده پیش‌بین .  negative
Accuracy: 1.0
Confusion Matrix:
[[1 0]
 [0 1]]
Classification Report:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00         1
           1       1.00      1.00      1.00         1

    accuracy                           1.00         2
   macro avg       1.00      1.00      1.00         2
weighted avg       1.00      1.00      1.00         2

نظر: من واقعا این فیلم را دوست داشتم! بازیگری فوق‌العاده بود و داستان بسیار جذاب بود.
احساس: مثبت

نظر: این بدترین فیلمی بود که تا به حال دیده‌ام. کاملاً وقت تلف کردن بود.
احساس: منفی

نظر: فیلم بدی نبود، نه خیلی عالی و نه خیلی بد.
احساس: منفی

نظر: داستان فوق‌العاده و اجرای عالی بازیگران. شدیداً توصیه می‌کنم!
احساس: مثبت

نظر: من اصلاً از این فیلم لذت نبردم. داستان خیلی خسته‌کننده و قابل پیش‌بینی بود.
احساس: منفی

نظر: فیلم لحظات خوبی داشت، اما در کل ناامید کننده بود.
احساس: منفی

نظر: تصاویر شگفت‌انگیز و داستان جذاب. باید دید!
احساس: مثبت

نظر: فیلم خیلی کسل‌کننده و بی‌مزه بود.
احساس: منفی

نظر: فیلم بسیار عالی با پیام قوی. بازیگران کار فوق‌العاده‌ای انجام دادند.
احساس: مثبت

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

جدول اول شامل داده‌های ورودی اولیه نظرات کاربران به همراه برچسب‌های احساسی آنها است:

                                             review sentiment
    0  ...من واقعا این فیلم را دوست داشتم! بازیگری فوق‌ا  positive
    1  ...این بدترین فیلمی بود که تا به حال دیده‌ام. کام  negative
    2          فیلم بدی نبود، نه خیلی عالی و نه خیلی بد.   neutral
    3  ...داستان فوق‌العاده و اجرای عالی بازیگران. شدیدا  positive
    4  ...من اصلاً از این فیلم لذت نبردم. داستان خیلی خس  negative
    

جدول دوم نشان‌دهنده متن‌های پیش‌پردازش شده است:

    review sentiment
    0  واقعا فیل دوس دا ! بازیگر فوق‌العاده داس جذاب .  positive
    1                          بد فیلم دیده . وق تلف .  negative
    2                                    فیل بد ، بد .   neutral
    3       داس فوق‌العاده اجرا بازیگر . شدیدا توصیه !  positive
    4      اصلا فیل لذ نبرد . داس خسته‌کننده پیش‌بین .  negative
    
 
2. پیش‌پردازش داده‌ها

پیش‌پردازش داده‌ها شامل نرمال‌سازی، توکن‌سازی، حذف کلمات توقف و ریشه‌یابی کلمات است که متن‌های ورودی را ساده‌تر و تمیزتر می‌کند. در این مرحله، کلمات اضافی حذف می‌شوند و کلمات به ریشه‌های خود تبدیل می‌شوند تا مدل بتواند بهتر داده‌ها را تحلیل کند.

3. دقت مدل (Accuracy)

دقت مدل به صورت زیر گزارش شده است:

Accuracy: 1.0

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

4. ماتریس درهم‌ریختگی (Confusion Matrix)

ماتریس درهم‌ریختگی به شکل زیر است:

Confusion Matrix:
    [[1 0]
     [0 1]]
    

این ماتریس نشان می‌دهد که مدل هیچ خطایی در تشخیص نمونه‌ها نداشته است:

  • 1 نمونه مثبت به درستی تشخیص داده شده است (True Positive).
  • 1 نمونه منفی به درستی تشخیص داده شده است (True Negative).
5. گزارش طبقه‌بندی (Classification Report)

گزارش طبقه‌بندی به صورت زیر است:

Classification Report:
        precision    recall  f1-score   support

     0       1.00      1.00      1.00         1
     1       1.00      1.00      1.00         1

accuracy                           1.00         2
macro avg       1.00      1.00      1.00         2
weighted avg       1.00      1.00      1.00         2

این گزارش شامل معیارهای زیر است:

  • Precision: درصد نمونه‌های درست تشخیص داده شده از کل نمونه‌های تشخیص داده شده.
  • Recall: درصد نمونه‌های درست تشخیص داده شده از کل نمونه‌های واقعی.
  • F1-Score: میانگین هماهنگ Precision و Recall.
  • Support: عداد کل نمونه‌های هر دسته.
6. پیش‌بینی احساسات نظرات جدید

نتایج پیش‌بینی احساسات برای نظرات جدید به شرح زیر است:

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

نتیجه‌گیری

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

1403/02/26 45 1
رمز عبور : tahlildadeh.com یا www.tahlildade.com

نظرات شما

برای ارسال سوال لازم است، ابتدا وارد سایت شوید.