Chuyển đến nội dung chính

Phân tích cảm xúc tiếng Việt trong NLP: Các case study

Phân tích cảm xúc tiếng Việt (Vietnamese Sentiment Analysis) là bài toán NLP xác định thái độ hoặc quan điểm được thể hiện trong văn bản, phổ biến nhất là tích cực, tiêu cực và trung lập. Bài toán tưởng đơn giản như một phép phân loại văn bản, nhưng khi áp dụng vào review sản phẩm, mạng xã hội hay hội thoại chăm sóc khách hàng, ngữ cảnh, phủ định và cách dùng tiếng Việt khiến kết quả phức tạp hơn đáng kể.

Thay vì chỉ nhìn vào kiến trúc mô hình, bài viết này tập trung vào cách xây dựng hệ thống qua một số case study thực tế: xác định đúng mục tiêu, thiết kế nhãn, chuẩn bị dữ liệu, chọn mô hình và phân tích lỗi.

Bài toán sentiment analysis thực sự dự đoán điều gì?

Ở dạng cơ bản, hệ thống nhận một đoạn văn bản và trả về một nhãn cảm xúc. Ví dụ:

“Máy chạy nhanh, pin tốt và màn hình đẹp.” → Tích cực
“Giao hàng chậm, sản phẩm còn bị trầy.” → Tiêu cực
“Sản phẩm được giao vào sáng thứ Hai.” → Trung lập

Tuy nhiên, một câu có thể chứa nhiều quan điểm cùng lúc. Câu “Camera đẹp nhưng pin khá yếu” vừa tích cực với camera, vừa tiêu cực với pin. Nếu hệ thống chỉ trả về một nhãn cho toàn câu, thông tin này bị nén thành một kết quả duy nhất.

Do đó, trước khi chọn mô hình, cần xác định mức độ phân tích:

  • Document-level: một nhãn cho toàn bộ bài review hoặc tài liệu.
  • Sentence-level: một nhãn cho từng câu.
  • Aspect-based sentiment: xác định cảm xúc đối với từng thuộc tính như giá, pin, giao hàng hoặc dịch vụ.

Sentiment analysis cũng không đồng nghĩa với emotion detection. Sentiment thường tập trung vào polarity như positive/negative, còn emotion detection có thể dự đoán vui, buồn, tức giận, sợ hãi hoặc bất ngờ.

Pipeline phân tích cảm xúc tiếng Việt

Một hệ thống sentiment analysis có thể được mô hình hóa bằng pipeline:

Văn bản → Làm sạch → Tokenization → Biểu diễn văn bản → Mô hình phân loại → Nhãn cảm xúc

Với mô hình Machine Learning truyền thống, văn bản thường được chuyển thành vector bằng Bag of Words hoặc TF-IDF. Một classifier như Logistic Regression hoặc Linear SVM sau đó học mối liên hệ giữa đặc trưng văn bản và nhãn.

Với Deep Learning, các mô hình pretrained dựa trên Transformer có thể tạo biểu diễn phụ thuộc ngữ cảnh tốt hơn. Điều này đặc biệt hữu ích cho những câu mà ý nghĩa không thể xác định chỉ bằng một vài keyword.

Không nên làm sạch quá mức: từ phủ định như “không”, “chẳng”, “chưa” mang thông tin sentiment rất quan trọng. Xóa chúng có thể biến “không tốt” thành “tốt” và đảo hoàn toàn ý nghĩa của câu.

Case study 1: Phân tích đánh giá sản phẩm thương mại điện tử

Giả sử một cửa hàng có hàng nghìn review và muốn biết khách hàng đang hài lòng hay không. Cách đơn giản nhất là xây dựng classifier với ba nhãn: positive, neutral, negative.

Một số review rất dễ phân loại:

Positive: “Đóng gói cẩn thận, sản phẩm đẹp hơn mong đợi.”

Negative: “Mới dùng hai ngày đã không sạc được.”

Neutral: “Hộp gồm một máy và một dây sạc.”

Khó khăn xuất hiện khi review chứa nhiều khía cạnh:

“Máy chạy mượt nhưng pin tụt khá nhanh.”

Sentiment toàn câu: có thể là Mixed hoặc Neutral tùy quy ước dữ liệu.
Aspect “hiệu năng”: Positive.
Aspect “pin”: Negative.

