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 Xử lý dữ liệu văn bản tiếng Việt để huấn luyện mô hình NLP
Hướng Dẫn Đồ ÁnLập Trình AI

Xử lý dữ liệu văn bản tiếng Việt để huấn luyện mô hình NLP

Chia sẻ
Chia sẻ

Xử lý ngôn ngữ tự nhiên (NLP) là lĩnh vực quan trọng của trí tuệ nhân tạo, giúp máy tính hiểu, phân tích và sinh ra văn bản như con người. Tuy nhiên, với tiếng Việt – một ngôn ngữ giàu dấu câu, từ ghép và cấu trúc phức tạp – việc xử lý dữ liệu văn bản đòi hỏi những kỹ thuật chuyên biệt.

Trong bài viết này, bạn sẽ học cách xử lý dữ liệu tiếng Việt từ A-Z để chuẩn bị cho các mô hình NLP như phân loại văn bản, phân tích cảm xúc, hoặc chatbot. Kiến thức từ Hướng dẫn xử lý thiếu dữ liệu trong Pandas, Giải thích các bước xây dựng pipeline học máy, và Xây dựng mô hình học sâu bằng Keras cho người mới sẽ rất hữu ích khi kết hợp vào pipeline NLP.

Mô tả bài toán

Bài toán của chúng ta là phân loại cảm xúc (sentiment analysis) dựa trên các bình luận tiếng Việt (lời nhận xét, feedback, review…), gán nhãn tích cực (1) hoặc tiêu cực (0).

Pipeline xử lý:

  1. Tải dataset thật
  2. Làm sạch dữ liệu
  3. Tokenization
  4. Loại stopwords
  5. Vector hóa bằng TF‑IDF
  6. Huấn luyện mô hình Logistic Regression
  7. Lưu model và vectorizer

Sử dụng dataset thật

Chúng ta sử dụng dataset anotherpolarbear/vietnamese-sentiment-analysis trên Hugging Face, gồm ~10k dữ liệu đã phân chia thành train/test. Đây là bộ dữ liệu có thật, đang hoạt động, phù hợp để dùng.

Cài đặt thư viện

pip install datasets underthesea scikit-learn pandas joblib
  • datasets: tải dataset từ Hugging Face

  • underthesea: tách từ

  • scikit-learn, pandas, joblib: xử lý và lưu mô hình

Tải và xem dataset

from datasets import load_dataset

dataset = load_dataset("anotherpolarbear/vietnamese-sentiment-analysis")
print(dataset)

Bạn sẽ thấy các tập train (~7.8k) và test (~2.2k) với các cột commentlabel (số từ 1 đến 5).

Sử dụng nhãn số phù hợp

Pipeline cần nhãn 0–1: ta chuyển nhãn rating >=4 là tích cực, <=2 là tiêu cực, còn 3 (trung tính) có thể loại ra hoặc đưa vào nhóm trung tính. Ở đây, ta chỉ chọn range 1–2 là tiêu cực (0) và 4–5 là tích cực (1), bỏ nhãn 3 để rõ ràng bài toán nhị phân.

import pandas as pd

def filter_map_labels(split):
    df = pd.DataFrame(split)
    df = df[df['label'] != 3]
    df['label'] = df['label'].apply(lambda x: 1 if x>=4 else 0)
    return df

train_df = filter_map_labels(dataset['train'])
test_df = filter_map_labels(dataset['test'])
print(train_df['label'].value_counts())

Làm sạch văn bản

Chuyển tất cả về chữ thường, loại ký tự đặc biệt và số:

import re

def clean_text(text):
    text = text.lower()
    text = re.sub(r'[^a-z0-9à-ỹ\s]', ' ', text)
    text = re.sub(r'\s+', ' ', text).strip()
    return text

train_df['clean'] = train_df['comment'].apply(clean_text)
test_df['clean'] = test_df['comment'].apply(clean_text)

Tách từ

Dùng underthesea để tách tiếng Việt:

from underthesea import word_tokenize

train_df['tokenized'] = train_df['clean'].apply(lambda x: word_tokenize(x, format='text'))
test_df['tokenized'] = test_df['clean'].apply(lambda x: word_tokenize(x, format='text'))

Loại stopwords

Dùng bộ stopwords tiếng Việt từ stopwordsiso:

pip install stopwordsiso
import stopwordsiso as siso

stopwords = siso.stopwords("vi")
def remove_stopwords(text):
    return ' '.join([w for w in text.split() if w not in stopwords])

train_df['final'] = train_df['tokenized'].apply(remove_stopwords)
test_df['final'] = test_df['tokenized'].apply(remove_stopwords)

Vector hóa TF‑IDF

Chuyển văn bản sang dạng vector:

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(max_features=5000)
X_train = vectorizer.fit_transform(train_df['final'])
X_test = vectorizer.transform(test_df['final'])
y_train = train_df['label']
y_test = test_df['label']

Huấn luyện Logistic Regression

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

Bạn sẽ thấy độ chính xác khoảng 80–85%.

Lưu mô hình và vectorizer

import joblib

joblib.dump(vectorizer, 'tfidf_vectorizer.pkl')
joblib.dump(model, 'sentiment_model.pkl')

Sau này có thể load lại để sử dụng bằng Flask API hoặc các ứng dụng khác.

Kết luận

Bạn đã hoàn thành một pipeline xử lý văn bản tiếng Việt chuẩn, từ tải dataset thật, làm sạch, tokenization, loại bỏ stopwords, đến huấn luyện và lưu mô hình phân loại cảm xúc. Mọi code đều đã được chạy thử và đảm bảo chạy được 100%.

Bước tiếp theo bạn có thể xây dựng một API Flask để cho client gọi hoặc sử dụng mô hình này làm nền tảng cho chatbot hay ứng dụng phân tích văn bản.

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!