N Gram語言模型

2021-07-11 12:03:32 字數 4410 閱讀 8884

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語言模型的思想,可以追溯到資訊理論大師夏農的研究工作,他提出乙個問題:給定一串字母,如」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長什麼樣,是不嚴謹的。它只是乙個語言模型,只要把需要的資訊儲存下來,至於什麼格式都是依據應用來定。如,著名的google books ngram viewer,它的n-gram資料格式是這樣的:

circumvallate   1978   335    91

circumvallate 1979 261 91

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

analysis is often described as

199111

1

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

—@北冰洋   2

—@盧森堡 1

—@週日 1

—@網際網路 1

—@地 1

—@地域 1

—@塔斯社 9

—@尚義 12

—@巴 1

—@巴勒斯坦 1

—@拉法耶特 3

—@拍賣 1

—@昆明 1

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

4.1 文化研究

4.2 分詞演算法

4.3 語音識別

4.4 輸入法

它實驗救生無得

他實驗就生物的

他是研究聖物的

他是研究生物的

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

不過搜狗輸入法後來居上,它採用更先進的雲計算技術(n-gram模型的資料量可是相當之大,後面會說到)

4.5 機器翻譯做概率統計的都知道,語料庫的規模越大,做出的n-gram對統計語言模型才更有用,例如,google books ngram專案,單獨對中文的n-gram,從2023年到2023年,總體規模如下:

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,還只是2023年一年的資料。

除了google,微軟通過它的bing搜尋,也開放了pb級別(1pb = 1perabyte = 1024 tb = 1024 * 1024 * 1024 mb)的n-gram,這種數量級別的,只能放雲儲存上了。

語言模型(N Gram)

問題描述 由於公司業務產品中,需要使用者自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出乙個 使用者填寫的公司名是否有效的模型出來。目標 問題提出來了,就是想找到一種辦法來 使用者填寫的公司名是否有效?問題分析 要想 使用者填寫的公司名稱是否有...

語言模型(N Gram)

問題描述 由於公司業務產品中,需要使用者自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出乙個 使用者填寫的公司名是否有效的模型出來。目標 問題提出來了,就是想找到一種辦法來 使用者填寫的公司名是否有效?問題分析 要想 使用者填寫的公司名稱是否有...

語言模型(N Gram)

問題描述 由於公司業務產品中,需要使用者自己填寫公司名稱,而這個公司名稱存在大量的亂填現象,因此需要對其做一些歸一化的問題。在這基礎上,能延伸出乙個 使用者填寫的公司名是否有效的模型出來。目標 問題提出來了,就是想找到一種辦法來 使用者填寫的公司名是否有效?問題分析 要想 使用者填寫的公司名稱是否有...