機器學習NLP:深入理解Naive Bayes!

Naive Bayes是最常用的機器學習(ML)算法之一,通常用於文本分類。它是機器學習(ML)最簡單的分類算法之一。

機器學習NLP:深入理解Naive Bayes!

這篇文章將為您提供Naive Bayes分類器實際工作原理的完整見解。

樸素貝葉斯究竟是如何運作的

樸素貝葉斯是一種概率分類算法,因為它使用概率來進行分類目的的預測。讓我們深入瞭解樸素貝葉斯的訓練和測試階段,以獲得它的算法見解!

訓練樸素貝葉斯模型

比方說,有一個餐廳評論,“Very good food and service!!!”,你想預測這個給定的評論是否意味著積極或消極的觀點。要做到這一點,我們首先需要在相關標記的訓練數據集上訓練一個模型(這實際上意味著確定每個類別的單詞計數),然後這個模型本身將能夠自動將這些評論分類為它所訓練的特定觀點之一。假設您獲得了一個類似下面的訓練數據集(一個評論及其相應的情緒):

機器學習NLP:深入理解Naive Bayes!

標記訓練數據集

備註 :樸素貝葉斯分類器是一種監督機器學習算法

那我們怎麼開始呢?

步驟#1:數據預處理

作為預處理階段的一部分,訓練語料庫/訓練數據集中的所有單詞都將轉換為小寫,除了標點符號之外的所有內容都將從訓練示例中排除。

邊注: 一個常見的錯誤,不是像預處理訓練數據集那樣預處理測試數據,而是直接將測試示例輸入到訓練模型中。因此,經過訓練的模型在給定的測試示例上表現得很差,在這個測試示例上它應該表現得相當好!

機器學習NLP:深入理解Naive Bayes!

預處理訓練數據集

步驟#2:訓練你的NaïveBayes模型

只需簡單地製作兩個bag of words(BoW),每個類別一個,每個將包含單詞及其相應的計數。屬於“正面”情緒/標籤的所有單詞都將歸屬於一個BoW,所有屬於“負面”情緒的單詞都將擁有自己的BoW。訓練集中的每個句子都被分成單詞(基於空格作為標記器/分隔符),這就是單詞計數對的構造方式,如下所示:

機器學習NLP:深入理解Naive Bayes!

兩個類別的BoW

現在是預測部分 - 測試

考慮到現在您的模型被給予餐廳評論,“Very good food and service!!!”,它需要分類到它屬於哪個特定類別。我們需要找到這個屬於每個類別的評估的概率,然後我們會給它分配一個正的或負的標籤(取決於這個測試例子能夠為哪個特定的類別獲得更多的概率)。

查找給定測試示例/評論的概率:

  • 步驟#1 :測試實例的預處理

以與預處理訓練樣本相同的方式預處理測試示例,即將示例更改為小寫並排除除標點/字母之外的所有內容。

機器學習NLP:深入理解Naive Bayes!

  • 步驟#2:預處理測試例的標記化

對測試示例進行標記,即將其拆分為單個單詞。

機器學習NLP:深入理解Naive Bayes!

快速備註 :您必須熟悉 機器學習中的術語“ 特徵” 。這裡,在Naive Bayes中, 訓練數據集的每個類別的詞彙表中 的每個單詞構成分類特徵。這意味著每個類的所有獨特單詞(即詞彙,vocabulary/vocab)的計數基本上是該特定類的一組特徵。為什麼我們需要“數量”?因為我們需要分類詞特徵的數字表示,因為樸素貝葉斯模型/算法需要數字特徵來找出概率分數!

  • 步驟#3:使用概率預測標記化測試示例的標籤!

尋找概率的數學形式:

機器學習NLP:深入理解Naive Bayes!

Probability of a Given Test Example i of belonging

  • i =測試例子= “Very good food and service!!!”
  • i中的單詞總數 = 5,因此j(表示要素編號)的值從1到5不等。就這麼簡單!

讓我們將上面的場景映射到給定的測試示例,以使其更清晰!

