在統計天然語言處理中語言模型是很重要的一塊,經常使用的語言模型是n元語法模型,固然如今比較流行的還有神經網絡語言模型。n元語法模型須要額外的平滑處理,而神經網絡語言模型則沒必要,它自帶平滑效果。html
n元語法(n-gram)是NLP中很重要的統計語言模型,簡單來講就是計算某個句子出現的機率,好比「我今天上班遲到了」這句話在整個語言下的機率,通常咱們會經過一個大的語料庫來進行統計。網絡
用數學語言來描述,假設咱們的句子爲
併發
其中P(w1)表示第一個詞w1出現的機率;P(w2|w1)是第一個詞出現的前提下第二個詞出現的機率;以此類推。好比s=「我今天上班遲到了」,那麼P(s)=P(我)P(今天|我)P(上班|我,今天)P(遲到了|我,今天,上班)。機器學習
若是嚴格按照上述公式計算機率,假設總詞彙大小爲 N,那麼第 t 個詞的機率 要考慮 分佈式
上述的語言模型的參數空間太大並且數據稀疏,致使在實際中基本沒法使用。因此咱們須要一個假設,某個詞出現的機率只與它前面的一個或幾個詞有關,這個假設就是馬爾科夫假設。學習
有了上面的假設,問題就變簡單了,對於二元語法,某個句子出現的機率就能夠用下面表示.net
實際應用中 n 取3比較多,取太大仍然存在自由參數太多問題。另外爲了使當 t=1 時上述公式仍然有意義,能夠在句子面前加上一個句子起始標記,而結尾也能夠添加句子結束標記。設計
爲何須要平滑處理?假若有些句子中存在一些訓練語料未包含的詞,或者連着的詞在訓練語料中未出現過。這時候就會讓機率變爲0,好比,計算cdn
但實際上它的機率不能說是爲0,因此此時就須要平滑處理。最簡單的平滑處理就是加1法,假設出現的次數比實際多一次,這樣就不會存在爲0的狀況了。htm
加1法有時效果很差,能夠用其餘方法處理,包括
n-gram這種處理序列信息的方式依然存在侷限性,好比當n大於3時基本就沒法處理了,參數空間太大。另外它不能表示詞與詞之間的關聯性。
========廣告時間========
公衆號的菜單已分爲「分佈式」、「機器學習」、「深度學習」、「NLP」、「Java深度」、「Java併發核心」、「JDK源碼」、「Tomcat內核」等,可能有一款適合你的胃口。
鄙人的新書《Tomcat內核設計剖析》已經在京東銷售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 購買。感謝各位朋友。
=========================
歡迎關注: