Phân tích cảm xúc theo khía cạnh (Aspect-Based Sentiment Analysis, ABSA) đi sâu hơn sentiment analysis thông thường bằng cách xác định đối tượng hoặc thuộc tính nào đang được đánh giá và cảm xúc dành cho từng thuộc tính đó [1]. Với thương mại điện tử, khác biệt này đặc biệt quan trọng vì một review thường chứa nhiều ý trái chiều.
Ví dụ: “Máy thiết kế đẹp, pin dùng lâu nhưng giao hàng chậm và hộp bị móp.” Gán một nhãn negative hay positive cho toàn review đều làm mất thông tin. Một hệ thống ABSA phù hợp hơn sẽ trả về DESIGN: positive, BATTERY: positive, SHIPPING: negative và PACKAGING: negative.
Nếu chưa quen với sentiment classification, có thể đọc trước bài Bài toán phân tích cảm xúc trong văn bản. Bài này tập trung vào bước tiếp theo: xây dựng một hệ thống ABSA có thể dùng cho review thương mại điện tử tiếng Việt.
Trước khi chọn mô hình, phải xác định ABSA cần trả về gì
ABSA không phải một bài toán duy nhất. SemEval-2014 phân biệt các tác vụ như trích xuất cụm từ chỉ khía cạnh, xác định category và phân loại polarity cho từng aspect [1]. Vì vậy, bước đầu tiên của một hệ thống thực tế không phải chọn BERT hay LSTM mà là xác định cấu trúc output.
Có hai cách biểu diễn phổ biến.
Aspect Term Extraction: tìm chính xác cụm từ trong câu
Với câu:
Hệ thống có thể trả về:
| Aspect term | Sentiment |
|---|---|
| camera | positive |
| pin | negative |
Cách này hữu ích nếu ứng dụng cần highlight chính xác đoạn văn bản mà người dùng đang nhận xét. Aspect extraction thường được mô hình hóa như sequence labeling với các nhãn BIO hoặc một bài toán span extraction.
Aspect Category Detection: ánh xạ review vào taxonomy có sẵn
Trong hệ thống phân tích sản phẩm, doanh nghiệp thường quan tâm đến các category ổn định như BATTERY, CAMERA, PRICE, SHIPPING hoặc PACKAGING. Khi đó output có thể trực tiếp là các tuple:
Cách này còn xử lý được implicit aspect. Chẳng hạn câu “đắt hơn shop khác khá nhiều” không chứa từ “giá”, nhưng hệ thống vẫn có thể gán PRICE: negative.
VLSP 2018 định nghĩa VABSA cho tiếng Việt dưới dạng tập các cặp aspect–polarity, trong đó aspect được biểu diễn qua entity và attribute, còn polarity gồm positive, negative và neutral [2]. Với dashboard thương mại điện tử, thiết kế dựa trên category thường là điểm khởi đầu thực dụng vì output đã phù hợp trực tiếp với tổng hợp thống kê.
Thiết kế ontology cho review thương mại điện tử tiếng Việt
Sai lầm phổ biến là xây một danh sách aspect duy nhất cho mọi sản phẩm. Điện thoại, son môi và quần áo có các thuộc tính rất khác nhau. Nếu ontology quá chung, output ít giá trị; nếu quá chi tiết, dữ liệu mỗi nhãn trở nên thưa và khó học.
Một giải pháp là chia ontology thành hai tầng.
| Nhóm | Aspect ví dụ | Phạm vi |
|---|---|---|
| Cross-domain | PRICE, SHIPPING, PACKAGING, SELLER_SERVICE | Có thể xuất hiện ở phần lớn ngành hàng. |
| Điện tử | BATTERY, SCREEN, CAMERA, PERFORMANCE, SOUND | Điện thoại, tablet, laptop. |
| Mỹ phẩm | COLOUR, TEXTURE, SMELL, STAYING_POWER | Son môi và sản phẩm làm đẹp. |
| Thời trang | SIZE, MATERIAL, COLOUR, COMFORT | Quần áo, giày dép. |
Một nghiên cứu trực tiếp trên thương mại điện tử Việt Nam của Tran, Le và Do xây dựng bộ dữ liệu gồm 16.227 review tiếng Việt về chín sản phẩm son môi trên Shopee, với 32.775 cặp aspect–sentiment [3]. Bộ dữ liệu sử dụng các aspect SMELL, COLOUR, TEXTURE, PRICE, STAYINGPOWER, SHIPPING, PACKING và thêm OTHERS để nhận diện review không thuộc các khía cạnh chính [3].
Điểm đáng học ở đây không phải sao chép nguyên taxonomy cho mọi ngành hàng. Nó cho thấy ontology phải bám sát domain. SHIPPING và PRICE có thể tái sử dụng rộng rãi, trong khi STAYING_POWER chỉ có ý nghĩa với một số sản phẩm mỹ phẩm.
Một review có thể có nhiều aspect cùng lúc
Aspect detection vì vậy thường là multi-label classification, không phải multi-class classification. Review:
có thể đồng thời mang các nhãn PERFORMANCE, SCREEN và SHIPPING. Một softmax buộc các nhãn cạnh tranh nhau sẽ sai cấu trúc bài toán; aspect detection nên dùng sigmoid độc lập cho từng category.
Đừng để rating tạo label leakage
Review thương mại điện tử thường đi kèm số sao. Nếu mục tiêu là suy luận sentiment từ nội dung văn bản nhưng rating được đưa trực tiếp vào feature, mô hình có thể học shortcut “1 sao = negative” thay vì hiểu ngôn ngữ. Rating chỉ nên được dùng nếu bài toán production thực sự cho phép sử dụng tín hiệu đó và cách đánh giá cũng phản ánh đúng điều kiện này.
Pipeline ABSA tiếng Việt: từ review thô đến tuple aspect–sentiment
Một pipeline có thể tách thành năm bước: làm sạch có kiểm soát, tách từ, encoder ngôn ngữ, phát hiện aspect và phân loại sentiment. Sau inference, các tuple được lưu để tổng hợp theo SKU, thương hiệu, ngành hàng hoặc thời gian.
Tiền xử lý tiếng Việt: càng sạch chưa chắc càng tốt
Review thực tế có thể chứa “sp ok”, “ko đẹp lắm”, “ship siêu lâuuu”, emoji, mã sản phẩm và cả tiếng Anh. Việc xóa toàn bộ dấu câu, emoji hoặc chuẩn hóa mọi từ không có trong từ điển có thể loại bỏ chính tín hiệu sentiment mà mô hình cần.
Một pipeline hợp lý thường chỉ chuẩn hóa những biến thể có độ tin cậy cao, giữ lại từ phủ định như “không”, “chẳng”, “chưa”, đồng thời xử lý URL và metadata không cần thiết. Nếu dùng PhoBERT, cần đặc biệt chú ý bước word segmentation vì mô hình được xây dựng cho dữ liệu tiếng Việt đã tách từ [4]. Có thể đọc thêm bài Tách từ trong tiếng Việt để hiểu vì sao khoảng trắng không đồng nghĩa với ranh giới từ.
Multi-task PhoBERT: một encoder, hai mục tiêu học
PhoBERT là mô hình ngôn ngữ tiền huấn luyện đơn ngữ cho tiếng Việt và là một lựa chọn tự nhiên để làm encoder [4]. Thay vì huấn luyện hai Transformer hoàn toàn độc lập, ta có thể dùng chung biểu diễn contextual và đặt hai prediction head phía trên.
Với review x, PhoBERT tạo representation h cho toàn câu:
Giả sử hệ thống có K aspect. Mỗi aspect được dự đoán độc lập bằng sigmoid:
Loss của aspect detection là binary cross-entropy trên K nhãn:
Với sentiment, ta không chỉ hỏi “review mang sentiment gì?” mà phải điều kiện hóa dự đoán theo aspect. Có thể gán mỗi aspect một embedding ek rồi kết hợp với representation của review:
Sentiment loss chỉ được tính cho những aspect có mặt trong ground truth. Tổng loss có thể viết:
Đây là kiến trúc multi-task minh họa cho hệ thống category-based ABSA, không phải kiến trúc duy nhất của PhoBERT hay của paper [3]. Ưu điểm chính là encoder được chia sẻ, còn sentiment head vẫn biết mình đang phân loại sentiment đối với aspect nào.
Ví dụ PyTorch: xây model ABSA với PhoBERT
Đoạn code sau triển khai phần model cốt lõi. Đầu vào được giả định đã tách từ phù hợp với PhoBERT. aspect_targets là vector multi-hot, còn sentiment_targets dùng −100 cho những aspect không xuất hiện để bỏ qua chúng khi tính cross-entropy.
Model chưa được fine-tune nên đoạn cuối không cho dự đoán có ý nghĩa ngay sau khi khởi tạo. Mục đích của code là cho thấy cấu trúc tensor và cách hai nhiệm vụ được ghép trong cùng một network. Sau huấn luyện, inference sẽ giữ các aspect có xác suất vượt threshold rồi lấy sentiment tương ứng.
Threshold 0,5 cũng không phải giá trị mặc định tối ưu cho mọi aspect. Nếu SHIPPING hiếm nhưng rất quan trọng về nghiệp vụ, threshold của nhãn này có thể cần được tune riêng trên validation set để cân bằng precision và recall.
Đánh giá ABSA: đừng chỉ nhìn accuracy
Aspect distribution trong thương mại điện tử thường mất cân bằng. PRODUCT_QUALITY hoặc SHIPPING có thể xuất hiện rất nhiều, trong khi một aspect như SOUND hoặc STAYING_POWER chỉ xuất hiện ở một số ngành hàng. Accuracy vì vậy có thể che giấu mô hình bỏ qua các lớp hiếm.
Nên đánh giá ít nhất ba tầng.
Aspect detection
Sử dụng precision, recall và F1 cho bài toán multi-label. Micro-F1 cho thấy hiệu năng tổng thể, còn Macro-F1 giúp phát hiện việc mô hình hoạt động kém ở các aspect ít xuất hiện.
Sentiment classification
Đánh giá sentiment trên các aspect ground-truth hoặc báo cáo rõ protocol đang sử dụng. Nếu chỉ đánh giá sentiment trên aspect mà model đã phát hiện đúng, con số này không phản ánh lỗi aspect detection.
Joint aspect–sentiment F1
Metric quan trọng nhất ở tầng hệ thống là xem một tuple chỉ được tính đúng khi cả aspect và sentiment đều đúng.
Ground truth:
Prediction:
SHIPPING: positive là một tuple đúng; BATTERY: neutral là sai dù aspect BATTERY được phát hiện chính xác. Đánh giá joint như vậy gần hơn với giá trị mà dashboard cuối cùng thực sự nhận được.
Chia dữ liệu để tránh leakage
Random split trên review có thể quá dễ nếu cùng một SKU, template hoặc các review gần trùng xuất hiện ở cả train và test. Với hệ thống phải tổng quát sang sản phẩm mới, nên cân nhắc split theo product hoặc ít nhất kiểm tra duplicate giữa các partition. Nếu mục tiêu là dự đoán dữ liệu tương lai, time-based split thường phản ánh điều kiện triển khai tốt hơn.
Đưa ABSA vào hệ thống thương mại điện tử thực tế
Model chỉ là một thành phần. Giá trị của ABSA xuất hiện khi output được tích hợp vào pipeline dữ liệu và có thể trả lời các câu hỏi kinh doanh như: sản phẩm nào đang nhận nhiều phản hồi tiêu cực về pin, tỷ lệ complaint về shipping tuần này có tăng không, hay một phiên bản sản phẩm mới có cải thiện sentiment về thiết kế hay không.
Một schema output production có thể lưu:
| Field | Ví dụ |
|---|---|
| review_id | RV_10428 |
| product_id | PHONE_A17 |
| aspect | BATTERY |
| sentiment | negative |
| aspect_score | 0.94 |
| model_version | absa_phobert_v3 |
Việc lưu model version và confidence giúp audit khi model thay đổi. Các prediction có confidence thấp có thể được chuyển sang human review và bổ sung ngược vào tập gán nhãn cho vòng fine-tuning tiếp theo.
Theo dõi drift theo aspect, không chỉ toàn model
Ngôn ngữ review thay đổi theo sản phẩm và xu hướng thị trường. Một từ mới như tên tính năng, model sản phẩm hoặc cách viết tắt mới có thể làm một aspect suy giảm trước các aspect khác. Monitoring vì vậy nên theo dõi F1 hoặc error sample riêng cho từng nhóm aspect.
Ontology cũng cần versioning. Khi doanh nghiệp bắt đầu bán một loại sản phẩm mới, việc thêm aspect vào taxonomy làm thay đổi cả annotation guideline, model head và schema downstream. Không nên coi taxonomy là một danh sách nhãn bất biến.
Kết luận
Xây dựng ABSA cho thương mại điện tử tiếng Việt nên bắt đầu từ ontology và schema output, sau đó mới đến lựa chọn model. Với bài toán category-based ABSA, kiến trúc dùng chung PhoBERT encoder kết hợp multi-label aspect detection và aspect-conditioned sentiment classification là một baseline hiện đại, dễ mở rộng và phù hợp với output dạng aspect–polarity tuple.
Trong production, độ chính xác thực tế phụ thuộc không kém vào word segmentation, quality của annotation, kiểm soát leakage, threshold theo từng aspect và joint evaluation. Một hệ thống tốt không chỉ dự đoán sentiment đúng mà phải xác định đúng khách hàng đang nói về điều gì trước khi quyết định họ cảm thấy thế nào về điều đó.
Đọc thêm trên The CS Note: Bài toán phân tích cảm xúc trong văn bản và Tách từ trong tiếng Việt.
Tài liệu tham khảo
- [1] M. Pontiki, D. Galanis, J. Pavlopoulos, H. Papageorgiou, I. Androutsopoulos, and S. Manandhar, “SemEval-2014 Task 4: Aspect Based Sentiment Analysis,” in Proc. 8th International Workshop on Semantic Evaluation, Dublin, Ireland, 2014, pp. 27–35, doi: 10.3115/v1/S14-2004. ACL Anthology.
- [2] Association for Vietnamese Language and Speech Processing, “VLSP 2018 - Aspect Based Sentiment Analysis (VABSA 2018),” 2018. VLSP.
- [3] Q.-L. Tran, P. T. D. Le, and T.-H. Do, “Aspect-based Sentiment Analysis for Vietnamese Reviews about Beauty Product on E-commerce Websites,” in Proc. 36th Pacific Asia Conference on Language, Information and Computation, Manila, Philippines, 2022, pp. 767–776. ACL Anthology.
- [4] D. Q. Nguyen and A. T. Nguyen, “PhoBERT: Pre-trained Language Models for Vietnamese,” in Findings of the Association for Computational Linguistics: EMNLP 2020, 2020, pp. 1037–1042, doi: 10.18653/v1/2020.findings-emnlp.92. ACL Anthology.
Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.
Nguồn gốc: Xây dựng hệ thống phân loại cảm xúc đa khia cạnh ABSA tiếng Việt cho thương mại điện tử