Обмен сообщениями по электронной почте стал очень важной частью нашей повседневной деятельности. Скорее всего, вы столкнулись с некоторыми странными электронными письмами в своем ящике для нежелательной почты или спама. Большинство почтовых клиентов, таких как GMAIL, помимо других методов обнаружения спама используют машинное обучение. После обнаружения оно попадает в папку «Нежелательная почта».

Мы собираемся увидеть, как создать систему обнаружения спама в электронной почте, используя возможности машинного обучения. Мы будем обучать нашу модель на наборе данных, который включает образцы спам-контента. Используя библиотеку SciKit Learn, мы применим алгоритмы машинного обучения к категориям, в которых входные данные являются спамом или подлинными.

Набор данных

Данные являются очень важной частью любой модели машинного обучения или искусственного интеллекта. Мы будем работать с набором данных для сбора SMS-спама, доступным на Kaggle https://www.kaggle.com/datasets/uciml/sms-spam-collection-dataset.

Коллекция SMS-спама включает тщательно подобранный набор данных SMS-сообщений, специально собранный для исследований по обнаружению SMS-спама. В этой коллекции имеется корпус из 5574 SMS-сообщений на английском языке. Каждое сообщение в этом наборе данных было тщательно помечено либо как «хамство», что означает его легитимность, либо как «спам», что указывает на его нежелательный или вредоносный характер.

Как видите, у него есть ярлык «Спам и ветчина». Мы предварительно обработаем этот набор данных и добавим его в наш алгоритм машинного обучения, чтобы изучить закономерности спам-сообщений. Когда мы затем подаем случайное спам-сообщение, которого нет в наборе данных, оно может предсказать его как спам.

Это можно использовать в любом приложении, которое включает в себя публикации или своего рода почтовый компонент. Это может помочь уменьшить мошеннические действия на коммуникационных сайтах и ​​т.п.

Соединение кода

Сначала у нас установлены необходимые библиотеки:

!pip install numpy pandas scikit-learn nltk

Далее импортируем установленные библиотеки

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

Загрузите набор данных, содержащий помеченные данные электронной почты (спам или не спам), и предварительно обработайте текстовые данные. Мы также переименовываем заголовок csv из v1 и v2 в label и text для лучшей читаемости кода.

df = pd.read_csv("spam.csv", encoding="latin-1")
df = df.drop(["Unnamed: 2", "Unnamed: 3", "Unnamed: 4"], axis=1)
df = df.rename(columns={"v1": "label", "v2": "text"})

# Preprocess text data
df["text"] = df["text"].str.lower()
df["text"] = df["text"].apply(word_tokenize)
stop_words = set(stopwords.words("english"))
df["text"] = df["text"].apply(lambda x: [word for word in x if word not in stop_words])
df["text"] = df["text"].apply(lambda x: " ".join(x))

Затем мы начинаем извлечение признаков с использованием векторизации подсчета для преобразования текстовых данных в числовые признаки. Мы также разделяем набор данных на обучающий и тестовый наборы и обучаем с использованием модели классификации, такой как многочленный наивный байесовский подход. Затем, наконец, оцените модель.

#Feature Extraction
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df["text"])

#Split the Dataset
X_train, X_test, y_train, y_test = train_test_split(X, df["label"], test_size=0.2, random_state=42)

#Train a classification model, such as Multinomial Naive Bayes
classifier = MultinomialNB()
classifier.fit(X_train, y_train)

#Evaluate the model's performance using metrics like accuracy and classification report
y_pred = classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)
print("Accuracy:", accuracy)
print("Classification Report:")
print(report)

Затем мы сохраняем модель, чтобы использовать ее в различных приложениях.

loaded_model = joblib.load('email_spam_model.pkl')

Теперь мы можем использовать loaded_model для прогнозирования новых данных электронной почты:

loaded_model = joblib.load('email_spam_model.pkl')
new_email = ["Congratulations! You've won a prize. Claim it now."]
new_email = vectorizer.transform(new_email)  # Assuming you have the vectorizer from the previous code
prediction = loaded_model.predict(new_email)

if prediction[0] == "spam":
    print("This email is spam.")
else:
    print("This email is not spam.")

В заключение отметим, что обнаружение спама в электронной почте служит важнейшей защитой от постоянной угрозы нежелательных и потенциально вредоносных сообщений, проникающих в наши почтовые ящики. Используя возможности передовых алгоритмов и методов машинного обучения, мы можем эффективно фильтровать поток электронных писем, гарантируя, что только законные и значимые сообщения дойдут до намеченных получателей.

Google Colab: https://colab.research.google.com/drive/1Dinu_7XXHJlWFlhi67EDBedVI1r5_Zbu?usp=sharing