Nếu mục tiêu kinh doanh chỉ là thống kê tỷ lệ review tích cực và tiêu cực, document-level classification có thể đủ. Nhưng nếu đội sản phẩm muốn biết khách hàng đang phàn nàn về điều gì, aspect-based sentiment sẽ hữu ích hơn.

Một pipeline cho trường hợp này có thể gồm hai bước: đầu tiên phát hiện aspect như pin, camera, giá, giao hàng; sau đó dự đoán sentiment riêng cho từng aspect.

Case study 2: Sentiment trên mạng xã hội

Mạng xã hội là môi trường khó hơn đáng kể vì văn bản thường ngắn, không chuẩn hóa và chứa tiếng lóng, viết tắt hoặc cách diễn đạt mỉa mai.

Văn bản Vấn đề
“sp xịn nha” Viết tắt và ngôn ngữ không chuẩn.
“Đợi có mỗi 3 tiếng thôi mà :)” Có thể mang tính mỉa mai.
“UI đẹp nhưng lag kinh” Trộn tiếng Anh và tiếng Việt, sentiment trái chiều.
“Không phải là không tốt” Cấu trúc phủ định kép.

Chuẩn hóa văn bản có thể giúp xử lý một số biến thể như “ko”, “k”, “khum” thành “không”, nhưng không nên biến preprocessing thành một tập luật quá lớn. Slang thay đổi theo cộng đồng và thời gian, trong khi Transformer có thể học được nhiều biến thể trực tiếp nếu dữ liệu huấn luyện đủ phù hợp.

Một vấn đề khác là domain shift: mô hình huấn luyện trên review thương mại điện tử chưa chắc hoạt động tốt trên bình luận mạng xã hội. Cách viết, độ dài câu và phân bố từ vựng của hai miền dữ liệu khác nhau.

Case study 3: Ưu tiên ticket chăm sóc khách hàng

Trong hệ thống hỗ trợ khách hàng, sentiment có thể được dùng như một tín hiệu để ưu tiên các ticket cần xử lý sớm. Ví dụ:

“Tôi đã báo lỗi ba lần nhưng tài khoản vẫn bị khóa.”
→ Negative sentiment
→ Có khả năng cần ưu tiên kiểm tra

Tuy nhiên, negative không đồng nghĩa với urgent. Câu “Tôi không thích màu của giao diện mới” mang sentiment tiêu cực nhưng mức độ khẩn cấp thấp. Ngược lại, “Tài khoản của tôi vừa xuất hiện giao dịch lạ” có thể rất khẩn cấp dù người dùng không sử dụng từ ngữ cảm xúc mạnh.

Một thiết kế tốt hơn là sử dụng hai mô hình hoặc hai output riêng:

  • Sentiment: positive / neutral / negative.
  • Urgency: low / medium / high.

Sau đó hệ thống routing có thể kết hợp hai tín hiệu cùng loại vấn đề, giá trị khách hàng hoặc trạng thái ticket để quyết định mức ưu tiên.

Demo với TF-IDF và Logistic Regression

Một baseline đơn giản cho sentiment analysis là kết hợp TF-IDF với Logistic Regression. Ví dụ dưới đây chỉ dùng tập dữ liệu nhỏ để minh họa pipeline; hệ thống thực tế cần nhiều dữ liệu đã gán nhãn hơn và phải có tập validation/test độc lập.

from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

texts = [
    "sản phẩm rất tốt",
    "máy chạy nhanh và ổn định",
    "dịch vụ rất hài lòng",
    "sản phẩm bị lỗi",
    "giao hàng quá chậm",
    "trải nghiệm rất tệ",
    "sản phẩm màu đen",
    "đơn hàng đến hôm nay",
    "hộp có kèm dây sạc"
]

labels = [
    "positive", "positive", "positive",
    "negative", "negative", "negative",
    "neutral", "neutral", "neutral"
]

model = make_pipeline(
    TfidfVectorizer(ngram_range=(1, 2)),
    LogisticRegression(max_iter=1000)
)

model.fit(texts, labels)

prediction = model.predict(
    ["máy dùng rất tốt"]
)

print(prediction[0])

TF-IDF biến từ và cụm từ thành đặc trưng số dựa trên mức độ quan trọng của chúng trong tập dữ liệu. Với ngram từ 1 đến 2, mô hình có thể học cả unigram như “tốt” và bigram như “rất tốt” hay “quá chậm”.

