1. 程式人生 > >為什麼使用神經網路訓練得到的語言模型不需要做資料平滑

為什麼使用神經網路訓練得到的語言模型不需要做資料平滑

我們都知道,在自然語言處理的語言模型裡面,最核心的就是計算得到一個句子的概率,為了得到這個概率,我們需要計算得到一系列的條件概率。這些條件概率就是整個語言模型的引數。
為了得到條件概率,我們可以有兩種不同的方法。
第一種就是使用統計概率方法,通過統計的方法得到不同的詞對的條件概率。這種方式簡單易行,但是此類方式很容易因為語料庫的稀疏,而導致某些詞對並沒有出現在語料庫而導致某些條件概率為0。
舉個栗子:
給定以下語料:

John read a book.
Tom read a novel.
A novel was read by Catter.
Cherry was singing a song.
John was singing a song.
Tom was singing a song.

當計算S=Cherry read a book,這個句子的概率的時候,我們需要對P(read|Cherry)這個條件概率進行平滑,否則這個概率就為0了。
為了解決條件概率為0的問題,人們提出了一系列條件概率資料平滑方法。
因此,語料稀疏導致的某些詞對沒有出現而使得該詞對的條件概率為0,進而採用資料平滑處理。
第二種方式則基於神經網路的方法來得到這些詞對的條件概率。使用神經網路的方法進行訓練的時候,一方面,我們可以得到語言模型(即那一堆條件概率),另一方面我們也自然而然地獲得了這些詞的詞向量。當獲得這些詞向量,那就好辦了。這些詞向量是具有語義相關性的。因此,針對上面的語料庫,我們會發現最終John,Tom,Cherry這些詞的詞向量是很相近的。於是當我們想通過神經網路獲取條件概率P(read|Cherry)的時候,我們輸入的是Cherry的詞向量,儘管語料庫沒有出現Cherry read 這樣的詞對,模型依然會認為我們輸入了一個類似於John和Tom那樣的詞,而John read 和 Tom read是在語料庫出現過的。進而,P(read|Cherry)無需額外平滑也不為0 。