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

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ý tự và trả về một hoặc nhiều nhãn cảm xúc.

Ví dụ dữ liệu:
“Sản phẩm đẹp, đóng gói cẩn thận và giao hàng nhanh” → positive
“Chất lượng quá kém, dùng vài ngày đã hỏng” → negative
“Sản phẩm đúng mô tả, chất lượng ở mức bình thường” → neutral

Đây là dạng sentiment classification, trong đó mô hình học cách ánh xạ từ văn bản sang nhãn. Bài toán có thể là nhị phân, chẳng hạn positive/negative, hoặc nhiều lớp như positive/neutral/negative.


Tuy nhiên, chỉ gán một nhãn cho cả câu đôi khi chưa đủ. Câu “Camera chụp đẹp nhưng pin quá yếu” chứa hai ý trái chiều. Nếu mục tiêu là hiểu chi tiết trải nghiệm người dùng, chúng ta cần biết camera được đánh giá tích cực còn pin được đánh giá tiêu cực.

Ý tưởng quan trọng: sentiment analysis cơ bản trả lời “Câu này mang cảm xúc gì?”, còn aspect-based sentiment analysis có thể trả lời sâu hơn “Thuộc tính nào được đánh giá và thuộc tính đó được đánh giá như thế nào?”.

2. Từ văn bản thực tế đến dữ liệu có thể học

Machine Learning không thể trực tiếp hiểu một chuỗi ký tự theo cách con người hiểu. Mô hình cần dữ liệu số để thực hiện các phép tính. Vì vậy, pipeline thường bắt đầu bằng việc thu thập văn bản, xác định nhãn và chuyển văn bản thành biểu diễn số.

Giả sử chúng ta có ba câu:

A. “Món ăn rất ngon và phục vụ nhanh” → positive
B. “Món ăn nguội và phục vụ rất chậm” → negative
C. “Món ăn bình thường, không có gì đặc biệt” → neutral

Khi xây dựng dataset, mỗi dòng thường có ít nhất hai thành phần: text và label. Chất lượng của nhãn rất quan trọng vì mô hình sẽ học trực tiếp từ những ví dụ này.

Dữ liệu thực tế thường khó hơn ví dụ trên. Người dùng có thể viết “sp dùng ok”, “dịch vụ quá tệ!!!”, “không phải ngon bình thường đâu”, hoặc kết hợp nhiều cách viết trong cùng một câu. Nếu dữ liệu huấn luyện chỉ chứa các câu chuẩn, mô hình có thể gặp khó khăn khi xử lý những biểu đạt khác biệt.

Lưu ý về dữ liệu: Không nên mặc định rằng càng làm sạch văn bản nhiều thì mô hình càng tốt. Một số thông tin như dấu “!”, từ phủ định hoặc cách viết nhấn mạnh có thể mang tín hiệu cảm xúc và việc loại bỏ chúng cần có lý do.

3. Văn bản được biến thành đặc trưng như thế nào?

Một cách đơn giản và dễ hiểu là sử dụng TF-IDF (Term Frequency–Inverse Document Frequency). Ý tưởng là biểu diễn mỗi văn bản bằng một vector số dựa trên các từ xuất hiện trong tập dữ liệu.

Ví dụ, nếu tập dữ liệu chứa các từ “ngon”, “tệ”, “chậm”, “nhanh”, “đẹp”, mô hình có thể tạo một không gian đặc trưng tương ứng với những từ này. Một câu chứa “ngon” sẽ có giá trị đặc trưng liên quan đến từ đó.

TF-IDF không đơn giản chỉ đếm số lần xuất hiện. Một từ xuất hiện trong nhiều văn bản sẽ ít có khả năng phân biệt các văn bản, trong khi một từ xuất hiện thường xuyên ở một văn bản nhưng hiếm trong toàn bộ tập dữ liệu có thể nhận trọng số cao hơn.

Ví dụ trực quan:

Nếu từ “và” xuất hiện gần như trong mọi câu, nó khó giúp phân biệt cảm xúc. Ngược lại, những từ như “tuyệt”, “thất vọng”, “hỏng”, “hài lòng” có thể mang nhiều thông tin hơn cho bài toán sentiment.

