, May 25, 2022

0 kết quả được tìm thấy

Tìm hiểu Naive Bayes Classification - Phần 1

  • Đăng bởi  Nga Vu
  •  Apr 08, 2022

  •   10 min reads
Tìm hiểu Naive Bayes Classification - Phần 1
Series bài dịch các thuật toán đơn giản dễ hiểu

Chào mừng bạn đến với Supervied Learning (Học có giám sát), chúng ta sẽ bắt đầu với một ví dụ nho nhỏ, tạo cơ sở cho cuộc thảo luận về các vấn đề nêu ra trên tiêu đề. Tiếp đó chúng ta sẽ nói về một và khái niệm toán học như xác suất hậu nghiệm (posterior probability) hay còn được gọi là định lý Bayes (Bayes Thorem).

Chương này được chia thành 2 phần:

  • Phần một: mô tả cách hoạt động của Bayes Classifier (Thuật toán phân loại áp dụng định lý Bayes).
  • Phần hai: bao gồm một bài tập lập trình bằng Python sử dụng thư việnsklearn, thư viện này đã triển khai sẵn thuật toán Naive Nayes Classifier cho bạn rồi, không cần code lại thuật toán từ đầu. Sau đó chúng ta sẽ nói về độ chính xác của model (mô hình) đã train (học).

Hãy tưởng tượng 2 người Alice và Bob, mỗi người có cách sử dụng khác nhau mà bạn đã quen thuộc trước đó. Để cho ví dụ đơn giản nhất có thể thì Alice thường kết hợp 3 từ sau với nhau : love, great, wonderful, trong khi đó Bob lại hay sử dụng: dog, ball, wonderful.

Nếu bạn nhận được một email ẩn danh (anonymous email), người gửi ẩn danh ấy có thể là Bob hay Alice. Email có nội dung như sau: I love beach sand. Additionally the sunset at beach offers wonderful view.

Bạn có thể đoán được người gửi là ai không ? Đoán thử xem !

Nếu bạn đoán Alice là người gửi thì bạn đúng rồi đó. Có lẽ là vì bạn thấy các từ như love, wonderful, Alice thường sử dụng kết hợp các từ này.

Bây giờ chúng ta sẽ thêm vào tổ hợp xác suất cho các từ đó, giả sử xác suất mà Alice và Bod sử dụng các từ giống như hình minh họa bên dưới. Bạn có thể đoán ai là người gửi nếu nội dung email là Wonderful Love

Probability of word usage of Alice and Bob

Bạn đoán được không ?

Nếu bạn nghĩ đó là Bob, thì lại chính xác nữa rồi. Nếu bạn biết công thức toán học để tính ra được thì thật tuyệt vời. Nếu không, không sao cả, chúng ta sẽ cùng nói về nó trong phần sau đây, cách áp dụng định lý Bayes.

1. Định lý Bayes

Bayes Theorem

Nó cho chúng ta biết tần suất của A xảy ra dựa trên điều kiện là B đã xảy ra, viết tắt là P(A|B) , khi mà chúng ta biết tần suất B xảy ra với điều kiện A đã xảy ra P(B|A), xác suất A xảy ra P(A), B xảy ra P(B).

  • P(A|B) is Probability of A given B, the probability of A given that B happens
  • P(A) is Probability of A
  • P(B|A) is Probability of B given A, the probability of B given that A happens
  • P(B) is Probability of B

Giả sử P(Fire) là xác suất cháy , P(Smoke) là xác suất có khói.

P(Fire|Smoke) : Nếu có khỏi thì xác suất có lửa là bao nhiêu

P(Smoke|Fire): Nếu có lửa thì xác suất có khói là bao nhiêu

Ví dụ: Nếu đám chạy nguy hiểm hiếm gặp là  1%, khói thì khá là phổ biến tỉ lệ  10% do các nhà máy gây nên, 90% những đám cháy nguy hiểm đều có khói thì:

P(Smoke) = 10%, P(Fire) = 1%

P(Smoke|Fire) = 90%

Theo công thức ta có P(Fire|Smoke) = (0.9*0.01)/0.1 = 9%

Kết luận: Khi thấy nhà máy có khỏi thì 9% trong đó là đám cháy nguy hiểm.

Bây giờ bạn có thể áp dụng nguyên lý này cho Alice và Bob ? Hãy cùng mình đi đến các phần tiếp theo

2. Naive Bayes Classifier

Naive Bayes là một trong nhóm các thuật toán áp dụng định lý Bayes với một giả định khá ngây thơ - đúng nghĩa đen của từ Naive , rằng mọi features đầu vào đều độc lập với nhau. Bạn có thể hiểu features ở dây là danh sách các biến đầu vào: độ tuổi, giới tính, mức lương, tình trạng hôn nhân, ... Ví dụ 2 biến độc lập là: size giày và giới tính của bạn. Ví dụ 2 biến phụ thuộc là: số tiền quảng cáo bỏ ra và doanh số thu được.