Baseline này có lợi thế là nhanh, dễ debug và dễ dùng làm mốc so sánh. Hạn chế chính là khả năng hiểu ngữ cảnh dài, mỉa mai hoặc những cấu trúc như “không hẳn là tệ” còn yếu.

Đánh giá mô hình: accuracy chưa đủ

Nếu dữ liệu mất cân bằng, accuracy có thể gây hiểu nhầm. Ví dụ, khi phần lớn review là positive, một mô hình thiên về dự đoán positive vẫn có accuracy cao nhưng nhận diện negative kém.

Nên theo dõi thêm:

  • Precision: trong các mẫu mô hình dự đoán thuộc một lớp, bao nhiêu mẫu đúng.
  • Recall: trong các mẫu thực sự thuộc lớp đó, mô hình phát hiện được bao nhiêu.
  • F1-score: cân bằng giữa precision và recall.
  • Confusion matrix: cho biết mô hình thường nhầm lớp nào với lớp nào.

Ngoài metric tổng hợp, nên tạo một error set chứa các nhóm khó như phủ định, slang, câu hỗn hợp, mỉa mai và câu rất ngắn. Việc đọc trực tiếp lỗi thường giúp cải thiện hệ thống hiệu quả hơn chỉ nhìn vào một con số duy nhất.

Kết luận

Phân tích cảm xúc tiếng Việt không chỉ là chọn một classifier rồi gán nhãn positive hoặc negative. Chất lượng hệ thống phụ thuộc mạnh vào cách định nghĩa nhãn, domain dữ liệu, xử lý phủ định, sentiment theo từng aspect và cách đánh giá lỗi.

Với bài toán nhỏ, TF-IDF kết hợp Logistic Regression là một baseline thực dụng. Khi dữ liệu lớn hơn hoặc ngôn ngữ có nhiều ngữ cảnh phức tạp, mô hình Transformer có thể phù hợp hơn, nhưng vẫn cần dữ liệu đúng domain và quy trình đánh giá cẩn thận để kết quả có giá trị trong ứng dụng thực tế.

© The CS Note · THE CS NOTE

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: Phân tích cảm xúc tiếng Việt trong NLP: Các case study

Về trang chủ Về đầu bài

Bài Đăng Phổ Biến

Bài toán tháp Hà nội

Trải nghiệm Tháp Hà Nội Kéo thả đĩa hoặc chạm vào các nút bên dưới để di chuyển. Bạn phải chuyển toàn bộ đĩa sang cột ngoài cùng bên phải (Cột 3) mà không đặt đĩa to lên đĩa nhỏ. Cột 1 Cột 2 Cột 3 Điều khiển & Chế độ Số lượng đĩa 4 Tốc độ máy giải ↪ Undo ↻ Chơi lại 🤖 Máy tự giải Thống kê ván chơi Nước đã đi 0 Thời gian 00:00 Tối thiểu cần 15 Kỷ lục của bạn - Lịch sử và Nguồn gốc Truyền thuyết Bài toán Tháp Hà Nội (hay Tháp Brahma) là một trò chơi xếp hình toán học kinh điển được giới thiệu lần đầu vào năm 1883 bởi nhà toán học người Pháp Édouard L...

Bài toán phân tích cảm xúc trong văn bản

Bài toán phân tích cảm xúc (sentiment analysis) là một bài toán NLP nhằm xác định thái độ hoặc cảm xúc được thể hiện trong văn bản. Ví dụ, từ một đánh giá như “Điện thoại đẹp, chạy nhanh nhưng pin hơi yếu”, hệ thống có thể nhận biết rằng người dùng có cả nhận xét tích cực và tiêu cực. Điểm thú vị của bài toán nằm ở khoảng cách giữa cách con người hiểu ngôn ngữ và cách máy tính xử lý dữ liệu. Một hệ thống phân tích cảm xúc cần biến văn bản tự nhiên thành dữ liệu có cấu trúc, học được các mẫu ngôn ngữ từ dữ liệu huấn luyện và đưa ra dự đoán hợp lý trên những câu chưa từng gặp. 1. Bài toán phân tích cảm xúc bắt đầu từ đâu? Hãy tưởng tượng một cửa hàng trực tuyến có hàng nghìn đánh giá mỗi ngày. Con người có thể đọc từng đánh giá để biết khách hàng hài lòng hay không, nhưng việc này nhanh chóng trở nên tốn thời gian khi dữ liệu tăng lên. NLP có thể biến bài toán đó thành một bài toán phân loại. Với mỗi văn bản, hệ thống nhận vào một chuỗi ký...

