Khóa học
Dữ liệu văn bản là một trong những loại dữ liệu phổ biến nhất mà các công ty sử dụng hiện nay, nhưng do không có cấu trúc rõ ràng nên việc trích xuất thông tin từ dữ liệu văn bản có thể khó và tốn thời gian. Xử lý dữ liệu văn bản thuộc phạm vi của Xử lý ngôn ngữ tự nhiên (NLP), một trong các lĩnh vực con của trí tuệ nhân tạo.
Xử lý ngôn ngữ tự nhiên (NLP) là một lĩnh vực trong khoa học máy tính và trí tuệ nhân tạo nghiên cứu cách máy tính tương tác với ngôn ngữ tự nhiên của con người và cách lập trình máy tính để xử lý, phân tích lượng lớn dữ liệu ngôn ngữ tự nhiên.
NLP được sử dụng theo nhiều cách khác nhau, chẳng hạn như trả lời câu hỏi tự động, tạo tóm tắt văn bản, dịch văn bản giữa các ngôn ngữ, v.v. Nghiên cứu NLP cũng diễn ra trong các lĩnh vực như khoa học nhận thức, ngôn ngữ học và tâm lý học. Phân loại văn bản là một trường hợp sử dụng như vậy của NLP.
Bài viết này sẽ khám phá các trường hợp sử dụng phân loại văn bản. Bài cũng có ví dụ end-to-end về cách xây dựng một pipeline tiền xử lý văn bản, sau đó là mô hình phân loại văn bản trong Python.
Nếu bạn muốn tìm hiểu thêm về xử lý ngôn ngữ tự nhiên, các lộ trình Natural Language Processing in Python và Natural Language Processing in R của chúng tôi sẽ hữu ích. Bạn sẽ nắm được các kỹ năng cốt lõi của NLP để chuyển đổi dữ liệu văn bản thành thông tin giá trị. Bạn cũng sẽ được giới thiệu các thư viện NLP phổ biến trong Python, bao gồm NLTK, scikit-learn, spaCy và SpeechRecognition.
Phân loại Văn bản là gì?
Phân loại văn bản là một tác vụ NLP phổ biến được dùng để giải quyết các bài toán kinh doanh trong nhiều lĩnh vực. Mục tiêu của phân loại văn bản là phân loại hoặc dự đoán nhãn cho các tài liệu văn bản chưa từng thấy, thường với sự hỗ trợ của học máy có giám sát.
Tương tự như một thuật toán phân loại được huấn luyện trên dữ liệu dạng bảng để dự đoán lớp, phân loại văn bản cũng sử dụng học máy có giám sát. Điểm khác biệt chính giữa hai loại là phân loại văn bản xử lý dữ liệu đầu vào là văn bản.
Bạn cũng có thể thực hiện phân loại văn bản mà không cần dùng học máy có giám sát. Thay vì dùng thuật toán, ta có thể thiết kế một hệ thống dựa trên luật thủ công để thực hiện nhiệm vụ phân loại văn bản. Chúng tôi sẽ so sánh và đánh giá ưu, nhược điểm của hệ thống phân loại văn bản dựa trên luật và dựa trên học máy ở phần tiếp theo.

Nếu bạn muốn tìm hiểu thêm về học máy có giám sát, hãy xem bài viết riêng của chúng tôi.
Các Trường hợp Sử dụng và Ứng dụng của Phân loại Văn bản
Phân loại thư rác
Có rất nhiều trường hợp sử dụng thực tế cho phân loại văn bản trên nhiều ngành. Ví dụ, bộ lọc spam là một ứng dụng phổ biến dùng phân loại văn bản để sắp xếp email thành hai nhóm: spam và không spam.

Phân loại bài báo và blog
Một trường hợp khác là tự động gán tài liệu văn bản vào các danh mục đã xác định trước. Một mô hình học máy có giám sát được huấn luyện trên dữ liệu đã gán nhãn, bao gồm cả văn bản thô và nhãn mục tiêu. Khi mô hình được huấn luyện, nó được đưa vào vận hành để dự đoán danh mục (nhãn) cho dữ liệu mới và chưa từng thấy (các bài viết/blog trong tương lai).

Phân loại yêu cầu hỗ trợ khách hàng
Một công ty có thể dùng phân loại văn bản để tự động phân loại yêu cầu hỗ trợ khách hàng theo chủ đề, hoặc để ưu tiên và chuyển tiếp yêu cầu đến bộ phận phù hợp.

Phát hiện ngôn từ thù ghét
Với hơn 1,7 tỷ người dùng hoạt động hàng ngày, Facebook tất yếu sẽ có nội dung vi phạm quy tắc được tạo trên nền tảng. Ngôn từ thù ghét là một phần của nội dung không mong muốn này.
Facebook xử lý vấn đề này bằng cách yêu cầu rà soát thủ công các bài đăng mà bộ phân loại văn bản AI đã xác định là có ngôn từ thù ghét. Các bài đăng bị AI gắn cờ được xem xét tương tự như các bài đăng do người dùng báo cáo. Thực tế, chỉ trong ba tháng đầu năm 2020, nền tảng đã gỡ bỏ 9,6 triệu nội dung bị phân loại là ngôn từ thù ghét.

Các Loại Hệ thống Phân loại Văn bản
Chủ yếu có hai loại hệ thống phân loại văn bản: dựa trên luật và dựa trên học máy.
Phân loại văn bản dựa trên luật
Kỹ thuật dựa trên luật sử dụng một tập hợp các quy tắc ngôn ngữ được xây dựng thủ công để phân loại văn bản vào các hạng mục hoặc nhóm. Các quy tắc này hướng dẫn hệ thống phân loại văn bản vào một danh mục cụ thể dựa trên nội dung, bằng cách sử dụng các yếu tố văn bản có ý nghĩa ngữ nghĩa. Mỗi quy tắc gồm một tiền đề hoặc mẫu và một danh mục dự kiến.
Ví dụ, giả sử bạn có rất nhiều bài báo mới và mục tiêu là gán chúng vào các danh mục phù hợp như Thể thao, Chính trị, Kinh tế, v.v.
Với hệ thống phân loại dựa trên luật, bạn sẽ xem xét thủ công một vài tài liệu để xây dựng các quy tắc ngôn ngữ như sau:
- Nếu tài liệu chứa các từ như money, dollar, GDP hoặc inflation, thì thuộc nhóm (lớp) Chính trị.
Các hệ thống dựa trên luật có thể được tinh chỉnh theo thời gian và dễ hiểu đối với con người. Tuy nhiên, cách tiếp cận này có một số hạn chế.
Trước hết, các hệ thống này đòi hỏi hiểu biết chuyên sâu về lĩnh vực. Chúng tốn nhiều thời gian vì việc tạo quy tắc cho một hệ thống phức tạp có thể khó khăn và thường cần nghiên cứu, thử nghiệm mở rộng.
Do việc thêm quy tắc mới có thể làm thay đổi kết quả của các quy tắc hiện có, các hệ thống dựa trên luật cũng khó bảo trì và không mở rộng hiệu quả.
Phân loại văn bản dựa trên học máy
Phân loại văn bản dựa trên học máy là một bài toán học máy có giám sát. Mô hình học ánh xạ dữ liệu đầu vào (văn bản thô) với nhãn (còn gọi là biến mục tiêu). Điều này tương tự các bài toán phân loại không phải văn bản, nơi ta huấn luyện thuật toán phân loại có giám sát trên dữ liệu dạng bảng để dự đoán lớp; điểm khác là trong phân loại văn bản, dữ liệu đầu vào là văn bản thô thay vì đặc trưng số.
Giống như các bài toán học máy có giám sát khác, phân loại văn bản có hai giai đoạn: huấn luyện và dự đoán.

Giai đoạn huấn luyện
Một thuật toán học máy có giám sát được huấn luyện trên bộ dữ liệu có nhãn trong giai đoạn huấn luyện. Kết thúc quá trình này, chúng ta có một mô hình đã huấn luyện, có thể dùng để suy ra dự đoán (nhãn) trên dữ liệu mới, chưa từng thấy.
Giai đoạn dự đoán
Khi mô hình học máy đã được huấn luyện, có thể dùng nó để dự đoán nhãn trên dữ liệu mới và chưa từng thấy. Thông thường, điều này được thực hiện bằng cách triển khai mô hình tốt nhất từ giai đoạn trước như một API trên máy chủ.
Pipeline Tiền xử lý Văn bản
Tiền xử lý dữ liệu văn bản là bước quan trọng trong bất kỳ tác vụ xử lý ngôn ngữ tự nhiên nào. Nó giúp làm sạch và chuẩn bị dữ liệu văn bản cho các bước xử lý hoặc phân tích tiếp theo.
Pipeline tiền xử lý văn bản là chuỗi các bước xử lý được áp dụng lên văn bản thô để chuẩn bị cho các tác vụ NLP.
Các bước trong pipeline có thể khác nhau, nhưng thường bao gồm tách từ (tokenization), loại bỏ stopword, stemming và lemmatization. Những bước này giúp giảm kích thước dữ liệu văn bản và cải thiện độ chính xác của các tác vụ NLP như phân loại văn bản và trích xuất thông tin.
Dữ liệu văn bản khó xử lý vì không có cấu trúc và thường chứa nhiều nhiễu. Nhiễu có thể là lỗi chính tả, lỗi ngữ pháp và định dạng không chuẩn. Mục tiêu của pipeline tiền xử lý là làm sạch nhiễu để dữ liệu văn bản dễ phân tích hơn.

Muốn tìm hiểu thêm? Hãy xem lộ trình Text Mining with R của chúng tôi.
Trích xuất Đặc trưng
Hai phương pháp phổ biến nhất để trích xuất đặc trưng từ văn bản, hay nói cách khác chuyển dữ liệu văn bản (chuỗi) thành đặc trưng số để huấn luyện mô hình học máy, là: Bag of Words (còn gọi là CountVectorizer) và Tf-IDF.
Bag of Words
Mô hình bag of words (BoW) là cách đơn giản để biểu diễn dữ liệu văn bản thành đặc trưng số. Mô hình tạo một tập từ vựng các từ đã biết trong corpora, sau đó tạo một vector cho mỗi tài liệu chứa số lần xuất hiện của từng từ.

TF-IDF
TF-IDF là viết tắt của term frequency-inverse document frequency, là một cách khác để biểu diễn văn bản thành đặc trưng số. Mô hình Tf-IDF khắc phục một số hạn chế của Bag of Words (BoW). Chúng tôi sẽ không đi sâu vào chi tiết trong bài này, nhưng nếu bạn muốn tìm hiểu thêm, hãy xem khóa học Introduction to Natural Language Processing in Python.
Mô hình TF-IDF khác với bag of words ở chỗ nó xét đến tần suất của từ trong tài liệu cũng như tần suất nghịch đảo theo tài liệu. Điều này có nghĩa TF-IDF có xu hướng xác định các từ quan trọng trong tài liệu tốt hơn so với BoW.
Ví dụ Phân loại Văn bản End-to-End trong Python
Nhập dữ liệu
Đầu tiên, hãy nhập bộ dữ liệu trực tiếp từ liên kết GitHub này. SMS Spam Collection là bộ dữ liệu chứa 5.574 tin nhắn SMS bằng tiếng Anh kèm nhãn Spam hoặc Ham (không spam). Mục tiêu của chúng ta là huấn luyện một mô hình học máy học từ văn bản SMS và nhãn, rồi có thể dự đoán lớp của các tin nhắn SMS.
# reading data
import pandas as pd
data = pd.read_csv('https://raw.githubusercontent.com/mohitgupta-omg/Kaggle-SMS-Spam-Collection-Dataset-/master/spam.csv', encoding='latin-1')
data.head()

Sau khi đọc bộ dữ liệu, bạn sẽ thấy có vài cột thừa không cần thiết. Chúng ta chỉ cần hai cột đầu tiên. Hãy loại bỏ các cột còn lại và đồng thời đổi tên hai cột đầu.
# drop unnecessary columns and rename cols
data.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1, inplace=True)
data.columns = ['label', 'text']
data.head()
Phân tích Khám phá Dữ liệu (EDA)
Hãy thực hiện một số EDA cơ bản để xem có giá trị khuyết trong bộ dữ liệu không và mức cân bằng của nhãn mục tiêu ra sao.
# check missing values
data.isna().sum()

# check data shape
data.shape
>>> (5572, 2)
# check target balance
data['label'].value_counts(normalize = True).plot.bar()
Tiền xử lý Văn bản
Đây là nơi thực hiện toàn bộ việc làm sạch văn bản. Đó là một vòng lặp qua cả 5.572 tài liệu và thực hiện các bước sau:
- Loại bỏ tất cả ký tự đặc biệt
- Chuyển toàn bộ từ về chữ thường
- Tách từ (tokenize)
- Loại bỏ stopword
- Lemmatize
# text preprocessing
# download nltk
import nltk
nltk.download('all')
# create a list text
text = list(data['text'])
# preprocessing loop
import re
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
corpus = []
for i in range(len(text)):
r = re.sub('[^a-zA-Z]', ' ', text[i])
r = r.lower()
r = r.split()
r = [word for word in r if word not in stopwords.words('english')]
r = [lemmatizer.lemmatize(word) for word in r]
r = ' '.join(r)
corpus.append(r)
#assign corpus to data['text']
data['text'] = corpus
data.head()
Chia tập huấn luyện - kiểm tra
Hãy chia bộ dữ liệu thành tập huấn luyện và kiểm tra trước khi trích xuất đặc trưng.
# Create Feature and Label sets
X = data['text']
y = data['label']
# train test split (66% train - 33% test)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=123)
print('Training Data :', X_train.shape)
print('Testing Data : ', X_test.shape)
>>> Training Data : (3733,)
>>> Testing Data : (1839,)
Trích xuất Đặc trưng
Tại đây, chúng ta dùng mô hình Bag of Words (CountVectorizer) để chuyển văn bản đã làm sạch thành đặc trưng số. Điều này cần thiết cho bước huấn luyện mô hình học máy.
# Train Bag of Words model
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X_train_cv = cv.fit_transform(X_train)
X_train_cv.shape
>>> (3733, 7020)
Huấn luyện và Đánh giá Mô hình
Trong phần này, chúng ta huấn luyện mô hình Hồi quy Logistic và đánh giá ma trận nhầm lẫn của mô hình đã huấn luyện.
# Training Logistic Regression model
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train_cv, y_train)
# transform X_test using CV
X_test_cv = cv.transform(X_test)
# generate predictions
predictions = lr.predict(X_test_cv)
predictions
>>> array(['ham', 'spam', 'ham', ..., 'ham', 'ham', 'spam'], dtype=object)
# confusion matrix
import pandas as pd
from sklearn import metrics
df = pd.DataFrame(metrics.confusion_matrix(y_test,predictions), index=['ham','spam'], columns=['ham','spam'])
df

Xem toàn bộ sổ tay DataLab để biết thêm chi tiết.
Kết luận
NLP vẫn là một lĩnh vực nghiên cứu và phát triển sôi động, với nhiều trường đại học và công ty đang phát triển các thuật toán và ứng dụng mới. NLP mang tính liên ngành, với nhà nghiên cứu đến từ nhiều nền tảng, bao gồm khoa học máy tính, ngôn ngữ học, tâm lý học và khoa học nhận thức.
Phân loại văn bản là một tác vụ mạnh mẽ và được sử dụng rộng rãi trong NLP, có thể tự động phân loại hoặc dự đoán nhãn cho các tài liệu văn bản chưa từng thấy, thường với sự hỗ trợ của học máy có giám sát.
Không phải lúc nào cũng chính xác, nhưng khi dùng đúng cách, nó có thể mang lại giá trị lớn cho phân tích của bạn. Có nhiều cách và thuật toán khác nhau để xây dựng bộ phân loại văn bản, và không có cách tiếp cận duy nhất là tốt nhất. Điều quan trọng là thử nghiệm và tìm ra phương án phù hợp nhất với dữ liệu và mục tiêu của bạn.
Câu hỏi thường gặp về Phân loại Văn bản
Phân loại Văn bản có dùng được khi có nhiều hơn hai nhãn không?
Có. Nếu chỉ có hai nhãn, bạn sẽ dùng các thuật toán phân loại nhị phân. Nếu có nhiều hơn hai nhãn, bạn sẽ phải dùng thuật toán phân loại đa lớp.
Phân loại Văn bản có phải là tác vụ của NLP không?
Có, NLP là một lĩnh vực rất rộng. Phân loại văn bản là một trong những trường hợp sử dụng nền tảng của NLP, với ứng dụng trong nhiều ngành.
Phân loại Văn bản có phải là bài toán học máy có giám sát không?
Hệ thống phân loại văn bản cũng có thể dựa trên luật, nhưng chắc chắn đang nhanh chóng lỗi thời vì khó bảo trì và mở rộng. Hệ thống dựa trên học máy cho tác vụ phân loại văn bản sử dụng học máy có giám sát.
Xử lý ngôn ngữ tự nhiên là gì?
Xử lý ngôn ngữ tự nhiên (NLP) là một lĩnh vực trong khoa học máy tính và trí tuệ nhân tạo nghiên cứu tương tác giữa máy tính và ngôn ngữ (tự nhiên) của con người, đặc biệt là cách lập trình máy tính để xử lý và phân tích lượng lớn dữ liệu ngôn ngữ tự nhiên.
Phân loại Văn bản có giống phân tích cảm xúc không?
Phân tích cảm xúc là một ví dụ về hệ thống phân loại văn bản. Tuy nhiên, như tên gọi, phân tích cảm xúc thường được thực hiện khi nhãn là một dạng cảm xúc (tích cực hay tiêu cực, vui hay buồn, v.v.)
Có thể phân loại Văn bản mà không dùng học máy không?
Có, chúng ta cũng có thể dùng hệ thống dựa trên luật cho phân loại văn bản.
Chúng ta có thể dùng học sâu cho Phân loại Văn bản không?
Có, chúng ta có thể dùng bất kỳ thuật toán học sâu nào thay cho học máy truyền thống. Hãy xem khóa học tuyệt vời về Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ trong Python để tìm hiểu thêm về NLP và Học sâu. Nếu bạn muốn xây dựng Mô hình Phân loại Văn bản bằng TensorFlow, hãy xem Nghiên cứu tình huống TensorFlow 2.0 trên Datacamp.
Thuật toán tốt nhất cho Phân loại Văn bản là gì?
Không có thuật toán nào là tốt nhất. Thông thường, thuật toán Naive Bayes cho thấy hiệu quả tốt trên dữ liệu có số chiều cao (văn bản).
BERT có được dùng cho Phân loại Văn bản không?
Có, BERT (Bidirectional Encoder Representations from Transformers) dựa trên kiến trúc Transformers, một mô hình học sâu. Trong số nhiều trường hợp sử dụng, BERT cũng có thể dùng cho hệ thống phân loại văn bản. Xem hướng dẫn về NLP dùng BERT của chúng tôi để biết chi tiết.
Phân loại Văn bản và Khai phá Văn bản có giống nhau không?
Không. Text Mining là quá trình chuyển đổi văn bản phi cấu trúc thành định dạng có cấu trúc để nhận diện các mẫu có ý nghĩa, trong khi mục tiêu của phân loại văn bản là phân loại hoặc dự đoán nhãn cho các tài liệu văn bản chưa từng thấy, thường với sự hỗ trợ của học máy có giám sát.


