Sử dụng thuật toán máy học Naïve Bayes để đánh giá bình luận
Tác giả: Lê Hùng Sơn
Mục đích:
Nội dung bài này định hướng việc phân loại thông tin của một tập lớn dữ liệu dựa trên phương pháp dự đoán hay gợi ý sử dụng thuật toán Naïve Bayes. Cụ thể, nội dung bài viết sẽ thực hiện phân loại bình luận tôt hay chưa tốt thông qua việc phân tích các thông tin thể hiện trong câu bình luận nhằm hỗ trợ cơ chế trong việc xây dựng hệ thống đánh giá, phân loại thông tin nhằm hạn chế bớt sự phức tạp khi xử lý ngôn ngữ tự nhiên.
Thuật toán Naïve Bayes
Naïve Bayes là một thuật toán máy học đơn giản nhưng mạnh mẽ hỗ trợ trong việc dùng xác suất để phân loại dữ liệu. Thuật toán này thông thường được dùng ở trong các hệ thống gợi ý hoặc dự đoán.
Cơ chế hoạt động của Naïve Bayes
Thuật toán này dựa trên đinh lý Bayes với công thức tổng quát là:
Với:
·
là xác suất để xảy ra giả
thuyết
với đầu vào là tập dữ liệu
ngẫu
nhiên cần dự
đoán
.
· là xác suất xảy ra của bản
thân giả thuyết
mà không quan tâm đến x.
· là xác suất xảy ra x khi biết H xảy
ra, gọi là “xác suất của x nếu có H”.
·
là xác suất xảy ra của riêng tập
dữ liệu dự đoán
.
Tổng quát:
Ví dụ:
Khi có thông báo về dự báo thời tiết, câu hỏi đặt ra ở đây là chúng ta cần phán đoán nội dung để đưa ra quyết định là có nên đi đá banh hay không.
Chúng ta thực hiện phân tích câu thông báo để tìm các từ quan trọng và mapping với các quyết định dự kiến và tổ chức thành bảng dữ liệu bên dưới
Từ Quan Trọng |
Giả thuyết về quyết định |
Nắng |
Đi |
Râm |
Đi |
Sương mù |
Không đi |
Mưa |
Không đi |
Âm u |
Không đi |
Áp dụng công thức đã nêu ở trên, chúng ta tính toán được các giá trị như sau
· P(“đi”) = (số từ “đi”) / (tổng số từ trong giả thuyết) = 2 / 5 = 0.4
· P(“không đi”) = (số từ “không đi”) / (tổng số từ trong giả thuyết) = 3 / 5 = 0.6
Giả sử đầu vào là câu “trời nắng đẹp”
Tính xác suất:
· P(“đi” | “nắng”) = P(“đi”) * (số từ “nắng” mà có giải thuyết “đi”) / (số từ có giả thuyết “đi”) = 0.4 * (1 / 2) = 0.2
· P(“không đi” | “nắng”) = P(“không đi”) * (số từ “nắng” mà có giả thuyết “không đi”) / (số từ trong giả thuyết “không đi”) = 0.6 * (0 / 3) = 0.0
Vói kết quả tính toán trên, chúng ta nhận thấy rằng: P(“đi” | “nắng”) > P(“không đi” | “nắng” ) è ở bước dự đoán chúng ta được gợi ý “nên đi đá banh”.
Điểm mạnh Naïve Bayes:
· Dễ dàng và nhanh chóng để dự đoán và phân lớp dữ liệu thành các nhóm khác nhau.
· Dự đoán đa lớp với độ chính xác cao
· Naive Bayes thực hiện tốt hơn so với các mô hình khác như hồi quy và cần ít dữ liệu training.
Một số hạn chế:
· Khi tiến hành dự đoán một tập dữ liệu mà không hề có trong bộ đã được training thì xác suất này được xác định là 0.
· Việc bộ dữ liệu về các lớp phân loại không đồng đều sẽ dẫn đến dự đoán sai. Giả sử trong một câu có hai từ thuộc “khen” và “chê” thì hệ thống sẽ dự đoán nó nghiêng hẵn một hướng nếu số lượng tập dữ liệu đã được train trong hệ thống chúng ta có lượng từ tích cực (khen, tốt) vượt trội hơn lượng từ không tích cực (phê bình, không tốt) hoặc ngược lại.
Ứng dụng:
1. Real time Prediction: Tốc độ của thuật toán phân loại có thể giúp nó sử dụng trong việc ra quyết định trong thời gian thực.
2. Multi class Prediction: Bản chất thuật toán là phân loại và dự đoán rồi chia thành nhiều lớp.
3. Sentiment Analysis: Naïve Bayes được sử dụng trong phân loại ngôn ngữ tự nhiên và cho kết quả tốt hơn so với một số thuật toán khác. Bên cạnh đó còn phân loại được spam-mail và nhận định được bình luận tích cực hay không tích cực trong mạng xã hội.
4. Recommendation System: các hệ thống gợi ý hoạt động dựa trên dự đoán.
Thực thi
Trở lại với bài toán chính trong bài viết này là phân tích bình luận mang nội dung tích cực hay tiêu cực.
Dữ liệu sẽ được tổ chức trong 3 file .txt như sau:
· File pos.txt lưu danh sách các từ được cho là mang nội dung tích cực (khen, tốt). Mỗi từ được lưu trên một dòng.
· File neg.txt lưu danh sách các từ được cho là mang nội dung không tích cực (phê bình, không tốt). Tương tự như tập tin pos.txt, mỗi từ cũng được viết trên một dòng.
· File data.txt lưu danh sách các bình luận như là input đầu vào của tập dữ liệu cần xử lý để dự đoán hay xác định các nội dung tiêu cực hay tích cực. Thực tế ứng dụng của việc này là sử dụng các bình luận từ các trang web review phim, review các địa điểm ăn uống để làm tập xử lý đưa ra dự đoán để hỗ trợ việc ra quyết định.
Các bước thực hiện
· Bước 1: Load dữ liệu
Với dữ liệu bình luận tích cực (khen) và bình luận tiêu cực (đánh giá không tốt), chúng ta lưu tương ứng vào hai HashSet posWord và negWord. Ngoài ra, chúng ta cũng cần tạo một bộ từ điển HashSet dictionary để là nơi chứa toàn bộ các dữ liệu bình luận nhằm hỗ trợ tìm hết tất cả các từ khóa có trong tập đánh giá có trong chuỗi phân tích hay không để thống kê và đưa ra dự đoán.
Thực hiện khởi tạo và load dữ liệu từ 02 tập tin thể hiện bình luận tích cực và tiêu cực vào 02 HashSet posWord và negWord tương ứng
Thực hiện đưa các dữ liệu cần phân tích vào List dtWord:
· Bước 2: Tiền xử lý
Tính toán xác suất xuất hiện giả thuyết tích cực (posProb) và giả thuyết tiêu cực (negProb). Hai giá trị này thực hiện áp dụng công thức đã nêu bằng cách lấy số từ trong giả thuyết chia cho tổng số từ (totWordCount).
· Bước 3: Tính xác suất khen / chê
Lấy các bình luận trong danh sách dtWord ra và tiến hành tính xác suất là tích cực hay tiêu cực. Hai biến là predict_neg_prob ứng với xác suất là bình luận tiêu cực và predict_pos_prob ứng với xác suất là bình luận tích cực.
· Bước 4: Làm mịn và đưa ra dự đoán
Nếu không có từ tích cực nào thì sửa xác suất nó thành 0. Tương tự với xác suất tiêu cực.
Sau đó đưa ra dự đoán:
Kết quả thực thi của chương trình test này như sau
Cải tiến:
Tùy theo định hướng, mục đích khai thác dữ liệu có thể phân loại lên thành nhiều lớp (classifier) hơn không chỉ mỗi hai loại khen / chê.
Ví dụ ở đây bình luận một quán café tôi chia làm 10 loại bình luận khen, chê dựa vào 5 tiêu chí: không gian, giá cả, chất lượng, dịch vụ, vị trí.
Tuy nhiên cách code và bộ dữ liệu cần thiết lớn và phức tạp hơn.
Tất cả dữ liệu trên hoàn toàn tự sinh dựa trên đánh giá các bình luận về quán.
Chúc quí vị có thể áp dụng thành công thuật toán này vào trong việc phát triển ứng dụng của qui vị trong việc phân tích và đánh giá.
Tham khảo:
http://suruchifialoke.com/2017-06-10-sentiment-analysis-movie/
https://nlp.stanford.edu/courses/cs224n/2004/huics_kgoel_final_project.htm
Mình không biết blog còn hoạt động không nữa nhưng mà "Bước 3: Tính xác suất khen / chê" có vẻ sai sai. Chúng ta phải cộng dồn xác suất lại chứ:
Trả lờiXóapredict_neg_prob += predict_neg_prob*1.0/negWordCount;
predict_pos_prob += predict_pos_prob*1.0/posWordCount;
Đây là giải pháp gợi ý để làm. Bạn có thể dùng bất kỳ giải pháp nào để tính tốt hơn. Cám ơn đã góp ý
Xóa