Đọc ngày 2026-08-04

Kế hoạch hôm nay

Câu hỏi dẫn đường

  • Text classification nên bắt đầu từ label space và baseline như thế nào?
  • Vì sao baseline cổ điển vẫn quan trọng trước model phức tạp?
  • Classifier cơ bản cho mình biết lỗi nằm ở dữ liệu, label hay model ra sao?

Ghi chú trong khi đọc

  • A Pipeline for Building Text Classification Systems đặt Text Classification vào một workflow supervised ML rõ ràng: có dữ liệu đã gán nhãn, chia train/validation/test, biến raw text thành vector, train classifier, đánh giá bằng metric đã chọn, rồi deploy và monitor.
  • Điểm dễ nhớ: phần có thể lặp nhiều nhất là feature representation -> classifier -> evaluation. Mình không chỉ chọn model một lần; mình thử nhiều cách biểu diễn text, nhiều classifier, nhiều hyperparameter, rồi mới chọn bản đủ tốt để đi production.
  • Evaluation không chỉ là accuracy. Chapter nhắc các metric classifier thường dùng như precision, recall, F1, ROC-AUC và confusion matrix; khi đưa vào business thật còn phải nhìn KPI/ROI của use case.
  • Không phải lúc nào cũng cần full pipeline. Nếu bài toán đơn giản hoặc cần MVP nhanh, có thể bắt đầu bằng rule/lexicon-based classifier để có baseline; nếu task generic như sentiment hoặc content category, có thể cân nhắc API có sẵn trước khi tự train.
  • One Pipeline, Many Classifiers dùng cùng một pipeline nhưng thay các phần ở bước 3-5: representation, classifier, parameter/hyperparameter và cách đọc evaluation. Bài học chính là không có classifier nào thắng mọi dataset.
  • Dataset minh họa bị Class Imbalance: khoảng 1,500 bài relevant và 6,500 bài non-relevant. Nếu đo bằng accuracy thô, đoán tất cả là non-relevant đã được khoảng 80%, nên Confusion Matrix quan trọng hơn một con số accuracy.
  • a BoW representation trong ví dụ này nghĩa là dùng CountVectorizer để biến mỗi bài news thành vector đếm từ sau preprocessing như lowercasing, bỏ punctuation/digit/custom strings và stop words.
  • BoW cho classifier một bảng feature rõ ràng nhưng rất sparse: ban đầu có hơn 45,000 feature, nhiều feature hiếm trở thành noise và làm việc học khó hơn.
  • Naive Bayes Classifier là classifier xác suất dùng Bayes theorem: với từng class, nó ước lượng xác suất các feature xuất hiện trong class đó, kết hợp các xác suất feature, rồi chọn class có xác suất lớn nhất.
  • Trong ví dụ, MultinomialNB nhận feature từ BoW/document-term matrix. Model nhận diện non-relevant tốt hơn relevant: non-relevant sai khoảng 14%, còn relevant chỉ đúng khoảng 42%.
  • Confusion matrix giúp thấy lỗi lệch giữa các class: cùng một accuracy trung bình, model có thể đang làm tốt majority class nhưng bỏ sót class quan trọng.
  • Khi giảm số feature từ hàng chục nghìn xuống 5,000, average performance có thể giảm nhưng khả năng bắt relevant tăng hơn 20%. Việc này chỉ tốt hay xấu tùy mục tiêu của bài toán.
  • Logistic Regression là discriminative classifier: thay vì ước lượng xác suất feature theo từng class như Naive Bayes, nó học weight cho từng feature để tách các class và dự đoán phân phối xác suất trên class.
  • Trong ví dụ, sách dùng LogisticRegression(class_weight="balanced") trên feature vector 5,000 chiều từ bước Naive Bayes trước đó. class_weight="balanced" tăng trọng số cho class ít mẫu theo tỷ lệ ngược với số sample của class.
  • Logistic Regression đạt accuracy khoảng 73.7% trong ví dụ này và kém Naive Bayes trên dataset economic news, nhưng bài học chính là: đổi algorithm chỉ là một giả thuyết cần kiểm chứng bằng confusion matrix, không phải bảo đảm tốt hơn.

Viết lại bằng lời của tôi

  • Text classification thực tế không bắt đầu từ model, mà bắt đầu từ bài toán + label + dữ liệu đại diện production. Model chỉ là một bước trong pipeline.
  • Baseline đơn giản giống cái thước đo đầu tiên: nếu rule/API đã đủ cho nhu cầu business thì chưa chắc cần tự train; nếu không đủ, supervised pipeline giúp mình cải thiện có hệ thống.
  • Khi đánh giá classifier, mình cần hỏi: model sai ở lớp nào, lỗi đó có quan trọng với use case không, và metric mình chọn có phản ánh chi phí sai thực tế không?
  • Cùng một pipeline nhưng đổi classifier giống như đổi giả thuyết về dữ liệu. Nếu model này kém, chưa chắc pipeline sai; có thể feature quá sparse, class lệch, algorithm chưa hợp, hoặc hyperparameter chưa ổn.
  • BoW là baseline tốt vì dễ hiểu và dễ debug, nhưng mình phải nhớ nó nhìn text như “túi từ”: có từ nào và xuất hiện bao nhiêu, chứ không thật sự hiểu thứ tự hay ngữ cảnh.
  • Naive Bayes hữu ích không phải vì nó luôn thắng, mà vì nó cho baseline nhanh: nếu baseline đơn giản đã lộ lỗi ở class quan trọng, mình biết cần nhìn lại feature, imbalance hoặc metric trước khi nghĩ đến model phức tạp hơn.
  • Logistic Regression hữu ích vì nó cho mình một baseline tuyến tính học weight theo feature. Nếu thêm class_weight="balanced" mà vẫn không đủ tốt, có thể vấn đề nằm ở representation, imbalance, hoặc bản thân dataset chứ không chỉ ở classifier.

Việc cần làm