1. 程式人生 > >n-gram

n-gram

一行 正是 講解 圖片 sea 童鞋 問題 等等 機器翻譯

n-gram

  1. 介紹語言模型
  2. 什麽是N-gram模型
  3. N-Gram模型詳解
  4. 應用n-gram模型語言來評估
  5. n-gram 模型其他應用舉例
  6. 總結

介紹語言模型

什麽是語言模型?簡單地說,語言模型就是用來計算一個句子的概率的模型,也就是判斷一句話是否合理的概率?說說其應用,一直以來,如何讓計算機可以理解我們人類的語言,都是人工智能領域的大問題。而機器翻譯,問答系統,語音識別,分詞,輸入法,搜索引擎的自動補全等也都應用到了語言模型。當然,一開始人們都是進行基於規則的語言模型的研究,但這樣往往有很大的問題,後來有人發明了基於統計的語言模型,並發現了其巨大的效果,而今天我們要講的N-gram語言模型,也正是一種於基於統計的語言模型

N-gram語言模型可以說是當下應用最廣的語言模型,當然了,隨著深度學習的發展,現在也有用RNN/LSTM這樣的神經網絡語言模型,效果比N-gram有時候要更好一些,但RNN解碼出每一個詞都得現算語言模型分數,有較慢的劣勢。

N-Gram模型詳解

既然要做語言模型,基於統計概率來說,我們需要計算句子的概率大小:,這個也就是最終要求的一句話的概率了,概率大,說明更合理,概率小,說明不合理,不是人話。。。。

因為是不能直接計算,所以我們先應用條件概率得到

中間插入下條件概率: P(B|A):A 條件下 B 發生的概率。從一個大的空間進入到一個子空間(切片),計算在子空間中的占比。

技術分享圖片

然而,如果直接算條件概率轉化後的式子的話,對每個詞要考慮它前面的所有詞,這在實際中意義不大,顯然並不好算。那這個時候我們可以添加什麽假設來簡化嗎?可以的,我們可以基於馬爾科夫假設來做簡化。

什麽是馬爾科夫假設?

馬爾科夫假設是指,每個詞出現的概率只跟它前面的少數幾個詞有關。比如,二階馬爾科夫假設只考慮前面兩個詞,相應的語言模型是三元模型。引入了馬爾科夫假設的語言模型,也可以叫做馬爾科夫模型。

馬爾可夫鏈(Markov chain)為狀態空間中經過從一個狀態到另一個狀態的轉換的隨機過程。該過程要求具備"無記憶"的性質:下一狀態的概率分布只能由當前狀態決定,在時間序列中它前面的事件均與之無關。

也就是說,應用了這個假設表明了當前這個詞僅僅跟前面幾個有限的詞相關,因此也就不必追溯到最開始的那個詞,這樣便可以大幅縮減上述算式的長度。即式子變成了這樣:

註:這裏的m表示前m個詞相關

然後,我們就可以設置m=1,2,3,....得到相應的一元模型,二元模型,三元模型了,關於

當 m=1, 一個一元模型(unigram model)即為 :

技術分享圖片

當 m=2, 一個二元模型(bigram model)即為 :

技術分享圖片

當 m=3, 一個三元模型(trigram model)即為

技術分享圖片

而N-Gram模型也就是這樣,當m=1,叫1-gram或者unigram ;m=2,叫2-gram或者bigram ;當 m=3叫3-gram或者trigram ;當m=N時,就表示的是N-gram啦。

說明了什麽是N-Gram模型之後,下面說說N-Gram經典應用,同時更深入的理解下:

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

假設現在有一個語料庫,我們統計了下面的一些詞出現的數量

技術分享圖片

下面的這些概率值作為已知條件:

技術分享圖片

p(want|<s>) = 0.25

下面這個表給出的是基於Bigram模型進行計數之結果

技術分享圖片

例如,其中第一行,第二列 表示給定前一個詞是 "i" 時,當前詞為"want"的情況一共出現了827次。據此,我們便可以算得相應的頻率分布表如下。

技術分享圖片

比如說,我們就以表中的p(eat|i)=0.0036這個概率值講解,從表一得出"i"一共出現了2533次,而其後出現eat的次數一共有9次,p(eat|i)=p(eat,i)/p(i)=count(eat,i)/count(i)=9/2533 = 0.0036

下面我們通過基於這個語料庫來判斷s1="<s> i want english food</s>" 與s2 = "<s> want i english food</s>"哪個句子更合理:

首先來判斷p(s1)

P(s1)=P(i|<s>)P(want|i)P(english|want)P(food|english)P(</s>|food)

=0.25×0.33×0.0011×0.5×0.68=0.000031

再來求p(s2)?

P(s2)=P(want|<s>)P(i|want)P(english|want)P(food|english)P(</s>|food)

=0.25*0.0022*0.0011*0.5*0.68 = 0.00000002057

通過比較我們可以明顯發現0.00000002057<0.000031,也就是說s1= "i want english food</s>"更合理。

當然,以上是對於二元語言模型(bigram model)的,大家也可以算下三元,或者1元語言模型的概率,不過結果都應該是一樣的,

再深層次的分析,我們可以發現這兩個句子的概率的不同,主要是由於順序i want還是want i的問題,根據我們的直覺和常用搭配語法,i want要比want i出現的幾率要大很多。所以兩者的差異,第一個概率大,第二個概率小,也就能說的通了。

註意,以上的例子來自:自然語言處理中的N-Gram模型詳解 - 白馬負金羈 - CSDN博客

n-gram 模型其他應用舉例

n-gram模型也有其他很多應用,以下一一舉例:

1.研究人類文明:n-gram模型催生了一門新學科(Culturomics)的成立,通過數字化的文本,來研究人類行為和文化趨勢。《可視化未來》這本書有詳細介紹,也可以通過知乎上的詳細介紹,還有就是TED上的視頻:what_we_learned_from_5_million_books 。

2.搜索引擎:當你在谷歌或者百度的時候,輸入一個或幾個詞,搜索框通常會以下拉菜單的形式給出幾個像下圖一樣的備選,這些備選其實是在猜想你想要搜索的那個詞串。如下圖:

技術分享圖片

實際上這些都是根據語言模型得出。比如使用的是二元語言模型預測下一個單詞:排序的過程就是:

p("不一樣"|"我們")>p("的愛"|"我們")>p("相愛吧"|"我們")>.......>p("這一家"|"我們"),這些概率值的求法和上面提到的完全一樣,數據的來源可以是用戶搜索的log。

3.輸入法:比如輸入"zhongguo",可能的輸出有:中國,種過,中過等等....這背後的技術就要用到n-gram語言模型了。item就是每一個拼音對應的可能的字。

.......(還有很多,只有有關語言模型,都可以應用)

總結

以上就是今天我們了解的所有內容了。當然,對於n-gram,我們可能需要知道語料庫的規模越大,做出的n-gram對統計語言模型才更有用,或者n-gram的n大小對性能的影響也是很大的,比如n更大的時候對下一個詞出現的約束性信息更多,有更大的辨別力,n更小的時候在訓練語料庫中出現的次數更多,有更高的可靠性 ,等等,這些有興趣的童鞋就自己去查查吧,最後推薦一些書籍:

吳軍. 2012. 《數學之美》.

關毅. 2007. 哈工大:統計自然語言處理.

fandywang, 2012,《NLP&統計語言模型》.

等等,都有對n-gram或者語言模型的講述,值得一看的!

n-gram