1. 程式人生 > >N元語言模型

N元語言模型

語言模型是幹嘛的?

語言模型可以計算任何句子的概率。例如,“I love you”的概率是多少?用數學語言表述,N元語言模型(N-gram model)根據一個詞語的前N1個詞語,來計算這個詞語的概率。如果我們有了一個2元模型,“I love you”的概率就等於P(I)×P(love|I)×P(you|love)(最後一段解釋原因)。2元模型用一個矩陣來表示,比如對於一個有10000個詞的語料庫,這個語料庫的2元模型就是一個10000×10000的矩陣,第m行第n列表示在第m個詞語的條件下,第n個詞語出現的概率,即第m個詞語後面跟著第n個詞語的概率。如果我們知道了語言模型,我們就可以像計算“I love you”那樣,計算任何一個句子的概率。

語言模型有什麼用?

語言模型在自然語言處理中佔有重要的地位,在語音識別,機器翻譯,漢語自動分詞和句法分析等都有應用。因為這些模型都會有噪聲,都會有幾種不同的結果等著我們去選擇,這時候就需要知道每種結果的概率,來幫助我們選擇。
為什麼叫“語言模型”?因為這是統計學意義上的模型,又跟語言相關,所以叫語言模型。統計模型指一系列分佈,引數模型指一系列可用有限個引數表示的模型。語言模型就是一種引數模型,它的引數是矩陣的所有cell。

如何計算語言模型的引數?

引數無法精確計算,只能大概估計。這裡用的方法是極大似然估計。對於某個語料庫,極大似然估計的意思是,哪個語言模型(什麼樣的引數)最有可能產生這個語料庫呢?把這個問題分解成許多個小問題:當P

(you|I)是多少時(love和I可以換成別的所有的詞),最有可能產生這個語料庫呢?自然而然我們會想到,統計語料庫裡一共有多少個I,一共有多少個I love,然後做一下除法,就得到了我們想要的概率,這個概率最有可能產生這個語料庫。我們對這個語料庫裡所有的詞對做相同的計數和除法,就得到了我們想要的引數,也就得到了這個語料庫的語言模型。

那樣計算概率的原因:馬爾科夫假設

然而,為什麼I love you的概率可以通過P(I)×P(love|I)×P(you|love)計算呢?其實這麼算只是在某個假設下的近似計算,這個假設就是一個詞出現的概率只取決於它前N1個詞。所以在二元模型下,I love you的概率可以那麼算。 以此類推,三元模型下,I love you的概率就要這麼算了:P

(I)×P(love|I)×P(you|I,love)



參考資料:
《Speech and Language Processing》Jurafsky and Martin, Chapter 4