Naive Bayes là bộ phân loại theo xác suất (probability classifier) nên chúng ta sẽ đi tính toán xác suất  bằng cách sử dụng định lý Bayes. Ví dụ khi bạn nhận được một tấm ảnh chứa một chữ số bất kì từ 0-9 , bạn sẽ đi tính toán xác suất ảnh này với 10 con số từ 0-9  P(8| Ảnh)=x, P(7| Ảnh)=y, ..., sau đó chọn ra cặp nào có xác suất cao nhất thì đấy chính là kết quả. Naive Bayes Classifier đã được áp dụng thành công trong nhiều lĩnh vực, một trong số đó là Xử lý ngôn ngữ tự nhiên (Natutal Language Processing).

2.1 Tại sao Naive Bayes lại hiệu quả ?

Chúng ta có các thuật toán thay thế như Suppory Vector Machine (SVM) hay Neural Networks khi gặp các vấn đề liên quan đên NLP. Khi đặt NBC (Naive Bayes Classifier) bên cạnh các thuật toán phức tạp, đòi hỏi nhiều thời gian và nguồn lực thì chúng lại trở nên lợi thế với thiết kế đơn giản cho các bài toán phân loại. Hơn nữa chúng còn được nhận xét là nhanh, đáng tin cậy và chính xác trong một số trường hợp của NLP.

2.2 Một ví dụ cụ thể

Trong ví dụ này người đối diện sẽ đưa cho bạn tập dữ liệu train (huấn luyện) như bảng bên dưới, đã được đánh nhãn (label) đầy đủ, trong trường hợp này là SportsNot Sports, sau đó người đó sẽ hỏi bạn là câu nói A very close game thuộc category nào - Sports hay Not Sports ?

Text Category
A Great Game Sports
The Election was over Not Sports
Very clean match Sports
A clean but forgettable game Sports
It was a close election Not Sports

Chắc các bạn đã đoán ra cách làm rồi đúng không nào , chúng ta sẽ đi tính toán xác suất P(Not Sports | a very close game), P(Sports | a very close game), cái nào cao hơn thì mình chọn category đó.

Bước 1: Feature Engineering

Ở bước này chúng ta sẽ tập trung vào chuyện trích xuất các features từ dữ liệu đầu vào (cột Text), chúng ta cần dữ liệu dạng số để truyền vào công thức xác suất Bayes như giới thiêu ở phía trên. Đơn giản nhất bạn có thể đếm tần suất xuất hiện của chúng. Ví dụ: Với category Sport ta thấy từ Game xuất hiện 2 lần

Công thức tính xác suất của chúng ta sẽ là

Tương tự như vậy với P(Not Sports | a very close game), các bạn sẽ để ý thấy là phần mẫu số sẽ không đổi cho cả hai category đúng không, chúng đều là P(a very close game) nên chúng ta sẽ lượt bỏ luôn.

Short version

Để có được P(a very close game | Sports) chúng ta sẽ phải đếm số lượng câu nói A very close game trong Category Sports rồi chia cho tổng số dòng thuộc Category này. Và như các bạn đã thấy thì không có dòng nào đúng từng chữ như vậy được nên xác suất trả ra sẽ bằng không. Chúng ta sẽ làm gì để giải quyết vấn đề này ?

Bước 2: Chỉ cần ngây thơ

Theo cách không ngây thơ thì chúng ta đã thấy là xác suất bằng không, khi tìm kiếm cả câu nói trong tập train. Trong khi đó Naive Bayes giả định rằng các từ là độc lập với nhau, chúng ta sẽ câu nói như các từ riêng lẻ ghép lại.

Công thức tính xác suất được viết lại như sau:

Tương tự chúng ta sẽ có:

P(a very close game | Not Sports) = P(a | Not Sports) x P(very | Not Sports) x P(close | Not Sports) x P(game | Not Sports)

Bước 3: Tính toán xác suất

Ở bước cuối này bạn chỉ cần tính xác suất và so sánh xem P(a very close game | Sports), P(a very close game | Not Sports) thì cái nào lớn hơn.

Có một lưu ý là vì chữ close không xuất hiện trong tập train nên P(close)=0, dẫn đến P(a very close game | Sports)=0, điều này chắc sẽ làm cho những xác suất trước đó không còn ý nghĩa, vì nhân với 0 đều sẽ bằng 0, chúng ta cần tìm một giải pháp cho vấn đề này.

Một giải pháp trong số đó là Laplace smoothing, đây là một kỹ thuật làm mịn dữ liệu dạng phân loại (categorical data), một giá trị nhỏ gọi là pseudo-count sẽ được thêm vào để làm thay đổi xác suất đầu ra. Kết quả là sẽ không còn xác suất nào bằng không nữa, đây là một cách điều chỉnh Naive Bayes, khi pseudo-count (alpha) bằng không có nghĩa là không làm mịn gì cả.

Laplace smoothing

Tham khảo thêm tại Wikipedia

Vậy làm sao chúng ta ứng dụng Laplace smoothing vào trường hợp này ?

