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 build mô hình phân loại tin tức bằng Python
Hướng Dẫn Đồ Án

Hướng dẫn build mô hình phân loại tin tức bằng Python

Chia sẻ
Chia sẻ

Phân loại tin tức (News Classification) là một bài toán phổ biến trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP). Mục tiêu là xây dựng một mô hình có khả năng tự động phân loại bài viết vào các chủ đề như thể thao, chính trị, công nghệ, kinh doanh,…

Đây là đề tài phù hợp cho sinh viên làm đồ án AI hoặc người mới học AI, bởi vì nó dễ tiếp cận, có nhiều dữ liệu mẫu, và giúp làm quen với pipeline NLP đầy đủ: từ xử lý văn bản, vector hóa, đến huấn luyện mô hình và đánh giá kết quả.

Cài đặt thư viện cần thiết

Trước khi chạy các file Python trong dự án, bạn cần cài đặt đầy đủ các thư viện hỗ trợ:

pip install scikit-learn pandas matplotlib seaborn joblib

Nếu bạn làm đồ án trong môi trường ảo (venv), hãy kích hoạt môi trường trước khi chạy lệnh cài đặt.

Ngoài ra, nếu bạn sử dụng Jupyter Notebook hoặc Google Colab, bạn có thể chèn dòng sau ngay trong cell đầu tiên để đảm bảo thư viện được cài đúng:

!pip install scikit-learn pandas matplotlib seaborn joblib

Sau khi cài xong, bạn có thể chạy các file .py như train.py, predict.py, evaluate.py mà không bị lỗi thiếu thư viện.

Tải và chuẩn bị dữ liệu

Scikit-learn hỗ trợ sẵn bộ dữ liệu 20 Newsgroups, bạn không cần tải thủ công. Đây là bộ dữ liệu gồm hơn 18.000 bài viết thuộc 20 chủ đề tin tức khác nhau như sci.space, rec.sport.baseball, talk.politics.guns,…

Dưới đây là cách tải và xử lý dữ liệu.

File: load_data.py

from sklearn.datasets import fetch_20newsgroups

# Tải dữ liệu huấn luyện và kiểm tra
categories = ['sci.space', 'rec.sport.baseball', 'talk.politics.guns', 'comp.graphics']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories, remove=('headers', 'footers', 'quotes'))
newsgroups_test = fetch_20newsgroups(subset='test', categories=categories, remove=('headers', 'footers', 'quotes'))

print(f"Số lượng văn bản huấn luyện: {len(newsgroups_train.data)}")
print(f"Số lượng văn bản kiểm tra: {len(newsgroups_test.data)}")

Ở đây ta chỉ chọn 4 chủ đề để đơn giản hoá việc huấn luyện. Bạn có thể mở rộng ra 20 chủ đề nếu muốn.

Tiền xử lý văn bản và vector hóa

Dữ liệu text cần được biến đổi thành vector số để mô hình hiểu được. Ta sử dụng TfidfVectorizer để chuyển đổi văn bản thành vector trọng số TF-IDF.

File: preprocess.py

from sklearn.feature_extraction.text import TfidfVectorizer

# Tạo vectorizer và biến đổi dữ liệu
vectorizer = TfidfVectorizer(stop_words='english', max_df=0.5)

X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)

y_train = newsgroups_train.target
y_test = newsgroups_test.target

Giải thích:

  • stop_words='english': loại bỏ các từ phổ biến (the, is, and…)

  • max_df=0.5: bỏ qua các từ xuất hiện trong hơn 50% văn bản (không mang tính phân biệt)

Xây dựng và huấn luyện mô hình phân loại

Chúng ta sẽ sử dụng mô hình Multinomial Naive Bayes – một thuật toán đơn giản, rất hiệu quả với dữ liệu văn bản phân loại.

File: train.py

from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
import joblib

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

# Dự đoán trên tập kiểm tra
y_pred = clf.predict(X_test)

# Đánh giá
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc*100:.2f}%")

# Lưu mô hình và vectorizer
joblib.dump(clf, 'news_classifier.pkl')
joblib.dump(vectorizer, 'vectorizer.pkl')

Nếu bạn chạy đúng, mô hình sẽ đạt độ chính xác khoảng 85–90% tùy vào số chủ đề bạn chọn.

Dự đoán tin tức mới

Bạn có thể sử dụng mô hình vừa lưu để phân loại một đoạn văn bản mới bất kỳ.

File: predict.py

import joblib

# Tải mô hình và vectorizer
clf = joblib.load('news_classifier.pkl')
vectorizer = joblib.load('vectorizer.pkl')

# Tin tức mới cần phân loại
new_text = ["NASA vừa công bố hình ảnh mới từ kính viễn vọng không gian."]

# Vector hóa văn bản
X_new = vectorizer.transform(new_text)

# Dự đoán
pred = clf.predict(X_new)
target_names = ['comp.graphics', 'rec.sport.baseball', 'sci.space', 'talk.politics.guns']

print(f"Tin tức được phân loại vào chủ đề: {target_names[pred[0]]}")

Bạn có thể viết hàm nhập văn bản từ giao diện hoặc file để mở rộng mô hình thành ứng dụng thực tế.

Hiển thị thống kê kết quả

Ngoài độ chính xác, bạn nên hiển thị ma trận nhầm lẫnbáo cáo phân loại để hiểu mô hình đang hoạt động tốt ở lớp nào.

Để chạy đoạn code này, bạn cần cài thêm seaborn nếu chưa có:

pip install seaborn

File: evaluate.py

from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

# Tính toán
print(classification_report(y_test, y_pred, target_names=newsgroups_test.target_names))

# Ma trận nhầm lẫn
cm = confusion_matrix(y_test, y_pred)

# Vẽ bằng seaborn
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', xticklabels=newsgroups_test.target_names, yticklabels=newsgroups_test.target_names)
plt.ylabel('Thực tế')
plt.xlabel('Dự đoán')
plt.title('Ma trận nhầm lẫn mô hình phân loại tin tức')
plt.tight_layout()
plt.show()

Triển khai ứng dụng phân loại tin tức

Bạn có thể tích hợp mô hình này vào các ứng dụng sau:

  • Form nhập văn bản (Flask, Streamlit)

  • API RESTful để nhận bài báo và trả về nhãn chủ đề

  • Web app phân loại hàng loạt tin tức từ RSS, email, file txt…

Việc đóng gói mô hình bằng joblib giúp dễ dàng triển khai mà không cần huấn luyện lại mỗi lần.

Kết luận

Bài toán phân loại tin tức là bước khởi đầu tuyệt vời để thực hành các kỹ thuật xử lý ngôn ngữ tự nhiên trong Python. Dựa vào bộ dữ liệu có sẵn và thư viện mạnh mẽ như scikit-learn, bạn có thể xây dựng mô hình chỉ trong vài trăm dòng mã, nhưng đem lại hiệu quả thực tế cao.

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!