n元語法是乙個非常經典的語言模型。
一、n-gram的原理
n-gram是基於乙個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關。(這也是隱馬爾可夫當中的假設。)整個句子出現的概率就等於各個詞出現的概率乘積。各個詞的概率可以通過語料中統計計算得到。假設句子t是有詞序列w1,w2,w3…wn組成,用公式表示n-gram語言模型如下:
p(t)=p(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)***p(wn|w1w2w3…)
一般常用的n-gram模型是bi-gram和tri-gram。分別用公式表示如下:
bi-gram: p(t)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
tri-gram: p(t)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn|wn-1,wn-2)
注意上面概率的計算方法:p(w1|begin)=以w1為開頭的所有句子/句子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推。(這裡需要進行平滑)
二、n-gram的應用
根據上面的分析,n-gram(有時也稱為n元模型)是自然語言處理中乙個非常重要的概念,通常在nlp中,它主要有兩個重要應用場景:
(1)人們基於一定的語料庫,可以利用n-gram來預計或者評估乙個句子是否合理。
(2)另外一方面,n-gram的另外乙個作用是用來評估兩個字串之間的差異程度。這是模糊匹配中常用的一種手段。
應用:1.n-gram在兩個字串的模糊匹配中的應用
首先需要介紹乙個比較重要的概念:n-gram距離。
(1)n-gram距離
它是表示,兩個字串s,t分別利用n-gram語言模型來表示時,則對應n-gram子串中公共部分的長度就稱之為n-gram距離。例如:假設有字串s,那麼按照n-gram方法得到n個分詞組成的子字串,其中相同的子字串個數作為n-gram距離計算的方式。具體如下所示:
字串:s=「abc」,對字串進行分詞,考慮字串首尾的字元begin和end,得到begin,a,b,c,end。這裡採用二元語言模型,則有:(begin,a)、(a,b)、(b,c)、(c,end)。
字串:t=「ab」,對字串進行分詞,考慮字串首尾的字元begin和end,得到begin,a,b,end。這裡採用二元語言模型,則有:(begin,a)、(a,b)、(b,end)。
此時,若求字串t與字串s之間的距離可以用m-(n-gram距離)=0。
然而,上面的n—gram距離表示的並不是很合理,他並沒有考慮兩個字串的長度,所以在此基礎上,有人提出非重複的n-gram距離,公式如下所示:
上面的字串距離重新計算為:
4+3-2*3=1
2.n-gram在判斷句子有效性上的應用
假設有乙個字串s=「abc」,則對應的bi-gram的結果如下:(begin,a)、(a,b)、(b,c)、(c,end)。則對應的出現字串s的概率為:
p(abc)=p(a|begin)*p(b|a)*p(c|b)*p(end|c)。
3.n-gram在特徵工程中的應用
N Gram語言模型
wikipedia上有關n gram的定義 n gram是一種統計語言模型,用來根據前 n 1 個item來 第n個item。在應用層面,這些item可以是音素 語音識別應用 字元 輸入法應用 詞 分詞應用 或鹼基對 基因資訊 一般來講,可以從大規模文字或音訊語料庫生成n gram模型。習慣上,1 ...
語言模型(N Gram)
問題描述 由於公司業務產品中,需要使用者自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出乙個 使用者填寫的公司名是否有效的模型出來。目標 問題提出來了,就是想找到一種辦法來 使用者填寫的公司名是否有效?問題分析 要想 使用者填寫的公司名稱是否有...
語言模型(N Gram)
問題描述 由於公司業務產品中,需要使用者自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出乙個 使用者填寫的公司名是否有效的模型出來。目標 問題提出來了,就是想找到一種辦法來 使用者填寫的公司名是否有效?問題分析 要想 使用者填寫的公司名稱是否有...