7. 基礎語言模型:N-Gram
當我們想到可口可樂的時候,可能會「聯想」到百事可樂(而不是珍珠奶茶),人們長期在學習累積語言後有判斷合不合理與聯想的能力。那 NLP 有沒有這樣判斷合不合理與聯想的能力呢?N-gram 就是基於這樣聯想的語言模型,換句話說,語言模型就是利用機率大小來判斷句子合不合理。
語言模型可以應用的場景很多,N-Gram 常用的應用場景像是「選字推薦」、「錯字勘正」、「分詞系統」等。
語言模型機率
若想得到一個句子出現的機率則要使用連鎖率,以「我喜歡深度學習更喜歡NLP」為例,則機率為
P(我喜歡深度學習更喜歡NLP) = P(我)*P(喜|我)*P(歡|我,喜)*…*P(P|我喜歡深度學習更喜歡NL)
為了簡化問題,我們可以假設當前的字出現只跟前一個字有關
P(我喜歡深度學習更喜歡NLP) = P(我)*P(喜|我)*P(歡|喜)*…*P(P|L)
這樣的假設算法即是 N-Gram 模型中 n=2 的情形,又稱作 Bigram
N-Gram 模型
N-Gram 語言模型是基於統計的語言模型算法,主要是將文本中的內容取最靠近的 N 個字當作條件機率計算的先驗條件,形成長度是 N 的字詞片段序列。每個字詞片段及稱為 gram。 常見的 N-Gram 模型有 Unigram(1-gram),Bigram(2-gram),Trigram(3-gram)。
Bigram 語言模型
為了考慮字詞在開頭與結尾的情境,可以加入 start 的 token 與 end 的 token 的在文本中。
N 的大小
- 當N值較大:對字詞的約束性更高,具有更高的辨識力,複雜度較高
- 當N值較小:字詞在文本出現的次數較多,更可靠的統計結果,但對字詞的約束性較小
當 Trigram 預測每個字的機率都是零,也就是說它並沒有看過前面兩個字再搭配一個字的組合,這個時候該怎麼辦?
其實,我們可以用 Bigram 和 Unigram 來輔助解決這個問題,我們稱之為 Smoothing of Language Models,它有兩大類方法,我們接下來逐一介紹。
Back-off Smoothing
Interpolation Smoothing