簡單理解 n-gram

N-Gram(有時(shí)也稱為N元模型)是自然語言處理中一個(gè)非常重要的概念镇饮,通常在NLP中,人們基于一定的語料庫术羔,可以利用N-Gram來預(yù)計(jì)或者評估一個(gè)句子是否合理杨箭。另外一方面寞焙,N-Gram的另外一個(gè)作用是用來評估兩個(gè)字符串之間的差異程度。這是模糊匹配中常用的一種手段互婿。本文將從此開始捣郊,進(jìn)而向讀者展示N-Gram在自然語言處理中的各種powerful的應(yīng)用。

  • 基于N-Gram模型定義的字符串距離
  • 利用N-Gram模型評估語句是否合理
  • 使用N-Gram模型時(shí)的數(shù)據(jù)平滑算法

基于N-Gram模型定義的字符串距離

模糊匹配的關(guān)鍵在于如何衡量兩個(gè)長得很像的單詞(或字符串)之間的“差異”擒悬。這種差異通常又稱為“距離”模她。這方面的具體算法有很多,例如基于編輯距離的概念懂牧,人們設(shè)計(jì)出了 Smith-Waterman 算法和Needleman-Wunsch 算法,其中后者還是歷史上最早的應(yīng)用動(dòng)態(tài)規(guī)劃思想設(shè)計(jì)的算法之一∽鹞穑現(xiàn)在Smith-Waterman 算法和Needleman-Wunsch 算法在生物信息學(xué)領(lǐng)域也有重要應(yīng)用僧凤,研究人員常常用它們來計(jì)算兩個(gè)DNA序列片段之間的“差異”(或稱“距離”)。

我們除了可以定義兩個(gè)字符串之間的編輯距離(通常利用Needleman-Wunsch算法或Smith-Waterman算法)之外元扔,還可以定義它們之間的N-Gram距離躯保。N-Gram(有時(shí)也稱為N元模型)是自然語言處理中一個(gè)非常重要的概念。假設(shè)有一個(gè)字符串 澎语,那么該字符串的N-Gram就表示按長度 N 切分原詞得到的詞段途事,也就是 中所有長度為 N 的子字符串。設(shè)想如果有兩個(gè)字符串擅羞,然后分別求它們的N-Gram尸变,那么就可以從它們的共有子串的數(shù)量這個(gè)角度去定義兩個(gè)字符串間的N-Gram距離。但是僅僅是簡單地對共有子串進(jìn)行計(jì)數(shù)顯然也存在不足减俏,這種方案顯然忽略了兩個(gè)字符串長度差異可能導(dǎo)致的問題召烂。比如字符串 girl 和 girlfriend,二者所擁有的公共子串?dāng)?shù)量顯然與 girl 和其自身所擁有的公共子串?dāng)?shù)量相等娃承,但是我們并不能據(jù)此認(rèn)為 girl 和girlfriend 是兩個(gè)等同的匹配奏夫。

為了解決該問題,有學(xué)者便提出以非重復(fù)的N-Gram分詞為基礎(chǔ)來定義 N-Gram距離這一概念历筝,可以用下面的公式來表述:


image.png

此處酗昼,|GN(s)| 是字符串 s 的 N-Gram集合,N 值一般取2或者3梳猪。以 N = 2 為例對字符串Gorbachev和Gorbechyov進(jìn)行分段麻削,可得如下結(jié)果(我們用下畫線標(biāo)出了其中的公共子串)。


image.png

結(jié)合上面的公式,即可算得兩個(gè)字符串之間的距離是8 + 9 ? 2 × 4 = 9碟婆。顯然电抚,字符串之間的距離越小,它們就越接近竖共。當(dāng)兩個(gè)字符串完全相等的時(shí)候蝙叛,它們之間的距離就是0。

利用N-Gram模型評估語句是否合理

從現(xiàn)在開始公给,我們所討論的N-Gram模型跟前面講過N-Gram模型從外在來看已經(jīng)大不相同借帘,但是請注意它們內(nèi)在的聯(lián)系(或者說本質(zhì)上它們?nèi)匀皇墙y(tǒng)一的概念)。

為了引入N-Gram的這個(gè)應(yīng)用淌铐,我們從幾個(gè)例子開始肺然。
首先,從統(tǒng)計(jì)的角度來看腿准,自然語言中的一個(gè)句子 s 可以由任何詞串構(gòu)成际起,不過概率 P(s) 有大有小。例如:

  • s1 = 我剛吃過晚飯
  • s2 = 剛我過晚飯吃

顯然吐葱,對于中文而言 s1 是一個(gè)通順而有意義的句子街望,而s2 則不是,所以對于中文來說弟跑,P(s1)>P(s2) 灾前。但不同語言來說,這兩個(gè)概率值的大小可能會(huì)反轉(zhuǎn)孟辑。

其次哎甲,另外一個(gè)例子是,如果我們給出了某個(gè)句子的一個(gè)節(jié)選饲嗽,我們其實(shí)可以能夠猜測后續(xù)的詞應(yīng)該是什么炭玫,例如

the large green __ . Possible answer may be “mountain” or “tree” ?
Kate swallowed the large green __ . Possible answer may be “pill” or “broccoli” ?
顯然,如果我們知道這個(gè)句子片段更多前面的內(nèi)容的情況下喝噪,我們會(huì)得到一個(gè)更加準(zhǔn)確的答案础嫡。這就告訴我們,前面的(歷史)信息越多酝惧,對后面未知信息的約束就越強(qiáng)榴鼎。

如果我們有一個(gè)由 m 個(gè)詞組成的序列(或者說一個(gè)句子),我們希望算得概率 P(w1,w2,?,wm) 晚唇,根據(jù)鏈?zhǔn)揭?guī)則巫财,可得
P(w1,w2,?,wm)=P(w1)P(w2|w1)P(w3|w1,w2)?P(wm|w1,?,wm?1)

這個(gè)概率顯然并不好算,不妨利用馬爾科夫鏈的假設(shè)哩陕,即當(dāng)前這個(gè)詞僅僅跟前面幾個(gè)有限的詞相關(guān)平项,因此也就不必追溯到最開始的那個(gè)詞赫舒,這樣便可以大幅縮減上訴算式的長度。即
P(wi|w1,?,wi?1)=P(wi|wi?n+1,?,wi?1)

特別地闽瓢,對于 n 取得較小值的情況
當(dāng) n=1, 一個(gè)一元模型(unigram model)即為


image.png

當(dāng) n=2, 一個(gè)二元模型(bigram model)即為


image.png

當(dāng) n=3, 一個(gè)三元模型(trigram model)即為


image.png

接下來的思路就比較明確了接癌,可以利用最大似然法來求出一組參數(shù),使得訓(xùn)練樣本的概率取得最大值扣讼。

使用N-Gram模型時(shí)的數(shù)據(jù)平滑算法

有研究人員用150萬詞的訓(xùn)練語料來訓(xùn)練 trigram 模型缺猛,然后用同樣來源的測試語料來做驗(yàn)證,結(jié)果發(fā)現(xiàn)23%的 trigram 沒有在訓(xùn)練語料中出現(xiàn)過椭符。這其實(shí)就意味著上一節(jié)我們所計(jì)算的那些概率有空為 0荔燎,這就導(dǎo)致了數(shù)據(jù)稀疏的可能性,我們的表3中也確實(shí)有些為0的情況销钝。對語言而言有咨,由于數(shù)據(jù)稀疏的存在,極大似然法不是一種很好的參數(shù)估計(jì)辦法蒸健。

這時(shí)的解決辦法座享,我們稱之為“平滑技術(shù)”(Smoothing)或者 “減值” (Discounting)。其主要策略是把在訓(xùn)練樣本中出現(xiàn)過的事件的概率適當(dāng)減小似忧,然后把減小得到的概率密度分配給訓(xùn)練語料中沒有出現(xiàn)過的事件征讲。實(shí)際中平滑算法有很多種,例如:
  ? Laplacian (add-one) smoothing
  ? Add-k smoothing
  ? Jelinek-Mercer interpolation
  ? Katz backoff
  ? Absolute discounting
  ? Kneser-Ney

對于這些算法的詳細(xì)介紹橡娄,我們將在后續(xù)的文章中結(jié)合一些實(shí)例再來進(jìn)行討論。

一個(gè)實(shí)際的例子

搜索引擎(Google或者Baidu)癣籽、或者輸入法的猜想或者提示挽唉。你在用百度時(shí),輸入一個(gè)或幾個(gè)詞筷狼,搜索框通常會(huì)以下拉菜單的形式給出幾個(gè)像下圖一樣的備選瓶籽,這些備選其實(shí)是在猜想你想要搜索的那個(gè)詞串。再者埂材,當(dāng)你用輸入法輸入一個(gè)漢字的時(shí)候塑顺,輸入法通常可以聯(lián)系出一個(gè)完整的詞俏险,例如我輸入一個(gè)“劉”字严拒,通常輸入法會(huì)提示我是否要輸入的是“劉備”。通過上面的介紹竖独,你應(yīng)該能夠很敏銳的發(fā)覺裤唠,這其實(shí)是以N-Gram模型為基礎(chǔ)來實(shí)現(xiàn)的,如果你能有這種覺悟或者想法莹痢,那我不得不恭喜你种蘸,都學(xué)會(huì)搶答了墓赴!


image.png

參考:https://blog.csdn.net/baimafujinji/article/details/51281816

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市航瞭,隨后出現(xiàn)的幾起案子诫硕,更是在濱河造成了極大的恐慌,老刑警劉巖刊侯,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件章办,死亡現(xiàn)場離奇詭異,居然都是意外死亡滔吠,警方通過查閱死者的電腦和手機(jī)纲菌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疮绷,“玉大人翰舌,你說我怎么就攤上這事《В” “怎么了椅贱?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長只冻。 經(jīng)常有香客問我庇麦,道長,這世上最難降的妖魔是什么喜德? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任山橄,我火速辦了婚禮,結(jié)果婚禮上舍悯,老公的妹妹穿的比我還像新娘航棱。我一直安慰自己,他們只是感情好萌衬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布饮醇。 她就那樣靜靜地躺著,像睡著了一般秕豫。 火紅的嫁衣襯著肌膚如雪朴艰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天混移,我揣著相機(jī)與錄音祠墅,去河邊找鬼。 笑死沫屡,一個(gè)胖子當(dāng)著我的面吹牛饵隙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沮脖,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼金矛,長吁一口氣:“原來是場噩夢啊……” “哼芯急!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驶俊,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤娶耍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饼酿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榕酒,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年故俐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了想鹰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡药版,死狀恐怖辑舷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情槽片,我是刑警寧澤何缓,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站还栓,受9級特大地震影響碌廓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜剩盒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一谷婆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辽聊,春花似錦波材、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唯灵。三九已至贾铝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠帕,已是汗流浹背垢揩。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敛瓷,地道東北人叁巨。 一個(gè)月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像呐籽,于是被迫代替她去往敵國和親锋勺。 傳聞我的和親對象是個(gè)殘疾皇子蚀瘸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容