KAN cho phân đoạn khối u não với bộ BraTS 2020

Kolmogorov-Arnold Network (KAN) mở ra một hướng khác với MLP truyền thống: thay vì chỉ học các trọng số vô hướng trên mỗi kết nối, KAN có thể học những hàm phi tuyến một biến trên các cạnh . Khi đưa ý tưởng này vào kiến trúc encoder-decoder như U-Net, ta có thể sử dụng convolution để giữ cấu trúc không gian của ảnh MRI và dùng KAN để thực hiện các phép biến đổi phi tuyến mạnh hơn trên representation trung gian. Một bài toán phù hợp để nghiên cứu hướng này là phân đoạn u thần kinh đệm trên BraTS 2020 . Dataset cung cấp MRI đa mô thức và yêu cầu xác định các vùng Whole Tumor (WT), Tumor Core (TC) và Enhancing Tumor (ET). Đây là bài toán 3D có sự mất cân bằng voxel lớn, hình dạng khối u rất đa dạng và ranh giới giữa các mô bệnh lý không đơn giản. Lưu ý học thuật quan trọng: U-KAN gốc được công bố cho nhiều benchmark phân đoạn ảnh y tế nhưng không báo cáo kết quả BraTS 2020. Một công trình sau đó đã mở rộng U-KAN sang 3D MRI brain tumor segmentation , nhưng đánh giá trên BraTS 2...

Tách từ trong tiếng Việt Word Segmentation

Tách từ tiếng Việt là bài toán xác định ranh giới giữa các từ trong một chuỗi văn bản. Khó khăn nằm ở chỗ khoảng trắng trong tiếng Việt thường phân cách các âm tiết , nhưng một từ hoàn chỉnh có thể gồm nhiều âm tiết như “sinh viên” , “đại học” , “công nghệ” hay “tự nhiên” . Tách từ đúng giúp các hệ thống NLP dựa trên từ biểu diễn văn bản hợp lý hơn, đặc biệt trong tìm kiếm, TF-IDF, phân loại văn bản, gán nhãn từ loại và một số mô hình ngôn ngữ tiếng Việt. Tuy nhiên, với các Transformer sử dụng tokenizer dưới mức từ như subword hoặc SentencePiece, tách từ thủ công không phải lúc nào cũng là bước bắt buộc . Việc có cần tách từ trước hay không phụ thuộc vào mô hình và pipeline cụ thể. Tóm tắt nội dung Khoảng trắng trong tiếng Việt không phải lúc nào cũng là ranh giới từ ; nhiều từ gồm hai hoặc nhiều âm tiết. Word segmentation và tokenization có liên quan nhưng không hoàn toàn đồng nghĩa. Ba hướng chính gồm dựa trên từ điển, mô hình thống kê và mô hình học sâu . Tron...

KAN là gì? Mạng Kolmogorov-Arnold khác MLP thế nào?

Kolmogorov-Arnold Network (KAN) là một kiến trúc mạng nơ-ron trong đó mỗi cạnh không chỉ chứa một trọng số vô hướng mà mang một hàm một biến có thể học được . Đây là khác biệt cốt lõi so với Multi-Layer Perceptron (MLP), nơi các cạnh chủ yếu thực hiện phép nhân với trọng số còn hàm kích hoạt thường được áp dụng tại các node. KAN được lấy cảm hứng từ định lý biểu diễn Kolmogorov-Arnold và đặc biệt đáng chú ý trong các bài toán xấp xỉ hàm, mô hình hóa khoa học và symbolic regression. Tuy nhiên, KAN không nên được hiểu là kiến trúc đã thay thế MLP trong mọi bài toán Deep Learning; khả năng biểu diễn, chi phí tính toán và mức độ phù hợp của hai kiến trúc khác nhau theo từng nhiệm vụ. Tóm tắt nội dung MLP học chủ yếu trọng số trên các cạnh , còn KAN đặt hàm một biến học được trên từng cạnh . Một KAN layer cộng kết quả của nhiều hàm cạnh để tạo activation của node tiếp theo. KAN gốc sử dụng B-spline để tham số hóa các hàm phi tuyến trên cạnh. KAN có lợi thế đáng chú ý về trực...