KNN (K-Nearest Neighbors) được áp dụng cho bài toán phân loại văn bản (IMDB) như thế nào?

Tác giả: AI VIET NAM (AI VIET NAM)

Keywords: KNN văn bản, IMDB classification, TF-IDF, Cosine similarity, NLP cơ bản

Vì sao nhiều bạn cảm thấy KNN “xa lạ” khi chuyển từ bài toán số sang bài toán văn bản?

Khi mới học Machine Learning (thuộc nhóm kiến thức nền ở Module 4 – Classification), nhiều bạn đã quen với việc KNN dùng khoảng cách Euclidean cho dữ liệu dạng số.
Nhưng khi sang dữ liệu văn bản như IMDB review:

  • từ ngữ không có dạng số tự nhiên
  • không thể đo
    khoảng cách
    giữa hai câu bằng cách trừ phần tử
  • văn bản dài ngắn khác nhau
  • mỗi câu có hàng nghìn từ khác nhau

Điều này khiến nhiều người bối rối:

Làm sao KNN hoạt động trên văn bản nếu đầu vào không phải số?

Câu trả lời nằm ở bước: biến văn bản thành vector đặc trưng.

Cách KNN được áp dụng cho Text Classification

KNN không làm việc trực tiếp với chuỗi chữ.
KNN chỉ hoạt động khi mỗi văn bản được biểu diễn thành một vector số.

Quy trình thường diễn ra qua 3 bước chính:

Biểu diễn văn bản thành vector (Feature Representation)

Đây là bước quan trọng nhất.
Mô hình classification truyền thống như KNN sẽ dùng các kỹ thuật biểu diễn văn bản thuộc nhóm kiến thức NLP cơ bản (Module 10 – Tokenization & Embedding).

Các cách phổ biến:

  • Bag-of-Words (BoW)

    • đếm số lần mỗi từ xuất hiện
    • mỗi văn bản thành một vector lớn, mỗi chiều tương ứng một từ
    • đơn giản nhưng dễ nổ số chiều (vocabulary lớn)
  • TF-IDF

    • giống BoW nhưng giảm trọng số các từ phổ biến (
      the
      ,
      is
      ,
      movie
      )
    • phù hợp cho bài toán như IMDB vì review thường dài và nhiều từ thừa
  • Embedding (Word2Vec, FastText)

    • biểu diễn từ bằng vector liên tục
    • trung bình các vector của từ để ra vector đại diện cho câu
    • giảm chiều tốt hơn so với BoW
  • Sentence Embeddings (BERT, SBERT)

    • dùng mô hình hiện đại để lấy embedding của toàn câu
    • diễn đạt nghĩa tốt hơn
    • phù hợp khi muốn độ chính xác cao hơn mà không cần mô hình phức tạp

Tính khoảng cách giữa các văn bản

Sau khi mỗi văn bản trở thành một vector, KNN hoạt động giống hệt như bài toán số:

  • đo khoảng cách giữa vector câu cần dự đoán và vector của tất cả các câu trong tập huấn luyện
  • chọn k hàng xóm gần nhất
  • dự đoán class theo đa số phiếu

Các loại khoảng cách phổ biến:

  • Cosine Similarity (được dùng nhiều nhất cho văn bản)
    Vì văn bản thường được biểu diễn bằng TF-IDF hoặc embedding, cosine phù hợp hơn Euclidean.
    Nó đo mức độ giống nhau về hướng giữa hai vector văn bản, thay vì độ dài.

  • Euclidean Distance
    Ít dùng hơn cho văn bản vì không phản ánh ý nghĩa tốt như cosine.

Bỏ phiếu dự đoán lớp (Majority Voting)

Sau khi lấy được k văn bản gần nhất:

  • nếu đa số là
    positive
    → dự đoán positive
  • nếu đa số là
    negative
    → dự đoán negative

IMDB thường là bài toán sentiment 2 lớp nên voting khá rõ ràng.

Ví dụ đơn giản: KNN cho IMDB Review

Giả sử bạn có câu review mới:

This movie was surprisingly good and touching.

Pipeline KNN có thể như sau:

  • TF-IDF hóa tất cả review trong tập IMDB
  • Biến review mới thành vector TF-IDF tương tự
  • Tính cosine similarity giữa vector mới và toàn bộ tập huấn luyện
  • Lấy k review
    gần nhất
    (k = 5 hoặc 7)
  • Nếu 5 review gần nhất có 4 review positive → kết luận positive

Mô hình không cần huấn luyện nặng, đúng bản chất lazy learner của KNN.

KNN trong dự án thực tế NLP: Khi nào phù hợp?

KNN không phải lựa chọn mạnh nhất cho bài toán văn bản, nhưng lại phù hợp trong một số trường hợp:

  • ✔ Khi bạn muốn baseline nhanh

    • không cần huấn luyện mạng sâu
    • dễ thử nghiệm pipeline NLP
    • phù hợp giai đoạn đầu trong dự án (Module 3 & 4 – tiền xử lý dữ liệu + ML cơ bản)
  • ✔ Khi dataset nhỏ hoặc vừa
    IMDB đầy đủ 50k review thì vẫn chạy được với tối ưu vector hóa.

  • ✔ Khi muốn so sánh với mô hình truyền thống
    Giúp bạn hiểu sự khác biệt giữa ML truyền thống và DL (Module 7 – Deep Learning 1).

  • ✔ Khi ứng dụng yêu cầu mô hình dễ giải thích
    decision boundary của KNN trực quan hơn mạng sâu.

Hạn chế cần lưu ý khi áp dụng KNN cho văn bản

  • ✦ Chi phí tính toán lớn
    KNN phải tính khoảng cách với toàn bộ dữ liệu mỗi khi dự đoán.

  • ✦ Dữ liệu nhiều chiều
    BoW/TF-IDF có thể lên đến hàng chục nghìn chiều → tính toán nặng.

  • ✦ Nhạy cảm với nhiễu
    Nếu vector hóa không tốt, performance giảm mạnh.

  • ✦ Không phù hợp cho dữ liệu rất lớn
    Cần thêm kỹ thuật tối ưu như KD-tree, Approximate Nearest Neighbor, hoặc giảm chiều (PCA, Truncated SVD – liên hệ Module 5: optimization & giảm chiều).

Gợi ý học thuật chung cho người mới

Nếu bạn đang bắt đầu với NLP:

  • Bạn có thể thử so sánh TF-IDF + KNN với Embedding + KNN.
  • Bạn có thể quan sát sự thay đổi độ chính xác khi thay đổi k.
  • Bạn có thể thử dùng Cosine thay vì Euclidean để thấy khác biệt.

Những bài thực nghiệm đơn giản này giúp bạn hiểu pipeline NLP một cách tự nhiên hơn.

Tài nguyên học AI: