Обмен сообщениями по электронной почте стал очень важной частью нашей повседневной деятельности. Скорее всего, вы столкнулись с некоторыми странными электронными письмами в своем ящике для нежелательной почты или спама. Большинство почтовых клиентов, таких как 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