القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

يوجد عامل تصفية للبريد العشوائي في كل منصة بريد إلكتروني أو مراسلة تقريبًا. يقوم المرشح بفحص كل بريد أو رسالة عند وصولها ويصنفها على أنها إما بريد عشوائي أو هام. يعرض صندوق الوارد الخاص بك تلك التي تقع تحت الهام. فهو يرفض الرسائل التي تندرج ضمن الرسائل غير المرغوب فيها أو يعرضها بشكل منفصل.

يمكنك إنشاء عامل تصفية البريد العشوائي الخاص بك باستخدام NLTK و regex و scikit-learn كمكتبات رئيسية. ستحتاج أيضًا إلى مجموعة بيانات لتدريب نموذجك.

فهم مجموعة البيانات الخاصة بك

"تصنيف البريد العشوائي لـ NLP الأساسي" متاح مجانًا مجموعة بيانات Kaggle. يحتوي على مزيج من البريد العشوائي ورسائل البريد الإلكتروني الخام. تتكون من 5796 صفا و 3 أعمدة.

ال فئة يشير العمود إلى ما إذا كانت الرسالة بريد عشوائي أو هام. الرقم واحد يمثل البريد العشوائي بينما يمثل الصفر لحم الخنزير. ال رسالة يحتوي العمود على البريد الخام الفعلي. ال اسم الملف الفئة معرف رسالة فريد.

تحضير بيئتك

للمتابعة ، يجب أن يكون لديك ملف

instagram viewer
الفهم الأساسي لبايثون والتعلم الآلي. يجب أن تكون مرتاحًا أيضًا في العمل مع جوجل كولاب أو دفتر Jupyter.

بالنسبة إلى Jupyter Notebook ، انتقل إلى المجلد الذي تريد أن يتواجد المشروع فيه. قم بإنشاء بيئة افتراضية جديدة وتشغيل Jupyter Notebook من هذا المجلد. لا يحتاج Google Colab إلى هذه الخطوة. قم بإنشاء دفتر ملاحظات جديد في Google Colab أو Jupyter Notebook.

شفرة المصدر الكاملة ومجموعة البيانات متوفرة في ملف مستودع جيثب.

قم بتشغيل الأمر السحري التالي لتثبيت المكتبات المطلوبة.

! pip install nltk scikit-learn regex numpy pandas

ستستخدم:

  • NLTK لـ معالجة اللغة الطبيعية (البرمجة اللغوية العصبية).
  • scikit-Learn لإنشاء نموذج التعلم الآلي.
  • regex للعمل مع التعبيرات العادية.
  • NumPy للعمل مع المصفوفات.
  • الباندا للتعامل مع مجموعة البيانات الخاصة بك.

مكتبات الاستيراد

قم باستيراد المكتبات التي قمت بتثبيتها في بيئتك. قم باستيراد مكتبة regex كـ re و scikit-learn مثل sklearn.

يستورد الباندا مثل pd
يستورد حبيبي مثل np
يستورد nltk
من nltk.stem يستورد WordNetLemmatizer
من nltk.corpus يستورد كلمات التوقف
يستورد يكرر
من sklearn.model_selection يستورد train_test_split
من المقاييس يستورد تصنيف_تقرير
من sklearn.feature_extraction.text يستورد CountVectorizer
من sklearn.feature_extraction.text يستورد TfidfVectorizer

ستستخدم وحدات WordNetLemmatizer و stopwords من NLTK للمعالجة المسبقة للرسائل الأولية في مجموعة البيانات. ستستخدم وحدات sklearn النمطية المستوردة أثناء بناء النموذج.

المعالجة المسبقة للبيانات

اتصل بوظيفة pandas read_csv لتحميل مجموعة البيانات. تأكد من تخزين مجموعة البيانات في نفس دليل مشروعك. اعرض الصفوف الخمسة الأولى من مجموعة البيانات للحصول على صورة مرئية لمجموعة البيانات.

df = pd.read_csv ("/ content / Spam Email النص الأولي لـ NLP.csv")
df.head ()

أفلت العمود FILE_NAME من مجموعة البيانات. إنها ليست ميزة مفيدة لتصنيف البريد العشوائي.

df.drop ('اسم الملف'، المحور =1، inplace =حقيقي)

