N-Gram語言模型

一、n-gram是什麼

wikipedia上有關n-gram的定義:
n-gram是一種統計語言模型,用來根據前(n-1)個item來預測第n個item。在應用層面,這些item可以是音素(語音識別應用)、字符(輸入法應用)、詞(分詞應用)或鹼基對(基因信息)。一般來講,可以從大規模文本或音頻語料庫生成n-gram模型。
習慣上,1-gram叫unigram,2-gram稱爲bigram,3-gram是trigram。還有four-gram、five-gram等,不過大於n>5的應用很少見。

二、n-gram的理論依據

n-gram語言模型的思想,可以追溯到信息論大師香農的研究工作,他提出一個問題:給定一串字母,如”for ex”,下一個最大可能性出現的字母是什麼。從訓練語料數據中,我們可以通過極大似然估計的方法,得到N個概率分佈:是a的概率是0.4,是b的概率是0.0001,是c的概率是…,當然,別忘記約束條件:所有的N個概率分佈的總和爲1.
n-gram模型概率公式推導。根據條件概率和乘法公式:
這裏寫圖片描述
得到
這裏寫圖片描述
拿一個應用來講,假設T是由詞序列A1,A2,A3,…An組成的,那麼P(T)=P(A1A2A3…An)=P(A1)P(A2|A1)P(A3|A1A2)…P(An|A1A2…An-1)
如果直接這麼計算,是有很大困難的,需要引入馬爾科夫假設,即:一個item的出現概率,只與其前m個items有關,當m=0時,就是unigram,m=1時,是bigram模型。
因此,P(T)可以求得,例如,當利用bigram模型時,P(T)=P(A1)P(A2|A1)P(A3|A2)…P(An|An-1)
而P(An|An-1)條件概率可以通過極大似然估計求得,等於Count(An-1,An)/Count(An-1)。

三、n-gram的數據長什麼樣

其實,說n-gram長什麼樣,是不嚴謹的。它只是一個語言模型,只要把需要的信息存儲下來,至於什麼格式都是依據應用來定。如,著名的google books Ngram Viewer,它的n-gram數據格式是這樣的:

circumvallate   1978   335    91
circumvallate   1979   261    91

代表了一個1-gram的數據片段,第一行的意思是,“circumvallate”這個單詞在1978年出現335次,存在91本書中。這些元數據,除了頻率335次是必須的,其他的元數據(例如,還有詞性等)可以根據應用需求來定。下面是一個5-gram數據片段:

analysis is often described as  1991  1   1   1

當然,也可以是其他形式,例如,HanLP的n-gram模型是bigram:

@北冰洋   2@盧森堡   1@週日    1@因特網   1@地 1@地域    1@塔斯社   9@尚義    12@巴 1@巴勒斯坦  1@拉法耶特  3@拍賣    1@昆明    1

每一行代表,兩個相鄰單詞共同出現時的頻率(相對於背後的語料庫)。

四、n-gram有什麼用

4.1 文化研究

n-gram模型看起來比較枯燥和冰冷,但實際上,google books ngram項目,催生了一門新學科(Culturomics)的成立,通過數字化的文本,來研究人類行爲和文化趨勢。可查看知乎上的詳細介紹,。《可視化未來》這本書也有詳細介紹。
這裏寫圖片描述
還有TED上的視頻《what_we_learned_from_5_million_books》,十分精彩。
這裏寫圖片描述

4.2 分詞算法

4.3 語音識別

4.4 輸入法

大家每天都在使用的東西,請看:輸入“tashiyanjiushengwude”,可能的輸出有:

它實驗救生無得
他實驗就生物的
他是研究聖物的
他是研究生物的

究竟哪個是輸入者最想表達的意思,這背後的技術就要用到n-gram語言模型了。item就是每一個拼音對應的可能的字。還記得智能ABC嗎?據說是運用n-gram的鼻祖了。
這裏寫圖片描述

不過搜狗輸入法後來居上,它採用更先進的雲計算技術(n-gram模型的數據量可是相當之大,後面會說到)
這裏寫圖片描述

4.5 機器翻譯

五、n-gram的更多認識

做概率統計的都知道,語料庫的規模越大,做出的n-gram對統計語言模型才更有用,例如,google books ngram項目,單獨對中文的n-gram,從1551年到2009年,總體規模如下:

....
1999    1046431040  8988394 9256
2000    1105382616  10068214    10504
2001    1017707579  8508116 9426
2002    1053775627  9676792 11116
2003    1003400478  9095202 10624
2004    1082612881  9079834 11200
2005    1326794771  10754207    13749
2006    1175160606  9381530 12030
2007    826433846   6121305 7291
2008    752279725   5463702 6436
2009    442976761   2460245 2557
year    n-gram count    book page count book volumecount 
    26859461025 252919372   302652

總共才掃描了30萬卷書,生成的n-gram(從unigram到5-gram)的個數就達到了268億多個。英文的n-gram在4684多億多:

....
1999    9997156197  48914071    91983
2000    11190986329 54799233    103405
2001    11349375656 55886251    104147
2002    12519922882 62335467    117207
2003    13632028136 68561620    127066
2004    14705541576 73346714    139616
2005    14425183957 72756812    138132
2006    15310495914 77883896    148342
2007    16206118071 82969746    155472
2008    19482936409 108811006   206272
year    n-gram count    book page count book volumecount 
    468491999592    2441898561  4541627

這個數量級的n-gram,無論是存儲還是檢索,對技術都是極大的挑戰。
以上是google books n-gram的相關數據,在前些年,google還提供了基於web的1個T的n-gram,規模如下:

Number of tokens:    1,024,908,267,229
Number of sentences:    95,119,665,584
Number of unigrams:         13,588,391
Number of bigrams:         314,843,401
Number of trigrams:        977,069,902
Number of fourgrams:     1,313,818,354
Number of fivegrams:     1,176,470,663

共950億個句子,10000億個token,還只是2006年一年的數據。
除了google,微軟通過它的BING搜索,也開放了PB級別(1PB = 1PeraByte = 1024 TB = 1024 * 1024 * 1024 MB)的n-gram,這種數量級別的,只能放雲存儲上了。

參考資料:
斯坦福大學自然語言處理公開課

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章