Chủ Nhật, 27 tháng 5, 2018

Sử dụng thuật toán máy học Naïve Bayes để đánh giá bình luận

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

 

2 nhận xét:

  1. 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ứ:

    predict_neg_prob += predict_neg_prob*1.0/negWordCount;
    predict_pos_prob += predict_pos_prob*1.0/posWordCount;

    Trả lờiXóa
    Trả lời
    1. Đâ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