تحقق من عدد رسائل البريد العشوائي والبريد العشوائي في مجموعة البيانات. سيساعدك هذا لاحقًا في تحديد كيفية تقسيم البيانات لتدريب النموذج واختباره.

مدافع. CATEGORY.value_counts ()

قم بتنزيل مجموعة كلمات الإيقاف من مكتبة NLTK. كلمات التوقف هي مجموعة من الكلمات الشائعة. المعالجة المسبقة تزيلها من الرسائل. قم بتحميل كلمات الإيقاف الإنجليزية وقم بتخزينها في متغير كلمة إيقاف.

nltk.download ('كلمات التوقف')
Stopword = nltk.corpus.stopwords.words ('إنجليزي')

قم بتنزيل WordNet متعدد اللغات المفتوح. إنها قاعدة بيانات معجمية للكلمات الإنجليزية ومعانيها الدلالية.

nltk.download ("omw-1.4")

قم بتنزيل ملف Wordnet. سوف تستخدمه لتصنيف النص. إنشاء كائن WordNetLemmatizer (). سوف تستخدم الكائن أثناء lemmatization. Lemmatization هي تقنية مستخدمة في البرمجة اللغوية العصبية لتقليل أشكال اشتقاق الكلمات إلى معنى القاموس.

على سبيل المثال: تقليل كلمة "cats" سيعطيك كلمة "cat". كلمة بعد lemmatization تصبح lemma.

nltk.download ("wordnet")
lemmatizer = WordNetLemmatizer ()

قم بإنشاء قائمة فارغة ستستخدمها لتخزين الرسائل المعالجة مسبقًا.

الجسم = []

قم بإنشاء حلقة for لمعالجة كل رسالة في عمود MESSAGE من مجموعة البيانات. قم بإزالة جميع الأحرف غير الأبجدية الرقمية. تحويل الرسالة إلى أحرف صغيرة. قسّم النص إلى كلمات. إزالة كلمات الإيقاف و lemmatize الكلمات. تحويل الكلمات مرة أخرى إلى جمل. قم بإلحاق الرسالة المعالجة مسبقًا بقائمة المجموعة.

ل أنا في النطاق (لين (مدافع)):
# إزالة جميع الأحرف غير الأبجدية الرقمية
message = re.sub ("[^ a-zA-Z0-9]", ' '، مدافع ['رسالة'][أنا])

# تحويل الرسالة إلى أحرف صغيرة
message = message.lower ()

# تقسيم الجملة الى كلمات للشفاء
message = message.split ()

# إزالة كلمات الإيقاف و lemmatizing
message = [lemmatizer.lemmatize (كلمة) ل كلمة في رسالة
لو كلمة لافي مجموعة (Stopwords.words ('إنجليزي'))]

# تحويل الكلمات مرة أخرى إلى جمل
رسالة = ' '.join (رسالة)

# إضافة الرسالة المجهزة مسبقًا إلى قائمة المجموعة
corpus.append (رسالة)

ستستغرق هذه الحلقة حوالي خمس دقائق للتشغيل. تستغرق خطوة إزالة الكلمات الموقوفة وإزالة اللماتة معظم الوقت. لقد قمت الآن بمعالجة بياناتك مسبقًا.

هندسة الميزات باستخدام نموذج حقيبة الكلمات مقابل تقنية TF-IDF

هندسة الميزات هي عملية تحويل ميزات البيانات الأولية إلى ميزات جديدة مناسبة لنماذج التعلم الآلي.

نموذج حقيبة الكلمات

يمثل نموذج كيس الكلمات البيانات النصية كتوزيع تكراري للكلمات الموجودة في المستند. هذا هو ببساطة عدد المرات التي تظهر فيها الكلمة في المستند.

استخدم فئة CountVectorizer من scikit-Learn لتحويل البيانات النصية إلى متجهات رقمية. قم بملاءمة مجموعة الرسائل المجهزة مسبقًا وقم بتحويلها إلى مصفوفة متفرقة.

# خذ أفضل 2500 ميزة 
السيرة الذاتية = CountVectorizer (max_features =2500، ngram_range = (1,3))
X = cv.fit_transform (جسم) .toarray ()
ص = مدافع ['فئة']

