Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Hướng dẫn tạo đồ án học máy phân loại email spam bằng Python
Hướng Dẫn Đồ ÁnLập Trình AI

Hướng dẫn tạo đồ án học máy phân loại email spam bằng Python

Chia sẻ
Chia sẻ

Trong thời đại kỹ thuật số hiện nay, email là một trong những phương tiện truyền thông chính. Tuy nhiên, email spam đang trở thành vấn đề nghiêm trọng gây phiền toái và lãng phí thời gian. Việc xây dựng một hệ thống học máy để phân loại email spam không chỉ là một bài toán thực tế hấp dẫn, mà còn là một đồ án học máy cơ bản giúp sinh viên nắm rõ quy trình xử lý ngôn ngữ tự nhiên (NLP), tiền xử lý dữ liệu, và huấn luyện mô hình phân loại.

Bài viết này hướng dẫn bạn xây dựng hệ thống phân loại email spam hoàn chỉnh bằng Python. Nếu bạn đã đọc các bài trước như Tự động tạo mô hình học máy với AutoML, Nhận diện đối tượng bằng YOLOv8 hay Phân tích dữ liệu ngành học và điểm số, thì bài này sẽ giúp bạn rèn luyện khả năng lập trình và ứng dụng kiến thức đó trong xử lý văn bản.

Chuẩn bị dữ liệu và thư viện cần thiết

Để huấn luyện mô hình phát hiện email spam, ta cần một tập dữ liệu đã được gán nhãn gồm hai loại: spamham (không phải spam). Dataset rất phổ biến và dễ dùng là SMS Spam Collection – bao gồm hơn 5.000 tin nhắn văn bản được gán nhãn rõ ràng, lý tưởng cho bài toán phân loại.

Bạn có thể tải dataset tại đây:
👉 SMS Spam Collection Dataset on Kaggle

Sau khi tải, bạn cần cài đặt các thư viện xử lý văn bản và học máy:

pip install pandas scikit-learn nltk matplotlib seaborn

Tập dữ liệu có hai cột chính:

  • v1: Nhãn (spam hoặc ham)

  • v2: Nội dung tin nhắn văn bản

Sau khi đổi tên lại cột, bạn sẽ tiến hành xử lý ngôn ngữ tự nhiên.

Tiền xử lý văn bản với NLP

Trước khi huấn luyện mô hình, cần làm sạch dữ liệu văn bản. Đây là bước cực kỳ quan trọng trong mọi bài toán NLP. Văn bản thô thường chứa ký tự đặc biệt, stopwords và các từ không mang ý nghĩa.

Các bước xử lý bao gồm:

  • Chuyển văn bản về chữ thường (lowercase)

  • Loại bỏ dấu câu, ký tự đặc biệt

  • Tách từ (tokenization)

  • Loại bỏ từ dừng (stopwords)

  • Lemmatization – đưa từ về gốc ngữ nghĩa

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report, confusion_matrix
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import string

nltk.download('stopwords')
nltk.download('wordnet')

# Đọc dữ liệu và đổi tên cột
df = pd.read_csv("spam.csv", encoding='latin-1')[['v1', 'v2']]
df.columns = ['label', 'text']

# Làm sạch văn bản
stop_words = set(stopwords.words('english'))
lemmatizer = WordNetLemmatizer()

def clean_text(text):
    text = text.lower()
    text = ''.join([char for char in text if char not in string.punctuation])
    tokens = text.split()
    tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words]
    return ' '.join(tokens)

df['cleaned'] = df['text'].apply(clean_text)

Vector hóa dữ liệu và huấn luyện mô hình

Sau khi xử lý xong văn bản, bạn cần biến nó thành dạng vector số học. Đối với bài toán phân loại văn bản, TF-IDF Vectorizer là lựa chọn tốt vì nó đánh giá trọng số từ khóa dựa trên tần suất xuất hiện và tính hiếm.

Mô hình học máy được sử dụng ở đây là Naive Bayes Multinomial – đơn giản, nhanh và hiệu quả cao cho bài toán phân loại văn bản.

# Tách dữ liệu huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split(df['cleaned'], df['label'], test_size=0.2, random_state=42)

# Vector hóa văn bản
vectorizer = TfidfVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)

# Huấn luyện mô hình
model = MultinomialNB()
model.fit(X_train_vec, y_train)

# Đánh giá hiệu quả
y_pred = model.predict(X_test_vec)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

Triển khai giao diện dòng lệnh đơn giản

Sau khi huấn luyện xong mô hình, bạn có thể viết một hàm đơn giản để phân loại email mới theo input người dùng. Đây là bước quan trọng nếu bạn muốn tích hợp mô hình vào ứng dụng thực tế.

def predict_spam(text):
    cleaned = clean_text(text)
    vector = vectorizer.transform([cleaned])
    result = model.predict(vector)
    return result[0]

print(predict_spam(\"Congratulations! You've won a free ticket to Bahamas!\"))

Kết luận

Qua bài viết này, bạn đã thực hiện trọn vẹn một đồ án học máy cơ bản nhưng thiết thực: phân loại email spam. Bạn đã biết cách xử lý văn bản, chuyển sang vector, áp dụng mô hình Naive Bayes và đánh giá kết quả. Đây là bước đệm tốt để bạn làm dashboard Streamlit, hoặc tích hợp hệ thống phát hiện spam vào app Flask.

Nếu muốn tiếp tục nâng cấp, bạn có thể:

  • Dùng mô hình mạnh hơn như SVM hoặc BERT

  • Triển khai bằng Streamlit (giao diện người dùng)

  • Chuyển sang phân loại email thật từ Gmail API

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!