說到自然語言,我就會想到朴素貝葉斯,貝葉斯核心就是條件概率,而且大多數自然語言處理的思想也就是條件概率。
所以我用預測一個句子出現的概率為例,闡述一下自然語言處理的思想。
統計語言模型-概率
句子,就是單詞的序列,句子出現的概率就是這個序列出現的概率
可以想象上面這個式子計算量有多大。
為了減少計算量,常常用一個估計值來代替上面的概率。估計該值常用的方法有
n-gram、決策樹、最大熵模型、條件隨機場、神經網絡等。
以最簡單的n-gram為例
n-gram模型有個假設:當前單詞出現的概率僅與前面n-1個單詞有關
於是,m個單詞的句子出現的概率可以估計為
顯然n取值越大,理論上這個估計越准確
但是因為計算量的問題,通常n取較小值,如 1,2,3,分別有對應的名字 unigram, bigram, trigram,最常用的是2
出現次數相比,很顯然有個問題,如果沒出現呢,比如語料庫較小,那么這個單詞出現的概率為0,,p(s)=0,
一個單詞沒出現導致整個句子出現概率為0,顯然不合適
這也是自然語言處理中比較普遍的問題,常用的解決方法是拉普拉斯平滑,避免0的出現,比如
此時這個句子的概率就算出來了。
評價指標-復雜度
語言模型的好壞常用復雜度(perplexity)來評價。
如果一個句子在文檔中確實出現了,那么我們的模型算出來的概率越大越好,
概率越大,就需要每個p的概率越大,
每個p越大,就意味着這某些單詞出現的情況下,出現這個單詞的概率很大,
也就是說,在某些單詞出現時,下一個單詞的可選擇性很小,比如單詞 “國”后面的單詞很少,最常用的是“家”,此時“家”的概率就很大
這個可選擇性就是復雜度。
其實可以理解為整個詞語結構的復雜度,詞語結構越簡單,復雜度越低。圖形表示如下
顯然上面的結構簡單。
可選擇性可以用概率的倒數來表示。即概率越大,可選擇性越小,復雜度越低。
可以兩邊取log簡化運算。取log乘法變加法,也避免了一個為0結果為0的情況。
LSTM 語言模型
lstm 使得網絡具有記憶功能,也就是記住了之前的詞語,也就是在知道之前詞語的情況下,訓練或者預測下一個單詞。這就是rnn處理自然語言的邏輯。
訓練過程:輸入x是單詞,y是x的下一個單詞,最終得到每個單詞下一個單詞的概率。
預測過程:取下一個單詞中概率最大的單詞。
圖形表示如下
把訓練樣本 “大海的顏色是藍色” 輸入網絡訓練,可以得到在 “大海” 出現的情況下,后面是 “的” 的概率0.8,是 “是”的概率0.15,
在“大海的”出現的情況下,后面每個單詞出現的概率,依次
最終預測時,在“大海的顏色是”出現的情況下,預測結果是“藍色”的概率是0.7,預測正確。