Với tiếng Việt, cách biểu diễn còn liên quan đến vấn đề tách từ. Chẳng hạn “chất lượng”, “giao hàng” và “không hài lòng” là những cụm có ý nghĩa quan trọng. Cách tách từ tiếng việt (word segmentation/tokenization)  không phù hợp có thể làm mất một phần thông tin ngữ nghĩa.

4. Xây dựng mô hình phân tích cảm xúc đầu tiên

Với một bài toán học tập hoặc baseline, có thể kết hợp TF-IDF với Logistic Regression. Logistic Regression là một mô hình phân loại phổ biến, có thể học mối quan hệ giữa các đặc trưng văn bản và nhãn.

Ví dụ dưới đây sử dụng một dataset rất nhỏ để minh họa pipeline. Dataset thực tế cần nhiều dữ liệu hơn và phải được chia thành tập huấn luyện, validation hoặc kiểm tra tùy quy trình.

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

texts = [
    "Sản phẩm rất tốt và dễ sử dụng",
    "Dịch vụ chậm và trải nghiệm rất tệ",
    "Chất lượng tốt, tôi rất hài lòng",
    "Sản phẩm nhanh hỏng và khó sử dụng"
]

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

model = make_pipeline(
    TfidfVectorizer(),
    LogisticRegression()
)

model.fit(texts, labels)

result = model.predict([
    "Tôi rất hài lòng với sản phẩm"
])

print(result)

Về mặt pipeline, TfidfVectorizer đảm nhiệm việc chuyển văn bản thành vector TF-IDF. Sau đó, Logistic Regression nhận các vector này để học ranh giới giữa các lớp cảm xúc.

Với câu “Tôi rất hài lòng với sản phẩm”, mô hình có xu hướng dự đoán positive vì các đặc trưng liên quan đến “hài lòng” gần với những ví dụ positive trong dữ liệu huấn luyện. Đây là cách nhìn đơn giản nhưng rất hữu ích để hiểu bản chất của một pipeline sentiment classification.

5. Những trường hợp khiến mô hình dễ mắc lỗi

Một trong những khó khăn lớn nhất là phủ định. Hai câu “Sản phẩm tốt” và “Sản phẩm không tốt” chỉ khác một từ nhưng mang ý nghĩa trái ngược. Nếu cách biểu diễn văn bản không giữ được quan hệ giữa từ phủ định và từ cảm xúc, mô hình có thể dự đoán sai.

Ví dụ:
“Phim rất hay” → positive
“Phim không hay” → negative
“Không hẳn là hay” → có thể khó hơn nhiều

Một trường hợp khác là mỉa mai. Câu “Dịch vụ tuyệt vời, chờ ba tiếng mới được phục vụ” chứa từ “tuyệt vời” nhưng toàn bộ ngữ cảnh có thể thể hiện sự không hài lòng. Mô hình chỉ dựa vào các từ riêng lẻ sẽ dễ bị đánh lừa.

Câu có nhiều khía cạnh cũng tạo ra thách thức. “Màn hình đẹp nhưng loa quá nhỏ” có thể được xem là vừa positive vừa negative. Nếu hệ thống bắt buộc chọn đúng một nhãn cho toàn bộ câu, thông tin về hai khía cạnh sẽ bị nén thành một kết quả duy nhất.

Đây là lý do các mô hình hiện đại thường cố gắng tận dụng ngữ cảnh thay vì chỉ xem xét từng từ độc lập.

6. Đánh giá mô hình: Accuracy chưa phải toàn bộ câu chuyện

Sau khi huấn luyện, cần kiểm tra mô hình trên dữ liệu mà nó chưa được dùng để học. Một chỉ số phổ biến là accuracy, tức tỷ lệ dự đoán đúng trên tổng số mẫu.

Tuy nhiên, accuracy có thể gây hiểu nhầm khi dữ liệu mất cân bằng. Ví dụ, nếu 95% dữ liệu là positive và chỉ 5% là negative, một mô hình luôn dự đoán positive có thể đạt accuracy cao nhưng gần như không phát hiện được negative.

Vì vậy, cần xem thêm precision, recall và F1-score. Precision trả lời “Trong các mẫu mô hình dự đoán là một lớp, có bao nhiêu mẫu thực sự thuộc lớp đó?”, còn recall tập trung vào khả năng tìm ra các mẫu thực sự thuộc lớp.

