Phân lớp văn bản

Trong Machine Learning và NLP, phân lớp văn bản là một bài toán xử lí văn bản cổ điển, gán các nhãn phân loại lên một văn bản mới dựa trên mức độ tương tự của văn bản đó so với các văn bản đã được gán nhãn trong tập huấn luyện.

Các ứng dụng của phân lớp văn bản thường rất đa dạng như: lọc email spam, phân tích cảm xúc (sentiment analysis), phân loại tin tức, ...

Sau mình sẽ giới thiệu vài nét rất tổng quát các bước để có thể phân lớp văn bản, một số kỹ thuật thường sử dụng, các thư viện, đưa ra từ khóa để tự tìm hiểu thêm và chi tiết ở các bài viết khác.

Note: Đối tượng bài viết những ai đang tìm hiểu về NLP và Machine Learning. Mình sử dụng Python và R. Những điều mình viết có thể không được chính xác 100%, vậy những ai chuyên gia trong lĩnh vực này có thể giúp mình correct bài viết nhé.

Quy trình tổng quát

Việc phân lớp về cơ bản có thể có nhiều kỹ thuật, tổng quát đều thực hiện các bước sau:

  • Tiền xử lý văn bản: lọc bỏ dấu câu, chính tả, kỹ tự lỗi, ...

  • Biểu diễn văn bản dưới dạng vector (thường gọi là mô hình hóa văn bản, vector hóa văn bản), thường phải làm các công việc như sau:

  • Tách từ (tokenizer, n-gram, ...; tiếng việt có thư viện vnTokenizer khá nổi tiếng), lọc bỏ stopwords (những từ xuất hiện nhiều nhưng không mang nhiều ý nghĩa (a, the, in, of, ...; thì, là, nên, ...).

  • Vector hóa văn bản (feature vector): sử dụng các kỹ thuật như Bag of Words, TF-IDF, ...
    Số chiều của vector này bằng số từ được token (có thể lên tới 100.000 hay 10.000.00 chiều), đây của là một problem của feature vector, để giải quyết có thể sử dụng các kỹ thuật PCA, SVD, ...

  • Phân lớp văn bản sau sau khi văn bản được vector hóa, bước này ta chọn một mô hình, thuật toán ML phân lớp (SVMCNN text classifier, Native-BayesDecision TreesK-meansLDA - topic clustering, ...). Bước này bao gồm:

  • TrainEvaluate mô hình: chia dữ liệu thành 2 tập train và test để đánh giá mô hình.

  • Thử, thay đổi mô hình, tham số và đánh giá, đến khi nào được kết quả tối ưu, gọi là model selection.

  • Việc đánh giá mô hình có thể sử dụng: ROC CurvePrecision/Recall, Lift, ...

  • Deploy.

Các thư viện hỗ trợ

Với mình, việc hỗ trợ xử lý văn bản của Python rất mạnh, cú pháp dễ học nhiều thư viện và thuật toán cho NLP, Machine learning:

Trên Python, bạn nên sử dụng Jupyter Notebook để có thể code và visualize dễ dàng hơn. Các thư viện trên đều có thể cài dễ dàng bằng pip.

Ví dụ: phân lớp văn bản theo category

Ở notebook ví dụ sau, với data là một đoạn text ngắn được phân thành 7 loại category khác nhau:

Mình sẽ dùng kỹ thuật TF-IDF để biến văn bản thành một vector và sử dụng thuật toán SVM (http://scikit-learn.org/stable/modules/svm.html) trong thư viện sklearn để tiến hành phân lớp.
Source: https://github.com/duyet/demo-text-classification/blob/master/classification-with-tfidf-svm.ipynb