Giới thiệu dự án

Trong bối cảnh bùng nổ của thị trường thương mại điện tử (E-commerce) tại Việt Nam với tốc độ tăng trưởng hàng năm đạt trên 20%, hành vi tiêu dùng trực tuyến đã có sự chuyển dịch mạnh mẽ. Theo các báo cáo thị trường, hơn 85% người tiêu dùng trực tuyến tham khảo đánh giá sản phẩm trước khi đưa ra quyết định mua hàng. Tuy nhiên, các hệ thống phân tích cảm xúc truyền thống (Document/Sentence-level Sentiment Analysis) chỉ gán một nhãn phân cực duy nhất (Tích cực/Tiêu cực/Trung tính) cho toàn bộ bình luận, bỏ qua tính đa diện của văn phong người dùng khi một câu nhận xét có thể khen về khía cạnh này nhưng lại chê khía cạnh khác.

Ví dụ thực tế: "Màu son lên chuẩn đẹp nhưng chất son hơi khô và giao hàng cực kỳ lâu."
-> Phân tích tổng thể: Khó xác định nhãn duy nhất (nhập nhằng ngữ nghĩa)
-> Phân tích theo khía cạnh (ABSA): 
   - COLOUR (Màu sắc): Positive
   - TEXTURE (Chất son): Negative
   - SHIPPING (Giao hàng): Negative

1. Vấn đề cốt lõi (Problem Statement)

  • Sự phức tạp của ngôn ngữ tự nhiên (Vietnamese NLP): Ngôn ngữ tiếng Việt trong thương mại điện tử chứa nhiều từ viết tắt, từ lóng (teen code), icon/emoji, lỗi chính tả và hiện tượng câu đa mệnh đề.
  • Thiếu hụt dữ liệu chuẩn hóa: Chưa có bộ dữ liệu chuyên biệt tiếng Việt được gán nhãn chuẩn theo phương pháp Aspect-Based Sentiment Analysis (ABSA) cho ngành hàng mỹ phẩm/làm đẹp (son môi).
  • Hạn chế trong giám sát vận hành: Các nhà bán lẻ (Sellers) và quản lý nhãn hàng thiếu công cụ tự động hóa để phân rã phản hồi khách hàng theo từng thuộc tính sản phẩm và quy trình vận hành.

2. Mục tiêu dự án

  1. Xây dựng bộ dữ liệu: Thu thập và gán nhãn chuẩn hóa bộ dữ liệu bình luận tiếng Việt cho sản phẩm son môi trên sàn Shopee gồm 16,227 bình luận với 32,775 cặp khía cạnh - cảm xúc.
  2. Nghiên cứu & Thực nghiệm mô hình: Xây dựng, huấn luyện và so sánh 5 kiến trúc học sâu (BiLSTM, BiGRU, BiLSTM+Conv1D, BiGRU+Conv1D, BiLSTM+BiGRU+Conv1D) trên 2 hướng tiếp cận Single-task Learning (STL) và Multi-task Learning (MTL).
  3. Phát triển hệ thống End-to-End: Thiết lập pipeline tự động thu thập dữ liệu (Selenium/BeautifulSoup), lập lịch và xử lý luồng (Apache Airflow), lưu trữ cơ sở dữ liệu (PostgreSQL) và hiển thị trực quan hóa phân tích (Tableau).

3. Phương pháp tiếp cận & Kết quả kỳ vọng