Ví dụ thực tế: Nếu mục tiêu là phát hiện các phản hồi tiêu cực để đội chăm sóc khách hàng xử lý, bỏ sót một lượng lớn phản hồi negative có thể nghiêm trọng hơn việc thỉnh thoảng gắn nhãn nhầm một phản hồi trung tính thành negative. Khi đó, recall của lớp negative có thể đặc biệt đáng quan tâm.

7. Khi nào nên dùng Machine Learning truyền thống và khi nào cần Transformer?

TF-IDF kết hợp Logistic Regression là điểm bắt đầu tốt vì pipeline ngắn, dễ kiểm tra và dễ hiểu. Nó đặc biệt hữu ích khi cần xây dựng baseline hoặc khi dữ liệu có cấu trúc tương đối đơn giản.

Khi văn bản chứa nhiều ngữ cảnh, phủ định, câu dài hoặc cách diễn đạt đa dạng, các mô hình dựa trên Transformer có thể phù hợp hơn. Transformer sử dụng cơ chế attention để mô hình hóa quan hệ giữa các token trong ngữ cảnh thay vì chỉ dựa vào trọng số độc lập của từng từ.

Tiêu chí TF-IDF + Logistic Regression Transformer
Triển khai Đơn giản Phức tạp hơn
Chi phí tính toán Thường thấp hơn Thường cao hơn
Xử lý ngữ cảnh Hạn chế hơn Mạnh hơn
Phù hợp để làm baseline Rất phù hợp Có thể nhưng thường phức tạp hơn

Không nên hiểu rằng Transformer luôn là lựa chọn tốt nhất. Một mô hình đơn giản nhưng phù hợp dữ liệu, nhanh và dễ bảo trì có thể có giá trị hơn một mô hình phức tạp nếu yêu cầu sản phẩm không cần khả năng hiểu ngữ cảnh quá sâu.

8. Từ mô hình NLP đến ứng dụng thực tế

Sau khi có mô hình, kết quả sentiment có thể được đưa vào các hệ thống lớn hơn. Ví dụ, một nền tảng thương mại điện tử có thể tổng hợp hàng nghìn review để theo dõi xu hướng phản hồi về sản phẩm.

Một pipeline thực tế có thể hoạt động như sau:

Review khách hàng → Tiền xử lý → Model NLP → Nhãn cảm xúc → Dashboard / hệ thống cảnh báo

Ví dụ, nếu nhiều review mới liên tục chứa phản hồi tiêu cực liên quan đến “giao hàng”, doanh nghiệp có thể phát hiện đây là một vấn đề cần kiểm tra. Nếu kết hợp thêm aspect-based sentiment analysis, hệ thống có thể phân biệt vấn đề nằm ở giao hàng, chất lượng sản phẩm, giá hay dịch vụ hỗ trợ.

Tuy nhiên, kết quả của mô hình không nên mặc nhiên được xem là sự thật tuyệt đối. Một hệ thống tốt cần theo dõi lỗi, kiểm tra dữ liệu mới và đánh giá lại mô hình khi domain hoặc cách người dùng diễn đạt thay đổi.

Kết luận: học sentiment analysis từ bài toán đến pipeline

Bài toán phân tích cảm xúc có thể được nhìn như một chuỗi bước rõ ràng: xác định mục tiêu, xây dựng dữ liệu có nhãn, biến văn bản thành đặc trưng, huấn luyện mô hình và đánh giá trên dữ liệu chưa thấy. Ví dụ đơn giản với TF-IDF và Logistic Regression giúp làm rõ toàn bộ quy trình mà không cần bắt đầu ngay bằng một mô hình phức tạp.

Khi bài toán thực tế xuất hiện nhiều phủ định, mỉa mai, ngữ cảnh hoặc nhiều khía cạnh trong cùng một câu, cần lựa chọn phương pháp NLP phù hợp hơn. Quan trọng nhất là không chỉ hỏi “mô hình nào mạnh?”, mà phải hỏi “dữ liệu là gì, mục tiêu là gì và loại lỗi nào thực sự quan trọng?”.

© 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: Bài toán phân tích cảm xúc trong văn bản

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...

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...