問題描述:由於公司業務產品中,需要用戶自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出一個預測用戶填寫的公司名是否有效的模型出來。
目標:問題提出來了,就是想找到一種辦法來預測用戶填寫的公司名是否有效?
問題分析:要想預測用戶填寫的公司名稱是否有效,需要用到NLP的知識內容,我們首先能夠想到的是利用NLP中的語言模型,來對公司名稱進行訓練建模,並結合其他的特征(如:長度等)進行預測。
一、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,思路如下:
以Bi-Gram為例,在原始文本中,以每個關鍵詞作為一個特征,通過將關鍵詞兩兩組合,得到一個Bi-Gram組合,再根據N-Gram語言模型,計算各個Bi-Gram組合的概率,作為新的特征。