Phát hiện cảm xúc từ văn bản là một trong những ứng dụng phổ biến nhất của xử lý ngôn ngữ tự nhiên (NLP). Từ phân tích đánh giá khách hàng trên các nền tảng thương mại điện tử, theo dõi phản ứng của người dùng trên mạng xã hội đến hỗ trợ tổng đài thông minh, khả năng hiểu được cảm xúc ẩn trong văn bản giúp doanh nghiệp và tổ chức đưa ra quyết định tốt hơn. Đây cũng là một bài toán tuyệt vời để người mới bắt đầu làm quen với NLP và học sâu.
Nếu bạn chưa từng làm việc với Machine Learning, hãy tham khảo trước bài viết Giải thích đơn giản về hồi quy tuyến tính trong Machine Learning để nắm được các khái niệm cơ bản. Ngoài ra, bài Tạo mô hình phân loại ảnh chó mèo với TensorFlow và So sánh các thuật toán phân loại phổ biến trong học máy sẽ giúp bạn hiểu về các phương pháp và cách lựa chọn mô hình phù hợp. Khi đã có nền tảng đó, bài viết này sẽ hướng dẫn bạn từng bước xây dựng một mô hình phát hiện cảm xúc từ văn bản bằng Python và TensorFlow.
Giới thiệu bài toán
Phát hiện cảm xúc từ văn bản hay sentiment analysis là quá trình phân tích văn bản để xác định thái độ, quan điểm hay cảm xúc của người viết. Ví dụ, với câu “Dịch vụ ở đây thật tuyệt vời”, mô hình cần xác định đây là cảm xúc tích cực. Ngược lại, câu “Tôi rất thất vọng về chất lượng sản phẩm” phải được phân loại là tiêu cực.
Bài toán này thường được xử lý như một bài toán phân loại văn bản, nơi đầu vào là câu hoặc đoạn văn, và đầu ra là một nhãn cảm xúc, ví dụ: tích cực, tiêu cực hoặc trung tính. Trong bài viết này, chúng ta sẽ xây dựng một mô hình đơn giản để phân loại cảm xúc thành hai nhóm: tích cực và tiêu cực.
Chuẩn bị môi trường và cài đặt thư viện
Để thực hành, bạn có thể sử dụng Google Colab, một nền tảng lập trình trực tuyến miễn phí của Google. Truy cập https://colab.research.google.com và tạo một notebook mới.
Các thư viện cần thiết bao gồm TensorFlow, Keras, NumPy, Pandas và Matplotlib. Nếu dùng Jupyter Notebook, bạn cần cài đặt chúng bằng lệnh sau:
!pip install tensorflow numpy pandas matplotlib
Chuẩn bị dữ liệu
Trong bài này, chúng ta sẽ sử dụng tập dữ liệu IMDb Reviews từ TensorFlow Datasets. Đây là bộ dữ liệu gồm 50.000 đánh giá phim được gắn nhãn cảm xúc tích cực hoặc tiêu cực. TensorFlow cung cấp sẵn bộ dữ liệu này nên bạn không cần tải thủ công.
import tensorflow as tf from tensorflow.keras.datasets import imdb # Tải dữ liệu và giới hạn số lượng từ phổ biến num_words = 10000 (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=num_words)
Tiền xử lý dữ liệu
Dữ liệu tải về là danh sách các chỉ số từ vựng. Để đưa vào mô hình, chúng ta cần chuẩn hóa độ dài câu bằng cách padding.
from tensorflow.keras.preprocessing.sequence import pad_sequences maxlen = 200 x_train = pad_sequences(x_train, maxlen=maxlen) x_test = pad_sequences(x_test, maxlen=maxlen)
Xây dựng mô hình phát hiện cảm xúc
Mô hình sẽ bao gồm một lớp Embedding để biểu diễn từ vựng, một lớp LSTM để học các phụ thuộc trong chuỗi và một lớp Dense để phân loại.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
model = Sequential([
Embedding(input_dim=num_words, output_dim=128, input_length=maxlen),
LSTM(128),
Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()Huấn luyện mô hình
Huấn luyện mô hình trên tập dữ liệu đã được xử lý.