Chúng ta sẽ cân nhắc sử dụng a = 1 và d=14, vì tử số được cộng thêm một nên xác suất của P(close | Sports ) sẽ không bao giờ bằng không, và 14 là tổng số từ khác nhau có thể xuất hiện ở cả hai Category: Sports và Not Sports, chắc các bạn sẽ thắc mắc là tại sao lại dùng con số 14, nhưng hôm nay mình sẽ không nói sâu ở đây, d chính là số chiều của vector đầu vào, và nó chính là số lượng từ unique có trong tập train bạn (ở trong trường hợp này).

P(close | Sports ) =(0+1)/(11+14)= 1/25

Như vậy, chúng ta có thể tính xác xuất của 2 Category như sau:

Từ kết quả ở bảng trên ta có thể thấy được P(a very close game | Sports) sẽ cho kết quả cao hơn, nên câu nói A very close game sẽ thuộc category Sports.

Quay trở lại bài toán của Alice và Bob, bạn có thể thấy nó sẽ được giải như sau:

P(Wonderful Love | Bob) = P(Wonderful | Bob) x P(Love | Bob) = 0.5x0.3 = 0.15

P(Wonderful Love | Alice) = P(Wonderful | Alice) x P(Love | Alice) = 0.1x0.1 = 0.01

Bạn thấy 0.15>0.01 nên Bod là người đã nói câu nói này

Một số những cách để cải thiện độ chính xác của Naive Bayes:

  • Removing Stopwords: loại bỏ những từ xuất hiện nhiều lần nhưng không có nhiều ý nghĩ (thì, là, được, ...)
  • Lemmatizing words: đưa các từ ở dạng số nhiều, qúa khứ, ... về đúng chuẩn của nó: election, elected, elections => election
  • Sử dụng n-grams: thay vì đếm tần suất các từ riêng lẽ bạn có thể nhóm nó lại thành cụm 2 hay 3 từ đi chung với nhau, hay còn gọi là cụm từ, Ví dụ: Hồ Chí Minh, trường học, xe bus
  • Sử dụng TF-IDF: Đây là một kỹ thuật được sử dụng khá phổ biến, các từ sẽ không có cùng một mức độ quan trọng hơn trong một ngữ cảnh nhất định, ví dụ trong Category là Báo thể thao, những từ như: cầu thủ, đá bóng, cổ động viên sẽ có trọng số lớn hơn các từ khác

Chúc bạn có thể áp dụng thành công Naive Bayes trong công việc, ngoài việc dịch lại của tác giả mình đã thêm vào các giải nghĩa để dễ hiểu hơn, nếu như bài dịch + viết của 200lab có sai sót vui lòng gửi mail về địa chỉ core@200lab.io để phản hồi, cám ơn bạn đã quan tâm.

Tham khảo:

Bài viết liên quan

Thống kê mô tả - Descriptive Statistics - Phần 2

Trong phần này chúng ta sẽ tìm hiểu thống kê mô tả Descriptive Statistics qua khái niệm Measures of Central Tendency và Measures of Spread...

Thống kê mô tả - Descriptive Statistics - Phần 2
Thống kê mô tả - Descriptive Statistics - Phần 1

Cơ bản về thống kê chia ra làm 2 nhánh là thống kê mô tả (Descriptive Statistics) và thống kê suy luận (Inferential Statistics)...

Thống kê mô tả - Descriptive Statistics - Phần 1
Các kỹ thuật lấy mẫu trong Thống kê

Trong bài này mình sẽ liệt kê khái niệm về các phương pháp lấy mẫu hiện có, việc chọn mẫu sẽ ảnh hưởng trực tiếp đến kết quả phân tích và những suy luận của bạn...

Các kỹ thuật lấy mẫu trong Thống kê
Kiến thức cơ bản về Thống kê cho người mới

Nếu bạn đang thắc mắc Thống kê (Statistics) là gì, các khái niệm xung quanh nó dành cho một người hoàn toàn mới, thì bạn đến đúng nơi rồi đấy, những khái niệm này không đòi hỏi bạn phải có kiến thức nền về Toán đâu. Nào chúng ta hãy cùng bắt đầu thôi...

Kiến thức cơ bản về Thống kê cho người mới
Sự khác biệt giữa Data Analytics và Data Analysis

Nếu bạn đang thắc mắc sự khác biệt giữa Data Analysis và Data Analytics là gì ? Vì dịch ra tiếng việt chúng đều có ý nghĩa là Phân tích dữ liệu. Ngữ cảnh sử dụng của chúng có khác nhau không ? Thì bài viết này hoàn toàn phù hợp với bạn rồi đấy. Bây giờ chúng ta cùng đi vào nội dung thôi nào....

Sự khác biệt giữa Data Analytics và Data Analysis
You've successfully subscribed to 200Lab Blog
Great! Next, complete checkout for full access to 200Lab Blog
Xin chào mừng bạn đã quay trở lại
OK! Tài khoản của bạn đã kích hoạt thành công.
Success! Your billing info is updated.
Billing info update failed.
Your link has expired.