讓我們開始計算這些產品術語的值

  • 步驟1:找到術語的值:c類的p
機器學習NLP:深入理解Naive Bayes!

Simply the Fraction of Each Category/Class in the Training Set

機器學習NLP:深入理解Naive Bayes!

p of class c for Positive & Negative categorie

  • 步驟2:找到術語的值:product (c類測試詞j的 p )

在我們開始推斷特定類c中測試單詞j的概率之前,讓我們快速熟悉一些符號:

機器學習NLP:深入理解Naive Bayes!

因為我們目前在測試集中只有一個例子(為了理解),所以i = 1。

機器學習NLP:深入理解Naive Bayes!

說明 :在 測試時間/預測時間內,我們將測試示例的每個單詞映射到訓練階段中找到的計數。因此,在本例中,我們要為這個給定的測試示例尋找總共5個單詞的計數。

在c類中找出測試詞“j”的概率

在開始計算乘積(c類測試詞“j”的p)之前,我們顯然首先需要確定c類測試詞“j”的p。有兩種方法可以按照下面的說明進行操作 -

機器學習NLP:深入理解Naive Bayes!

  • 讓我們首先嚐試使用方法1找到概率:
機器學習NLP:深入理解Naive Bayes!

現在我們可以乘以單個詞的概率(如上所示),以便找到術語的數值:

product(c類中測試詞“j”的p)

機器學習NLP:深入理解Naive Bayes!

零概率的常見陷阱!

現在,我們有兩個條件,即( p of class c and product ( p of a test word “ j ” in class c ) )。因此,為了確定兩個類別的p(i屬於c類),我們可以將這兩個項相乘。這在下面說明:

機器學習NLP:深入理解Naive Bayes!

零概率的常見陷阱!

對於這兩個類別,p(i屬於c類)結果為零!但很明顯,測試示例“Very good food and service!!!”屬於正類!這是因為產品(c類測試詞 “j”的p)對於兩個類別都為零,而這又為零,因為給定測試示例中的幾個單詞(以橙色突出顯示)從未出現過我們的訓練數據集,因此它們的概率為零!顯然他們已經造成了所有的破壞!

這是否意味著 ,只要在測試示例中出現但從未在訓練數據集中出現過的單詞總是會導致此類破壞?在這種情況下,我們訓練有素的模型永遠無法預測正確的情緒?它會隨機選擇正面或負面類別,因為它們都具有相同的零概率並且預測錯誤?答案是不!這是第二種方法(編號為2)發揮作用的地方,實際上這是實際用於推導p(i屬於c類)的數學公式。但在我們繼續使用方法2之前,我們應該首先熟悉它的數學!

機器學習NLP:深入理解Naive Bayes!

因此,在添加1的偽 計數之後,在訓練數據中永遠不會出現的測試單詞的概率p將永遠不會為零,因此,術語產品的數值(c類中測試單詞“j”的p)永遠不會結束為零,這反過來暗示 p(i屬於c類)也永遠不會為零!所以一切都很好,沒有零概率的破壞!

因此,方法編號2的分子項將添加1,因為我們為詞彙表中的每個單詞添加了一個,因此它變為 :

機器學習NLP:深入理解Naive Bayes!

同樣,分母變為:

機器學習NLP:深入理解Naive Bayes!

  • 所以完整的公式:
機器學習NLP:深入理解Naive Bayes!

  • 現在使用方法2找到概率:
機器學習NLP:深入理解Naive Bayes!

處理零概率:這些就像故障保護概率一樣!

機器學習NLP:深入理解Naive Bayes!

現在作為測試示例的概率,“Very good food and service!!!”更多的是積極的類別,即9.33E-09與負類別(即7.74E-09)相比,所以我們可以預測它為積極的情緒!這就是我們如何簡單地預測例子

快速注意事項: 與其他機器學習算法一樣,樸素貝葉斯也需要驗證集來評估訓練模型的有效性。

深入挖掘概率數學

現在您已經對訓練樸素貝葉斯模型所需的概率計算有了基本的瞭解,然後用它來預測給定測試句的概率,現在我將深入研究概率細節。

