n元語法

語言模型

在統計天然語言處理中語言模型是很重要的一塊,經常使用的語言模型是n元語法模型,固然如今比較流行的還有神經網絡語言模型。n元語法模型須要額外的平滑處理,而神經網絡語言模型則沒必要,它自帶平滑效果。html

n元語法

n元語法(n-gram)是NLP中很重要的統計語言模型,簡單來講就是計算某個句子出現的機率,好比「我今天上班遲到了」這句話在整個語言下的機率,通常咱們會經過一個大的語料庫來進行統計。網絡

用數學語言來描述,假設咱們的句子爲
併發


,則該句子的機率爲

其中P(w1)表示第一個詞w1出現的機率;P(w2|w1)是第一個詞出現的前提下第二個詞出現的機率;以此類推。好比s=「我今天上班遲到了」,那麼P(s)=P(我)P(今天|我)P(上班|我,今天)P(遲到了|我,今天,上班)。機器學習

若是嚴格按照上述公式計算機率,假設總詞彙大小爲 N,那麼第 t 個詞的機率 要考慮 分佈式


種狀況,當 N 較大時,句子長度也較長時,將產生一個天文數字的自有參數,沒法計算。

上述的語言模型的參數空間太大並且數據稀疏,致使在實際中基本沒法使用。因此咱們須要一個假設,某個詞出現的機率只與它前面的一個或幾個詞有關,這個假設就是馬爾科夫假設。學習

  • 當 n=1 時,稱爲一元語法,被記爲unigram,此時第 i 個詞出現的機率徹底獨立與以前的狀況。
  • 當 n=2 時,稱爲二元語法,被稱爲一階馬爾科夫鏈,記爲bigram,此時第 i 個詞出現的機率與它的前一個詞有關。
  • 當 n=3 時,稱爲三元語法,被稱爲二階馬爾科夫鏈,記做trigram,此時第 i 個詞出現的機率與它的前兩個詞有關。

有了上面的假設,問題就變簡單了,對於二元語法,某個句子出現的機率就能夠用下面表示.net

實際應用中 n 取3比較多,取太大仍然存在自由參數太多問題。另外爲了使當 t=1 時上述公式仍然有意義,能夠在句子面前加上一個句子起始標記,而結尾也能夠添加句子結束標記。設計

計算條件機率

平滑處理

爲何須要平滑處理?假若有些句子中存在一些訓練語料未包含的詞,或者連着的詞在訓練語料中未出現過。這時候就會讓機率變爲0,好比,計算cdn

但實際上它的機率不能說是爲0,因此此時就須要平滑處理。最簡單的平滑處理就是加1法,假設出現的次數比實際多一次,這樣就不會存在爲0的狀況了。htm


其中T爲總詞彙數量。

加1法有時效果很差,能夠用其餘方法處理,包括

  • Good-Turing估計法
  • Katz平滑法
  • Jelinek-Mercer平滑法
  • Kneser-Ney平滑法
  • 貝葉斯平滑法
  • 等等

缺點

n-gram這種處理序列信息的方式依然存在侷限性,好比當n大於3時基本就沒法處理了,參數空間太大。另外它不能表示詞與詞之間的關聯性。

========廣告時間========

公衆號的菜單已分爲「分佈式」、「機器學習」、「深度學習」、「NLP」、「Java深度」、「Java併發核心」、「JDK源碼」、「Tomcat內核」等,可能有一款適合你的胃口。

鄙人的新書《Tomcat內核設計剖析》已經在京東銷售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 購買。感謝各位朋友。

爲何寫《Tomcat內核設計剖析》

=========================

歡迎關注:

這裏寫圖片描述
這裏寫圖片描述
相關文章
相關標籤/搜索