NLP入門之語言模型以及n元文法

雲時之間發表於2019-02-27

各位小夥伴們大家好,在接下來的文章中我們將講述一下什麼是語言模型,以及語言模型上的應用,在完善之後我們將會簡單的講解一下語言模型的效能評估,這三點將是這一篇文章的主要內容.

在閱讀這篇文章之前,我希望大家可以已經有以下的知識積累作為基礎,像是概率論裡的基本概念,比如最大似然估計,貝葉斯分類,貝葉斯決策理論等等,甚至是一些包括資訊理論的簡單基本概念,比如資訊熵等,並且如果能對簡單的形式語言可以理解就更加完美了,話不多說,馬上開始這一篇文章的主要內容.

1:為什麼我們需要新的方法?

在前幾篇我的關於形式語言的文章中,我們大致可以理解到形式語言有以下的幾個缺陷:

1:比如像漢語,英語這樣的大型的自然語言系統,形式語言就比較難以構造精確的文法.

2:形式語言的邏輯規則太過於複雜,實際上並不符合我們的學習語言的習慣.

3:有一些句子.比如你這句子的文法是正確的,但是實際上在我們的生活中是不可能發生的,形式語言是無法識別這些句子的.

為了解決這些問題,科學家們在研究好久了後找到了新的方向,科學家們在基於大量的研究之後,發現基於大量的語料,並且採用統計學的手段建立模型,發現可以很好地去提升語言模型的效率.

這時候我們不妨想一下為什麼統計方法的出現為自然語言處理提供了方向?

首先,在應用統計方法之前,大規模的語料庫的出現為自然語言統計處理方法的實現提供了可能(在我看來,這可能也是一個制約).並且語料庫裡的語言,相對於形式語言可以更加的符合人類的習慣,從而更加的發現語言使用的一般規律,這樣一來,我們就可以使用機器學習模型來自動的獲取語言的知識,這樣的手段就可以更加的豐富,並且基於機器的能力,我們甚至可以發現推測未知語言的能力.[說句題外話,在現在各行各業的機器學習廣泛應用的現在,很多的行業對於你本身的業務知識的要求並沒有那麼高,只有在資料不夠充足的情況下,我們才更加的需要藉助業務知識,但是隻要有合適的,足夠的海量資料,我們其實就可以跑起業務,直接獲得合適的數學模型,從而獲得智慧和知識,從而獲取商業價值]

任何的一個資訊的處理系統其實都是需要大量的資料和知識庫的支援,在機器學習這樣的以資料驅動的學科中更是如此,語料庫和語言知識作為基本的資源儘管在不同的自然語言處理方向上起到了不同的作用,但是實際上卻是現自然語言的基礎甚至是瓶頸.

2:語言模型

語言模型在自然語言處理中佔有著重要的地位,特別是在基於統計模型的語音識別,機器翻譯,分詞和文法分析中都是有這廣泛的應用,因為我最近在學習n元語法模型,這個模型其實還是比較簡單的,並且比較直觀,但是如果資料缺乏的話就必須要使用平滑演算法,那什麼是n元語法,那什麼樣的平滑演算法更加的好用?

1:n元語法:

一個語言模型的構造一般是字串s的頻率分佈P(s),這裡的P(s)是指字串s作為一個句子出現的頻率,比如你的口頭禪是OK,你可能100句話中會說25句OK,那麼我們就可以認為P(ok)的概率是1/4,而在”how are you”中出現的概率就為0,因為這樣的句子裡很少有人會摻雜上OK,在這裡我們應該注意,語言模型和形式語言不同,語言模型與句子是否合乎語法是沒有什麼關係的,即便是一個句子完全合乎語法邏輯,但是我們可能會覺得很彆扭,那麼這個句子出現的概率就是接近為0.

接下來給出語言模型的定義:

對於一個由L個基元(字,詞,短語)組成的句子,S=W1,W2,…..Wn,他的概率計算公式可以看作為:

NLP入門之語言模型以及n元文法

在這個句子中,產生第i個詞的概率是由已經產生的前邊的i-1個詞來決定的,一般的我們將前邊的i-1個詞稱為第i個詞的歷史.在這樣的計算方法很容易就暴露出問題,如果前邊的詞語歷史的長度不斷地增加,不同的歷史數目隨著指數級增長,假設現在的長度是i-1,那麼這樣的詞彙集合大小就會變成L^i-1個歷史,但是在這樣的情況下我們就要考慮在所有的L^i-1的情況下產生第i個詞的概率.舉個例子:

假設L=5000,I=3,那麼這樣的自由引數的數量得是L^i,也就是1250億個,我們一看這個資料就懵逼了,怎麼可能從訓練資料中正確的估計出這些引數.當然我們也不可能採用這樣的笨方法,科學家們為了解決這個問題,相處了方法,可以將歷史(w1,w2,….wi-1)按照某一個法則對映到等價類E(w1,w2,….wi-1)中,現在假設:

NLP入門之語言模型以及n元文法

這樣一來,這個自由引數的數量也會大大減少,通常用的一個方法是將兩個歷史對映到同一個等價類,當且僅當兩個歷史最近的n-1的詞相同時,如果E1=E2,呢麼就說裡邊的歷史是相同的.

滿足上述的語言模型就是成為n元語法,但是我們在使用時n不應該選取的過大,否則等價類太多,自由引數依舊存在,這樣的話其實和沒有改進沒有啥區別,一般情況下我發現n=3是非常合適的,當n=1時,wi是獨立於歷史的,當n=2時,這個wi只和wi-1有關係,這樣的話就被稱為一階馬爾科夫鏈,當n=3時,其實跟wi前邊的;兩個詞有關,這也就是稱為二階馬爾科夫鏈.

就按照三元文法為例:

在之前的介紹中,我們可以認為這是一個詞的概率實際上只是跟前邊的詞有關,那麼就可以有以下的方程:

NLP入門之語言模型以及n元文法

為了使p(wi|wi-1)對於i=1有意義,我們需要加一個句首標記,為了使概率之和為1,這就需要加一個EOS,這樣我們的計算就是:

NLP入門之語言模型以及n元文法

為了估計P(WI|WI-1)的條件概率,我們計算出wi-1,wi的詞彙出此案的頻率然後進行歸一化,公式如下:

NLP入門之語言模型以及n元文法

這樣用於構建語言模型的文字成為訓練文字,這樣的n元語法模型,一般用幾百萬個詞來訓練,上邊那個式子就可以稱為MLE,極大似然估計.

對於n>2的n元語法模型,條件概率中藥考慮前面的n-1個詞的概率,為了使n>2成立,我們取:

NLP入門之語言模型以及n元文法

請看下面的例子,假設訓練語料S由下面的三個句子組成:

1:BROWN READ HOLY BIBLE

2:MARK READ A TEXT BOOK

3:HE READ A BOOK BY DAVID

然後用最大似然估計方法來計算概率p(BROWN READ A BOOK)

結果如下:

NLP入門之語言模型以及n元文法

因此結果如下:

NLP入門之語言模型以及n元文法

這個句子出現的概率為0.06,這也就是n元文法的一個簡單應用.

下一篇文章我們將講述下模型的選擇以及模型的效能評估.

相關文章