在上一節中對給定測試句子的概率進行計算時,我們什麼也沒做,只是在測試時為我們的預測實現了給定的概率公式:

機器學習NLP:深入理解Naive Bayes!

解碼上述數學方程式:

“ | “=指已經給出的狀態/或某些過濾標準

“ c ”=類/類別

“ x ”=測試例/測試句

p(c | x) =給定的測試例x,它屬於c類的概率是多少。這也稱為後驗概率。這是針對給定測試示例x針對每個給定訓練類找到的條件概率。

p(x | c) =給定的類c,示例x屬於類c的概率是多少。這也稱為似然,因為它意味著示例 x有多大可能屬於 c類。這也是條件概率。我們使用在訓練階段確定的單詞計數來計算該概率。

機器學習NLP:深入理解Naive Bayes!

這裡 “ j ” 代表一個類 , k 代表一個特徵

我們在計算部分中隱式使用了這個公式兩次,因為我們有兩個類。記住發現的product 的值( p of a test word “ j ” in class c ) ?

機器學習NLP:深入理解Naive Bayes!

p(c) =這意味著 c類的概率。這也稱為先驗概率/無條件概率。這是無條件的概率。我們在概率計算部分中更早地計算了這一點(在步驟#1中找到了術語的值: c類的 p)

p(x) =這也稱為歸一化常數,因此概率p(c | x)實際上落在[0,1]範圍內。因此,如果刪除它,概率p(c | x)可能不一定落在[0,1]的範圍內。直觀地,這意味著在任何情況下或不論其類別標籤(即正面還是負面)的示例 x的概率。這也反映在用於計算p(x)的全概率定理中,並且要求找到 p(x),我們將在所有給定的類中找到它的概率(因為它是無條件概率)並簡單地添加它們:

機器學習NLP:深入理解Naive Bayes!

全概率定理

這意味著如果我們有兩個類,那麼我們將有兩個項,所以在我們特定的正面和負面情緒的情況下:

機器學習NLP:深入理解Naive Bayes!

兩個類的全概率定理

我們在上面的計算中使用過嗎?不,我們沒有。為什麼???因為我們正在比較正面和負面類別的概率,並且因為分母保持不變,所以在這種特殊情況下,省略相同的分母並不影響我們訓練模型的預測。

避免下溢錯誤的常見陷阱!

如果你注意到,單詞概率的數值(即c類中測試單詞“j”的p)非常小。因此,將所有這些微小概率乘以找到乘積(c類中測試詞“j”的p)將產生更小的數值,這通常會導致下溢,這顯然意味著對於給定的測試句,訓練的模型將無法預測它的類別/情緒。因此,為了避免這種下溢錯誤,我們將數學log的幫助如下:

機器學習NLP:深入理解Naive Bayes!

避免下溢錯誤

現在,我們不需要對單個單詞的概率進行乘法運算,我們只需要把它們加起來。為什麼只有log?為什麼沒有其他函數呢?因為log以單調方式增大或減小,這意味著它不會影響概率的順序。在將log應用於它們之後,較小的概率仍將保持較小,反之亦然。因此,假設測試詞“is”的概率小於測試詞“happy”,因此在通過log之後雖然增加了它們的幅度,但“is”仍然比“happy”的概率小。因此,在不影響我們訓練模型的預測的情況下,我們可以有效地避免下溢誤差的常見缺陷。

一些隨機的結論性說明

  • 雖然我們生活在API的時代,幾乎很少從頭開始編碼。但深入理解算法理論對於深入理解機器學習算法的實際工作方式至關重要。在轉向API之前,我個人認為真正的數據科學家應該從頭開始編碼,以實際看到數字背後的原因以及特定算法優於其他算法的原因。
  • Naive Bayes模型的最佳特徵之一是,您可以通過簡單地用新的詞彙單詞更新它而不是總是重新訓練它來提高它的準確性。您只需要在詞彙表中添加單詞並相應地更新單詞計數。


分享到:


相關文章: