قد يبدو بناء نموذج تحليل المشاعر الخاص بك أمرًا شاقًا. يرشدك هذا الدليل خلال الخطوات للبدء.
تحليل المشاعر هو تقنية معالجة اللغة الطبيعية (NLP) التي تحدد الموقف وراء النص. يُعرف أيضًا باسم التنقيب عن الرأي. الهدف من تحليل المشاعر هو تحديد ما إذا كان نص معين يحتوي على مشاعر إيجابية أو سلبية أو محايدة. يتم استخدامه على نطاق واسع من قبل الشركات لتصنيف المشاعر تلقائيًا في مراجعات العملاء. يساعد تحليل كميات كبيرة من المراجعات في الحصول على رؤى قيمة حول تفضيلات العملاء.
تهيئة بيئتك
يجب أن تكون على دراية أساسيات بايثون للمتابعة عبر. انتقل إلى جوجل كولاب أو افتح دفتر Jupyter. ثم قم بإنشاء دفتر ملاحظات جديد. قم بتنفيذ الأمر التالي لتثبيت المكتبات المطلوبة في بيئتك.
يتوفر كود المصدر الكامل لهذا المشروع في هذا مستودع جيثب.
! نقطة تثبيت tensorflow scikit-Learn pandas numpy pickle5
ستستخدم NumPy و مكتبة الباندا لمعالجة مجموعة البيانات. TensorFlow لإنشاء وتدريب نموذج التعلم الآلي. Scikit-Learn لتقسيم مجموعة البيانات إلى مجموعات تدريب واختبار. أخيرًا ، ستستخدم pickle5 لتسلسل كائن الرمز المميز وحفظه.
استيراد المكتبات المطلوبة
قم باستيراد المكتبات الضرورية التي ستستخدمها في المعالجة المسبقة للبيانات وإنشاء النموذج.
يستورد حبيبي مثل np
يستورد الباندا مثل pd
يستورد تينسورفلو مثل تف
من sklearn.model_selection يستورد train_test_split
من المقاييس يستورد دقة_نقاط
من tensorflow.keras.preprocessing.text يستورد رمزية
من tensorflow.keras.preprocessing.sequence يستورد الوسادة المتتالية
من tensorflow.keras.models يستورد تسلسلي
من tensorflow.keras.layers يستورد التضمين ، Conv1D ، GlobalMaxPooling1D ، كثيف ، التسرب
يستورد مخلل 5 مثل ورطة
ستستخدم الفئات التي تستوردها من الوحدات لاحقًا في الكود.
تحميل مجموعة البيانات
هنا ، ستستخدم مجموعة بيانات Trip Advisor Hotel Reviews من Kaggle لبناء نموذج تحليل المشاعر.
df = pd.read_csv ("/content/tripadvisor_hotel_reviews.csv")
طباعة (df.head ())
قم بتحميل مجموعة البيانات واطبع صفوفها الخمسة الأولى. ستساعدك طباعة الصفوف الخمسة الأولى في التحقق من أسماء الأعمدة لمجموعة البيانات الخاصة بك. سيكون هذا أمرًا بالغ الأهمية عند المعالجة المسبقة لمجموعة البيانات.
تحتوي مجموعة بيانات Trip Advisor Hotel Reviews على عمود فهرس وعمود مراجعة وعمود تصنيف.
معالجة البيانات
حدد ملف مراجعة و تقييم أعمدة من مجموعة البيانات. قم بإنشاء عمود جديد بناءً على عمود التصنيف وقم بتسميته المشاعر. إذا كان التقييم أكبر من 3 ، فقم بتسمية المشاعر على أنها إيجابي. إذا كان التصنيف أقل من 3 ، فقم بتسميته كـ سلبي. إذا كان التصنيف هو 3 بالضبط ، فقم بتسميته كـ حيادي.
حدد فقط أعمدة المراجعة والمشاعر من مجموعة البيانات. قم بتبديل الصفوف عشوائيًا وإعادة تعيين فهرس إطار البيانات. يضمن التبديل وإعادة الضبط توزيع البيانات بشكل عشوائي ، وهو أمر ضروري للتدريب واختبار النموذج المناسبين.
df = df [['مراجعة', 'تقييم']]
مدافع ["عاطفة"] = مدافع ['تقييم'].يتقدم(لامدا س: 'إيجابي'لو x> 3
آخر'سلبي'لو س < 3
آخر'حيادي')
df = df [['مراجعة', "عاطفة"]]
df = df.sample (frac =1) .reset_index (قطرة =حقيقي)
تحويل ملف مراجعة نص إلى سلسلة من الأعداد الصحيحة باستخدام الرمز المميز. يؤدي ذلك إلى إنشاء قاموس للكلمات الفريدة الموجودة في نص المراجعة وتعيين كل كلمة إلى قيمة عدد صحيح فريد. استخدم ال الوسادة المتتالية وظيفة من Keras للتأكد من أن جميع تسلسلات المراجعة لها نفس الطول.
tokenizer = Tokenizer (num_words =5000، oov_token ='' )
tokenizer.fit_on_texts (مدافع ['مراجعة'])
word_index = tokenizer.word_index
التسلسلات = tokenizer.texts_to_sequences (df ['مراجعة'])
padded_sequences = pad_sequences (متواليات ، maxlen =100، اقتطاع ='بريد')
تحويل تسميات المشاعر إلى ترميز واحد ساخن.
sentiment_labels = pd.get_dummies (df ["عاطفة"]).قيم
يمثل الترميز الأحادي الساخن بيانات فئوية بتنسيق يسهل على نماذجك العمل معه.
تقسيم مجموعة البيانات إلى مجموعات تدريب واختبار
استخدم scikit-Learn لتقسيم مجموعة البيانات عشوائيًا إلى مجموعات تدريب واختبار. ستستخدم مجموعة التدريب لتدريب النموذج لتصنيف مشاعر المراجعات. وستستخدم مجموعة الاختبار للوصول إلى مدى جودة النموذج في تصنيف المراجعات الجديدة غير المرئية.
x_train ، x_test ، y_train ، y_test = train_test_split (padded_sequences، sentiment_labels، test_size =0.2)
حجم تقسيم مجموعة البيانات هو 0.2. هذا يعني أن 80٪ من البيانات ستقوم بتدريب النموذج. وستختبر نسبة 20٪ الباقية أداء النموذج.
إنشاء الشبكة العصبية
إنشاء الشبكة العصبية مع ست طبقات.
النموذج = تسلسلي ()
model.add (التضمين (5000, 100، input_length =100))
model.add (Conv1D (64, 5، التنشيط ="relu"))
model.add (GlobalMaxPooling1D ())
model.add (كثيف (32، التنشيط ="relu"))
model.add (التسرب (0.5))
model.add (كثيف (3، التنشيط ="سوفت ماكس"))
model.compile (محسن ="آدم"، خسارة ="categorical_crossentropy"، المقاييس = ['دقة'])
ملخص نموذج()
الطبقة الأولى من الشبكة العصبية هي طبقة التضمين. تتعلم هذه الطبقة التمثيل الكثيف للكلمات في المفردات. الطبقة الثانية عبارة عن طبقة Conv1D ذات 64 مرشحًا وحجم النواة 5. تقوم هذه الطبقة بإجراء عمليات الالتواء على تسلسلات الإدخال ، باستخدام نافذة منزلقة صغيرة بحجم 5.
تقلل الطبقة الثالثة تسلسل خرائط المعالم إلى متجه واحد. يأخذ القيمة القصوى على كل خريطة معالم. تقوم الطبقة الرابعة بإجراء تحويل خطي على متجه الإدخال. تحدد الطبقة الخامسة بشكل عشوائي جزءًا من وحدات الإدخال إلى 0 أثناء التدريب. هذا يساعد على منع فرط التجهيز. تقوم الطبقة الأخيرة بتحويل الإخراج إلى توزيع احتمالي على الفئات الثلاثة المحتملة: موجب ، ومحايد ، وسالب.
تدريب الشبكة العصبية
قم بملاءمة مجموعات التدريب والاختبار مع النموذج. تدريب النموذج لعشر فترات. يمكنك تغيير عدد الحقب حسب رغبتك.
model.fit (x_train ، y_train ، عهود =10، حجم_الدفعة =32، validation_data = (x_test، y_test))
بعد كل فترة ، يتم تقييم أداء النموذج في مجموعة الاختبار.
تقييم أداء النموذج المدرب
استخدم ال model.predict () طريقة للتنبؤ بتسميات المشاعر لمجموعة الاختبار. احسب درجة الدقة باستخدام دقة_نقاط () وظيفة من scikit-Learn.
y_pred = np.argmax (model.predict (x_test) ، محور =-1)
مطبعة("دقة:"، دقة_تسجيل (np.argmax (y_test ، محور =-1) ، y_pred))
دقة هذا النموذج حوالي 84٪.
حفظ النموذج
احفظ النموذج باستخدام ملف model.save () طريقة. استخدم Pickle لتسلسل وحفظ كائن tokenizer.
model.save ("sentiment_analysis_model.h5")
مع يفتح("tokenizer.pickle", "wb") مثل مقبض:
pickle.dump (رمز مميز ، مقبض ، بروتوكول = مخلل. HIGHEST_PROTOCOL)
سيقوم كائن الرمز المميز بترميز نص الإدخال الخاص بك وإعداده للتغذية إلى النموذج المدرب.
استخدام النموذج لتصنيف شعور النص الخاص بك
بعد إنشاء النموذج وحفظه ، يمكنك استخدامه لتصنيف شعور النص الخاص بك. أولاً ، قم بتحميل النموذج المحفوظ والرمز المميز.
# قم بتحميل النموذج المحفوظ والرمز المميز
يستورد كيراس
النموذج = keras.models.load_model ("sentiment_analysis_model.h5")
مع يفتح("tokenizer.pickle", 'rb') مثل مقبض:
tokenizer = pickle.load (مقبض)
حدد وظيفة للتنبؤ بمشاعر نص الإدخال.
defتوقع المشاعر(نص):
# رمز ولوح نص الإدخال
text_sequence = tokenizer.texts_to_sequences ([text])
text_sequence = pad_sequences (text_sequence، maxlen =100)
# قم بعمل تنبؤ باستخدام النموذج المدرب
توقع_النموذج = نموذج_تنبؤ (تسلسل_نص) [0]
لو np.argmax (المقدرة المتوقعة) == 0:
يعود'سلبي'
أليف np.argmax (المقدرة المتوقعة) == 1:
يعود'حيادي'
آخر:
يعود'إيجابي'
أخيرًا ، توقع النص الخاص بك.
text_input = "لقد أحببت إقامتي في هذا الفندق تمامًا. كان فريق العمل مذهلاً وكانت الغرفة رائعة! "
توقع_الشعور_المشاعر
طباعة (المشاعر المتوقعة)
المشاعر المتوقعة للمراجعة أعلاه هي كما يلي:
النموذج قادر على تصنيف مشاعر جميع المراجعات الثلاثة بشكل صحيح.
توقع المشاعر باستخدام نماذج مُدربة مسبقًا
في بعض الأحيان في التعلم الآلي ، قد تواجه تحديًا في العثور على مجموعة البيانات المناسبة. قد تفتقر أيضًا إلى الموارد اللازمة لإنشاء مجموعة البيانات الخاصة بك. هذا هو المكان الذي تأتي فيه النماذج المدربة مسبقًا. عليك أن تعرف كيفية استخدام API الخاص بهم وتركهم للتعامل مع الباقي.