قسّم البيانات المحولة إلى مجموعات تدريب واختبار. استخدم عشرين بالمائة من البيانات للاختبار وثمانين بالمائة للتدريب.

x_train ، x_test ، y_train ، y_test = train_test_split (
X ، y ، test_size =0.20، random_state =1، طبقية = ص)

سيعمل نموذج حقيبة الكلمات على تصنيف الرسائل في مجموعة البيانات بشكل صحيح. لكنها لن تؤدي أداءً جيدًا في تصنيف رسائلك. لا يأخذ في الاعتبار المعنى الدلالي للرسائل. لتصنيف الرسائل في مجموعة البيانات فقط ، استخدم هذه التقنية.

تقنية TF-IDF

يعمل مصطلح تردد المستند المعكوس (TF-IDF) من خلال تعيين أوزان للكلمات في مستند بناءً على عدد مرات ظهورها. يعطي TF-IDF الكلمات التي تظهر بشكل متكرر في المستند ولكنها نادرة في وزن الجسم. يسمح هذا لخوارزميات التعلم الآلي بفهم معنى النص بشكل أفضل.

tf = TfidfVectorizer (ngram_range = (1,3) ، max_features =2500)
X = tf.fit_transform (جسم) .toarray ()

x_train ، x_test ، y_train ، y_test = train_test_split (
X ، y ، test_size =0.20، random_state =1، طبقية = ص)

لاستخراج المعنى الدلالي من الرسائل وتصنيف رسائلك الخاصة ، استخدم TF-IDF.

إنشاء النموذج الخاص بك وتدريبه

ابدأ بإنشاء نموذج Naive Bayes وتهيئته باستخدام فئة scikit-Learn MultinomialNB.

النموذج = MultinomialNB ()

قم بملاءمة بيانات التدريب ، مما يسمح للنموذج بالتدريب على مجموعة التدريب:

model.fit (x_train، y_train)

ثم قم بعمل تنبؤات حول مجموعات التدريب والاختبار باستخدام طريقة التنبؤ.

train_pred = model.predict (x_train)
test_pred = model.predict (x_test)

ستساعدك هذه التنبؤات على تقييم نموذجك.

تقييم النموذج

قم بتقييم أداء النموذج الخاص بك باستخدام دالة التصنيف من scikit-Learn. قم بتمرير تنبؤات مجموعة التدريب وتسميات مجموعة التدريب الفعلية كمدخلات. افعل نفس الشيء لمجموعة الاختبار.

طباعة (تقرير التصنيف (قطار_الربيع ، y_train))
طباعة (تصنيف_تقرير (test_pred ، y_test))

كلما زادت الدقة والتذكر والدقة لكلا الفئتين كان النموذج أفضل.

نتائج تصنيف الرسائل الخاصة بك

حول الرسالة إلى ناقل باستخدام تقنية TF-IDF. استخدم النموذج لتوقع ما إذا كانت الرسالة غير مرغوب فيها أو هامشية ، ثم اعرض هذا التنبؤ على الشاشة.

مطبعة("توقع ...")

الرسالة = ["ربحت 10000 دولار ، يرجى تقديم حسابك
التفاصيل ، حتى نتمكن من تحويل الأموال"]

message_vector = tf.transform (رسالة)
الفئة = model.predict (message_vector)
مطبعة("الرسالة", "رسائل إلكترونية مزعجة"لو فئة == 1آخر"ليس بريدا موذيا")

استبدل الرسالة برسالتك.

الإخراج كالتالي:

يمكن للنموذج تصنيف الرسائل الجديدة غير المرئية كبريد عشوائي أو هام.

التحدي الذي يواجه تصنيف البريد العشوائي في التطبيقات

التحدي الرئيسي الذي يواجه تصنيف الرسائل الاقتحامية في التطبيقات هو سوء تصنيف الرسائل. نماذج التعلم الآلي ليست صحيحة دائمًا. قد يصنفون البريد العشوائي على أنه لحم خنزير والعكس صحيح. في حالة تصنيف هام كرسالة غير مرغوب فيها ، قد يقوم أحد البرامج بإزالة البريد الإلكتروني من صندوق الوارد الخاص بالمستخدم ، مما يؤدي إلى تفويت الرسائل المهمة.