Đọc ngày 2026-08-05

Kế hoạch hôm nay

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

  • SVM và neural embedding thay đổi representation/classifier như thế nào?
  • Khi nào dùng embedding pretrained thay vì feature sparse?
  • Deep model có lợi gì nhưng thêm rủi ro gì?

Ghi chú trong khi đọc

  • Phần đầu ngày này nối tiếp One Pipeline, Many Classifiers: sau Naive Bayes và Logistic Regression, sách thử Support Vector Machine bằng cách giữ pipeline gần như cũ nhưng đổi classifier và giảm max_features để thời gian train hợp lý hơn.
  • SVM cũng là discriminative classifier như Logistic Regression, nhưng mục tiêu là tìm hyperplane tách lớp với margin lớn. Điểm đổi lại là có thể train lâu hơn, nhất là khi feature space lớn.
  • Trong ví dụ, sách dùng LinearSVC(class_weight="balanced") và giảm CountVectorizer(max_features=1000) vì SVM train lâu hơn khi feature space lớn.
  • Trong ví dụ economic news, SVM cải thiện khả năng bắt relevant articles so với Logistic Regression, nhưng Naive Bayes với feature set nhỏ vẫn là lựa chọn tốt nhất trong nhóm thử nghiệm nhỏ này.
  • Bài học quan trọng: chọn classifier là một quá trình thử nghiệm có kiểm soát. Bắt đầu từ model đơn giản, đọc lỗi bằng confusion matrix, rồi tăng complexity khi baseline không đủ.
  • Word Embeddings mở phần feature representation mới: thay vì dùng sparse BoW/TF-IDF nhiều chiều, ta dùng dense low-dimensional vectors học từ neural embedding models.
  • Ví dụ dùng pretrained Word2Vec Google News model như một dictionary: key là word, value là vector embedding đã học. Với mỗi câu, sách lấy embedding của từng word có trong model rồi average lại thành một vector 300 chiều đại diện cho cả câu.
  • Cách này bỏ qua OOV words, tức các từ không có trong vocabulary của pretrained model. Vì vậy cần kiểm tra domain vocabulary có overlap với pretrained embeddings không.
  • Với Logistic Regression, averaged Word2Vec features đạt khoảng 81% accuracy trên sentiment sentences dataset; đây là baseline tốt vì chỉ dùng pretrained embeddings và preprocessing cơ bản.
  • Trade-off deployment: pretrained embedding model có thể rất nặng, ví dụ model dùng trong sách khoảng 3.6GB, nên phải tính cả memory khi deploy.
  • Document Embeddings dùng Doc2Vec để học representation trực tiếp cho toàn bộ document/sentence/paragraph, thay vì học word/character embeddings rồi gom lại.
  • Ví dụ Doc2Vec dùng tweet emotion dataset: tweet ngắn, nhiều spelling/syntax biến dạng, emoticon, hashtag/handle nên preprocessing cần TweetTokenizer thay vì tokenizer chung.
  • Quy trình gồm TaggedDocument → train Doc2Vec(vector_size=50, alpha=0.025, min_count=10, dm=1, epochs=100) → dùng infer_vector(..., steps=50) để lấy vector ổn định hơn → train Logistic Regression.
  • Kết quả F1 khoảng 0.51 trên 3 class, khá kém so với kỳ vọng. Sách diễn giải rằng tweets ít thông tin mỗi mẫu và có ngôn ngữ nhiễu; cần tuning hoặc problem-specific feature representation.
  • Trade-off giống fastText: phải lưu model representation đã train. Doc2Vec thường không cồng kềnh bằng fastText nhưng cũng không train nhanh bằng fastText.
  • Deep Learning for Text Classification chuyển từ feature vector dựng sẵn sang input pipeline cho neural network: tokenize text thành word index, pad sequence về cùng độ dài, map index sang embedding vector, rồi đưa vào architecture như CNN, LSTM hoặc pretrained language model.
  • Với Keras, sách dùng Tokenizer(num_words=MAX_NUM_WORDS), texts_to_sequences, pad_sequences(maxlen=MAX_SEQUENCE_LENGTH) và to_categorical để biến IMDB reviews thành tensor phù hợp cho neural network.
  • Nếu dùng pretrained embeddings, ví dụ GloVe glove.6B.100d.txt, cần dựng embedding_matrix theo vocabulary của tokenizer. Nếu không dùng pretrained embeddings, có thể để Embedding layer học trực tiếp từ corpus.
  • Input layer cho text thường là embedding layer; output layer trong classification thường là softmax/categorical output. Vì vậy deep classifier vẫn cần label encoding, loss, metric, optimizer và tuning như một pipeline ML đầy đủ.
  • CNN cho text có thể hiểu như học các feature hữu ích kiểu n-gram qua convolution/pooling, thay vì lấy toàn bộ n-gram collection làm feature như BoW.
  • LSTM/RNN tận dụng tính tuần tự của ngôn ngữ tốt hơn CNN trong trực giác của sách, nhưng train lâu hơn và data-hungry hơn; kết quả thấp không nhất thiết chứng minh LSTM kém, có thể do data chưa đủ.
  • LSTMs for Text Classification trong sách dùng cùng IMDB dataset và thay phần convolution/pooling bằng LSTM(128, dropout=0.2, recurrent_dropout=0.2).
  • Architecture ví dụ: Embedding(MAX_NUM_WORDS, 128) → LSTM(128) → Dense(2, activation="sigmoid"), compile với binary_crossentropy, adam, metric accuracy.
  • LSTM phù hợp với trực giác sequence vì word hiện tại phụ thuộc context trước/sau; CNN cơ bản không trực tiếp model hóa toàn bộ dependency tuần tự theo cách đó.
  • Điểm cần nhớ: chạy LSTM lâu hơn CNN trong notebook. Nếu performance thấp hơn, chưa nên kết luận LSTM yếu; có thể dataset chưa đủ lớn để tận dụng capacity của LSTM.
  • Sách kết thúc phần này bằng lưu ý thực dụng: deep text classifiers phụ thuộc mạnh vào training dataset, cần nhiều dữ liệu task-specific và có chi phí compute/deployment cao; vì vậy nhiều bài toán industry vẫn dùng non-DL baselines.

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

  • Không nên hỏi “classifier nào tốt nhất?” một cách trừu tượng. Câu đúng hơn là: với dataset này, representation này, metric này, classifier nào tạo trade-off lỗi phù hợp nhất?
  • Confusion matrix là cách nhìn trade-off đó ở dạng cụ thể: class nào đang được bắt đúng, class nào bị bỏ sót, và lỗi đó có đáng đổi lấy metric trung bình cao hơn không.
  • SVM không tự động thắng Logistic Regression hay Naive Bayes. Nó chỉ là một giả thuyết khác về cách tách lớp; nếu dữ liệu sparse, lệch lớp hoặc feature chưa tốt, kết quả vẫn phải đọc qua từng class.
  • Mental model của SVM là “tìm ranh giới tách lớp có margin lớn nhất”; nó đáng thử khi baseline tuyến tính khác chưa đủ, nhưng vẫn phải cân bằng với thời gian train và số feature.
  • Word embeddings đổi câu hỏi từ “từ nào xuất hiện?” sang “các từ trong text nằm ở đâu trong không gian nghĩa?”. Nhưng nếu chỉ average word vectors, mình vẫn đang nén cả câu thành một vector khá thô, nên phải kiểm tra OOV, domain mismatch và memory.
  • Document embeddings nghe có vẻ “đúng đơn vị” hơn vì học vector cho cả document, nhưng kết quả vẫn phụ thuộc mạnh vào data type và preprocessing. Với tweet, representation không tự cứu được dữ liệu ngắn/nhiễu.
  • Deep learning không bỏ qua pipeline; nó chỉ đẩy phần representation learning vào model. Trước khi CNN/LSTM/BERT chạy được, text vẫn phải qua tokenizer, padding, embedding matrix/layer và evaluation setup tử tế.
  • LSTM giống cách đọc text theo chuỗi hơn: mỗi bước nhìn một word trong bối cảnh, nên hợp với ngôn ngữ có thứ tự. Nhưng cái giá là train chậm và cần nhiều data hơn, nên không thể chỉ vì “model mạnh hơn” mà chọn ngay.
  • Với text classification thực tế, deep model là bước tăng complexity sau baseline, không phải đích đến mặc định. Nếu dữ liệu ít, domain lệch hoặc deploy đắt, Naive Bayes/SVM/Logistic Regression vẫn có thể là lựa chọn sáng suốt hơn.

Việc cần làm