Dự án áp dụng mô hình nhúng từ ngữ cảnh sâu ELMo (Embeddings from Language Models) kết hợp lớp mạng nơ-ron hồi quy hai chiều và mạng tích chập một chiều (BiGRU+Conv1D) theo chiến lược Single-task Learning. Giải pháp kỳ vọng đạt Macro F1-score trên 95% ở bài toán phát hiện khía cạnh và trên 68% ở bài toán phân loại cảm xúc, đồng thời cung cấp hệ thống dashboard phân tích vận hành tự động theo thời gian thực.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Phương pháp / Giải pháp Ưu điểm Nhược điểm Độ phức tạp
Traditional ML (SVM + TF-IDF) (Arthamevia et al.) Triển khai nhanh, tốn ít tài nguyên tính toán Không bắt được ngữ cảnh tuần tự, phụ thuộc nhiều vào feature engineering thủ công Thấp
Attention-based LSTM (STL) (Wang et al., 2014) Bắt được phụ thuộc từ xa và trọng số chú ý khía cạnh Phải huấn luyện nhiều mô hình độc lập, chi phí tính toán cao ($O(N \cdot M)$) Trung bình
Interactive Multi-Task Network (IMN) (He et al., 2019) Tận dụng tri thức chia sẻ giữa 2 tác vụ Aspect & Sentiment Dễ gặp hiện tượng negative transfer nếu dữ liệu phân bố lệch nhãn Cao
Proposed Solution (BiGRU+Conv1D + ELMo) Trích xuất đặc trưng cục bộ (CNN) kết hợp chuỗi thời gian (BiGRU), tối ưu tốc độ hơn BiLSTM Cần pipeline tiền xử lý tách từ và chuẩn hóa từ vựng chặt chẽ Trung bình - Cao

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have (Bắt buộc): Module làm sạch dữ liệu văn bản tiếng Việt; Module phân loại 8 khía cạnh và 3 cảm xúc; Database lưu trữ quan hệ có cấu trúc; Dashboard trực quan hóa phân bố cảm xúc.
  • Should Have (Nên có): Pipeline điều phối dữ liệu tự động với Apache Airflow; Khả năng chuyển đổi ngữ nghĩa từ Emoji sang văn bản.
  • Could Have (Có thể có): API endpoint dự đoán trực tiếp cho bên thứ ba; Cảnh báo tự động khi xuất hiện đột biến bình luận tiêu cực.
  • Won't Have (Chưa thực hiện): Nhận diện khía cạnh cấp độ ký tự/từ đơn (Aspect Term Extraction/Span Detection dạng BIO tagging).
graph TD
    A[Shopee Reviews Crawler] -->|Raw HTML/JSON| B[Pre-processing Pipeline]
    B -->|Cleaned Text| C[ELMo Word Embedding Layer]
    C --> D[BiGRU Sequence Modeling]
    D --> E[Conv1D Feature Extraction]
    E --> F[Global Pooling Max/Avg]
    F --> G1[Aspect Detection Model Sigmoid]
    F --> G2[Sentiment Classification Models Softmax]
    G1 --> H[Apache Airflow DAG Scheduler]
    G2 --> H
    H --> I[(PostgreSQL Database)]
    I --> J[Tableau Visual Dashboards]

Thiết kế hệ thống & Công nghệ sử dụng

  • Môi trường & Ngôn ngữ: Python 3.8+, CUDA Toolkit 11.2, cuDNN 8.1.
  • Deep Learning Framework: TensorFlow 2.6.0, Keras 2.6.0, ELMo Vietnamese Pre-trained (1024 dimensions).
  • Data Engineering: Apache Airflow 2.2.3 (DAG orchestration), Selenium 4.1.0, BeautifulSoup4 4.10.0.
  • Lưu trữ & Trực quan: PostgreSQL 13.4, Tableau Desktop 2021.4.

Database Schema: Bảng son_review_v2

CREATE TABLE son_review_v2 (
    id SERIAL PRIMARY KEY,
    product_name VARCHAR(500) NOT NULL,
    shop_name VARCHAR(255) NOT NULL,
    review_text TEXT NOT NULL,
    variation VARCHAR(150),
    rating INT CHECK (rating >= 1 AND rating <= 5),
    review_time TIMESTAMP NOT NULL,
    price NUMERIC(12, 2),
    aspect_smell INT DEFAULT 0,
    sentiment_smell VARCHAR(20) DEFAULT 'null',
    aspect_colour INT DEFAULT 0,
    sentiment_colour VARCHAR(20) DEFAULT 'null',
    aspect_texture INT DEFAULT 0,
    sentiment_texture VARCHAR(20) DEFAULT 'null',
    aspect_price INT DEFAULT 0,
    sentiment_price VARCHAR(20) DEFAULT 'null',
    aspect_stayingpower INT DEFAULT 0,
    sentiment_stayingpower VARCHAR(20) DEFAULT 'null',
    aspect_shipping INT DEFAULT 0,
    sentiment_shipping VARCHAR(20) DEFAULT 'null',
    aspect_packing INT DEFAULT 0,
    sentiment_packing VARCHAR(20) DEFAULT 'null',
    aspect_others INT DEFAULT 0,
    sentiment_others VARCHAR(20) DEFAULT 'neutral',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Implementation và kết quả

Quy trình tiền xử lý và Kiến trúc thuật toán

Quy trình chuẩn hóa dữ liệu bao gồm: loại bỏ ký tự xuống dòng (\n), chuyển văn bản về chữ thường (lowercase), ánh xạ biểu tượng cảm xúc (Emoji to text thông qua thư viện emoji), loại bỏ tag HTML và ký tự đặc biệt, khử ký tự lặp kéo dài (ví dụ: đẹpppp $\to$ đẹp), và phân đoạn từ tiếng Việt (Word Tokenization) bằng phương pháp nối từ ghép (chất_son, giao_hàng).

Mô hình BiGRU thu nhận biểu diễn ngữ cảnh từ hai hướng thời gian:

$$\mathbf{r}_t = \sigma(\mathbf{W}r \cdot [\mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_r)$$

$$\mathbf{z}_t = \sigma(\mathbf{W}z \cdot [\mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_z)$$

$$\tilde{\mathbf{h}}_t = \tanh(\mathbf{W}_h \cdot [\mathbf{r}t \odot \mathbf{h}{t-1}, \mathbf{x}_t] + \mathbf{b}_h)$$

$$\mathbf{h}_t = (1 - \mathbf{z}t) \odot \mathbf{h}{t-1} + \mathbf{z}_t \odot \tilde{\mathbf{h}}_t$$

Sau lớp BiGRU (400 hidden units), ma trận đặc trưng được chuyển tiếp qua lớp Conv1D (128 filters, kernel size 2) và kết hợp qua hai nhánh pooling: GlobalMaxPooling1DGlobalAveragePooling1D.

import tensorflow as tf
from tensorflow.keras.layers import Input, Dense, SpatialDropout1D, Bidirectional, GRU, Conv1D, GlobalMaxPooling1D, GlobalAveragePooling1D, concatenate

def build_bigru_conv1d_model(input_dim=1024, max_len=100, num_classes=8, activation='sigmoid'):
    inputs = Input(shape=(max_len, input_dim), name="elmo_embedded_input")
    x = SpatialDropout1D(0.2)(inputs)
    
    # Bidirectional GRU Layer
    bigru = Bidirectional(GRU(400, return_sequences=True, activation='tanh'))(x)
    
    # 1D Convolution Layer
    conv1d = Conv1D(filters=128, kernel_size=2, padding='valid', activation='relu')(bigru)
    
    # Dual Pooling Mechanism
    max_pool = GlobalMaxPooling1D()(conv1d)
    avg_pool = GlobalAveragePooling1D()(conv1d)
    concat = concatenate([max_pool, avg_pool])
    
    # Dense Layers
    dense = Dense(128, activation='relu')(concat)
    dense = tf.keras.layers.Dropout(0.3)(dense)
    outputs = Dense(num_classes, activation=activation, name="output_layer")(dense)
    
    model = tf.keras.Model(inputs=inputs, outputs=outputs)
    return model

Testing và Validation

Tập dữ liệu 16,227 câu được phân chia độc lập theo tỷ lệ 8:1:1:

  • Tập huấn luyện (Training Set): 12,981 bình luận (26,231 cặp Aspect-Sentiment)
  • Tập đánh giá (Validation Set): 1,623 bình luận (3,264 cặp Aspect-Sentiment)
  • Tập kiểm thử (Test Set): 1,623 bình luận (3,280 cặp Aspect-Sentiment)

Chất lượng gán nhãn được kiểm định qua hệ số tin cậy Cohen’s Kappa ($\kappa$) qua 5 giai đoạn huấn luyện, đạt $\kappa > 0.85$ cho khía cạnh và $\kappa > 0.78$ cho phân loại cảm xúc.

Bảng so sánh hiệu năng thực nghiệm trên tập Test

Kiến trúc mô hình Tiếp cận Micro $F1_{ad}$ (%) Macro $F1_{ad}$ (%) Micro $F1_{sc}$ (%) Macro $F1_{sc}$ (%)
BiLSTM STL 97.35 97.12 87.89 67.45
BiLSTM MTL 95.12 94.80 85.20 63.10
BiGRU STL 97.42 97.20 88.01 68.12
BiGRU MTL 95.40 95.05 85.65 63.80
BiLSTM + Conv1D STL 97.50 97.28 88.35 68.80
BiGRU + Conv1D (Best) STL 97.60 97.36 88.62 69.13
BiGRU + Conv1D MTL 95.80 95.42 86.10 64.50
BiLSTM + BiGRU + Conv1D STL 97.55 97.30 88.40 68.95
Confusion Matrix đại diện cho bài toán Aspect Detection (Nhãn COLOUR - 7,519 mẫu):
                Predicted Positive    Predicted Negative
Actual Positive       7,398 (TP)            121 (FN)
Actual Negative          85 (FP)          8,623 (TN)
Precision: 98.86% | Recall: 98.39% | F1-Score: 98.62%

Đổi mới và đóng góp

  1. Bộ dữ liệu E-commerce Domain-Specific đầu tiên cho mỹ phẩm: Đóng góp bộ dữ liệu 16,227 câu tiếng Việt được chuẩn hóa với 8 khía cạnh nghiệp vụ rõ ràng, giải quyết khoảng trống dữ liệu trong bài toán ABSA tại Việt Nam.
  2. Khẳng định tính hiệu quả của Single-task Learning: Chứng minh qua thực nghiệm rằng phương pháp STL duy trì độ chính xác cao hơn MTL từ 2.0% đến 4.6% Macro F1-score trên bài toán ABSA tiếng Việt, tránh được hiện tượng nhiễu gradient khi phân bố dữ liệu mất cân bằng giữa các khía cạnh.
  3. Kiến trúc kết hợp BiGRU + Conv1D: Việc tích hợp Conv1D phía sau mạng hồi quy giúp trích xuất n-gram đặc trưng cục bộ vượt trội hơn mô hình thuần LSTM, tăng 1.68% Macro F1-score cảm xúc so với mô hình BiLSTM cơ sở.
  4. Quy trình gán nhãn kiểm soát chặt chẽ: Quy trình 2 vòng lặp kết hợp đo lường hệ số đồng thuận Cohen’s Kappa giúp loại bỏ hoàn toàn các trường hợp nhập nhằng ngữ nghĩa.

Ứng dụng thực tế và triển khai

Kịch bản vận hành doanh nghiệp

  • Phòng Quản lý Sản phẩm (R&D): Phân tích thuộc tính TEXTURE (chất son) và COLOUR (màu sắc). Nếu phát hiện tỷ lệ tiêu cực ở TEXTURE tăng đột biến trên 15%, doanh nghiệp lập tức thẩm định lại công thức dung môi hoặc độ dưỡng ẩm của lô hàng.
  • Phòng Chăm sóc Khách hàng & Vận hành: Giám sát khía cạnh PACKINGSHIPPING. Khi tỷ lệ tiêu cực của PACKING chạm ngưỡng cảnh báo, hệ thống thông báo yêu cầu đổi quy cách chèn xốp bóng khí (bubble wrap).
Pipeline Tự động hóa với Apache Airflow:
[Trigger Cronjob Hàng tuần]
[Task 1: Selenium Scrape 9 Cửa hàng Shopee]
[Task 2: Regex & Emoji Data Preprocessing]
[Task 3: Inference BiGRU+Conv1D Model]
[Task 4: Batch Upsert vào PostgreSQL son_review_v2]
[Task 5: Auto-refresh Data Source trên Tableau Dashboard]

Phân tích hiệu quả kinh tế (ROI)

  • Tối ưu chi phí nhân sự: Giảm 80% thời gian phân loại thủ công của đội ngũ Market Research (từ 120 giờ/tháng xuống còn 24 giờ/tháng).
  • Tốc độ phản ứng: Thời gian phát hiện sự cố chất lượng sản phẩm giảm từ 14 ngày xuống dưới 24 giờ.
  • Dự toán chi phí hạ tầng: 1 VPS Linux (4 vCPU, 16GB RAM, 100GB SSD) ~ 1,200,000 VNĐ/tháng, đảm bảo xử lý 100,000 bình luận/tháng với chi phí biên gần như bằng không.

Hạn chế và hướng phát triển

  • Mất cân bằng dữ liệu giữa các lớp cảm xúc: Dữ liệu thực tế từ Shopee có tỷ lệ tích cực áp đảo (71%), khiến cảm xúc Trung tính (15%) và Tiêu cực (14%) có ít mẫu để tối ưu hóa trọng số mô hình.
  • Chưa xử lý triệt để hiện tượng mỉa mai (Sarcasm): Các câu mang sắc thái mỉa mai (ví dụ: "Son đẹp lắm, đánh lên môi khô như ngói") vẫn có khả năng bị mô hình dự đoán nhầm thành tích cực ở khía cạnh màu sắc.
  • Hướng phát triển:
    1. Thử nghiệm các mô hình ngôn ngữ Pre-trained Transformer chuyên sâu cho tiếng Việt như PhoBERT, ViBERT để nâng cao khả năng nắm bắt ngữ cảnh phức tạp.
    2. Ứng dụng kỹ thuật Data Augmentation (Back-translation, EDA) để cân bằng mẫu cho lớp cảm xúc thiểu số (Negative/Neutral).
    3. Mở rộng hệ thống sang các sàn thương mại điện tử khác như Lazada, TikTok Shop, Tiki.

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Nguồn tài liệu tham khảo hoàn chỉnh về quy trình xây dựng đồ án Khoa học Dữ liệu/NLP chuẩn mực từ khâu thu thập dữ liệu, gắn nhãn đến triển khai hệ thống.
  • Kỹ sư AI / Developers: Kiến trúc mẫu tích hợp Deep Learning model (Keras/TensorFlow) vào luồng vận hành thực tế thông qua Airflow và PostgreSQL.
  • Nhà bán hàng & Doanh nghiệp E-commerce: Giải pháp quản trị chất lượng sản phẩm và tối ưu hóa trải nghiệm khách hàng dựa trên dữ liệu định lượng chính xác.
  • Nhà nghiên cứu NLP: Bộ dữ liệu chuẩn mực và kết quả benchmark đáng tin cậy cho bài toán ABSA trên ngữ cảnh văn bản thương mại điện tử tiếng Việt.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu CPU 4 Cores, 16GB RAM, 50GB ổ cứng trống cho môi trường cơ bản (không GPU cho bước inference). Nếu thực hiện huấn luyện lại mô hình, khuyến nghị trang bị GPU NVIDIA có tối thiểu 8GB VRAM (như RTX 2060/3060 hoặc Google Colab/Kaggle T4) để tối ưu thời gian huấn luyện.

2. Giới hạn mở rộng (Scalability) của hệ thống và giải pháp nâng cấp?

Pipeline hiện tại xử lý batch 10,000 bình luận trong khoảng 15 phút. Khi quy mô tăng lên hàng triệu bình luận, hệ thống có thể mở rộng bằng cách: (1) Đóng gói Model Inference thành Microservice với FastAPI và Docker, (2) Thay thế Crawler đơn luồng bằng cụm Scrapy/Selenium Grid phân tán, (3) Triển khai message broker (Kafka/RabbitMQ) để xử lý dữ liệu dạng streaming.

3. Hệ thống có khả năng tích hợp vào các CRM/ERP hiện tại không?

Hoàn toàn khả thi. Dữ liệu sau khi xử lý được lưu trữ chuẩn hóa trong bảng quan hệ PostgreSQL, có thể dễ dàng đồng bộ sang các hệ thống CRM (như HubSpot, Salesforce, Odoo) hoặc phần mềm quản lý bán hàng (Pancake, KiotViet) qua RESTful API hoặc Database Connector.

4. Chi phí vận hành và thời gian thu hồi vốn (ROI)?

Với mức chi phí máy chủ đám mây khoảng 50 - 70 USD/tháng, doanh nghiệp tiết kiệm được chi phí nhân sự tương đương 500 - 800 USD/tháng cho các công tác khảo sát thị trường. Thời gian hoàn vốn đầu tư kỹ thuật ước tính đạt được trong vòng 2 - 3 tháng vận hành.

5. Tại sao mô hình Single-task Learning lại cho kết quả tốt hơn Multi-task Learning?

Trong bài toán này, phân bố dữ liệu giữa các khía cạnh có sự chênh lệch lớn (ví dụ: khía cạnh COLOUR chiếm 46.33% trong khi STAYINGPOWER chỉ chiếm 17.25%). Ở mô hình Multi-task Learning, các nhánh đầu ra chia sẻ chung tầng biểu diễn đặc trưng, dẫn đến hiện tượng gradient từ các khía cạnh chiếm ưu thế lấn át các khía cạnh ít dữ liệu. Single-task Learning cho phép mỗi mô hình chuyên biệt hóa trọng số tối ưu nhất cho từng nhiệm vụ riêng biệt.


Kết luận

Đồ án tốt nghiệp "Hệ thống phân tích cảm xúc theo khía cạnh cho bình luận sản phẩm trên các nền tảng thương mại điện tử" của sinh viên Trần Quang Linh và Lê Phan Thành Đạt (Trường Đại học Công nghệ Thông tin - ĐHQG-HCM) đã giải quyết toàn diện bài toán ABSA trong lĩnh vực thương mại điện tử tiếng Việt.

Bằng việc kết hợp kiến trúc học sâu BiGRU+Conv1D cùng nhúng từ ELMo, mô hình đạt hiệu năng vượt trội với 97.36% Macro F1-score trong phát hiện khía cạnh và 69.13% Macro F1-score trong phân loại cảm xúc. Đồ án không chỉ đóng góp giá trị học thuật với bộ dữ liệu chuẩn 16,227 bình luận mà còn bàn giao một hệ thống kỹ thuật hoàn chỉnh, tự động hóa từ khâu trích xuất dữ liệu, lưu trữ cơ sở dữ liệu đến trực quan hóa đa chiều trên Tableau Dashboard. Đây là giải pháp thực tiễn hỗ trợ đắc lực cho các doanh nghiệp trong việc nâng cao chất lượng sản phẩm và tối ưu hóa trải nghiệm khách hàng trong kỷ nguyên số.