各位小夥伴們大家好,資料平滑這個地方我想使用宗成慶老師的書中的一個例子進行開始,從而引出這一篇文章的主題,我們為什麼要需要資料平滑以及常用的資料平滑的模型,話不多說,開始行動:
請看這個例子:
假設語料是由下面的三個句子構成:
①:BROWN READ HOLY BIBLE
②:MARK READ A TEXT BOOK
③:HE READ A BOOK BY DAVID
如果按照最大似然估計的方法計算p(BROWN READ A BOOK)的話:
因此:
但是這時候問題來了:
如果我們這時候要求p(David read a book),這時候概率是多少呢?
但是根據我們自己積累的知識,Brown和David都是人,Brown可以看書,為啥David不可以看書,這個顯然是不對的,而造成這個方法的主要原因還是因為我們的語料庫太小,不夠豐富,事實上我們是希望我們的語料庫越大越好,越全越給力,不然一旦給定你的語句的概率是0,無論你的句子書寫的多麼優美,也是達不到我們人類的期望的效果,所以這時候我們需要給所有可能出現的字串一個非零的概率值來去解決這樣的問題,這就是所謂的平滑.
平滑的目的在上邊我們已經所說,總結概括就是解決由於資料匱乏(稀疏)引起的零概率的問題,而所採用的方法就是從高概率語句中分出微小的概率給予零概率的句子,在宗成慶老師的書中形象的說明是”劫富濟貧”,而資料平滑是語言模型的核心的問題,宗成慶老師的書中給出了太多的演算法,在這裡我只記錄幾種演算法,然後貫通思路,如果大家深入瞭解的話可以自己讀書和讀宗老師提供的論文:
一:加法平滑方法
演算法的基本思想是:在這裡先說一下加一法,加一法其實是每一種情況出現之後次數加1,即假設每個二元語法出現的次數比實際出現的次數多一次,這樣就叫做了加一法,而加法平滑其實就是不是讓每一個n元語法發生的次數比實際的統計次數多一次,而是假設比實際出現的情況多發生△次,並且0<△<1,這就有公式:
二:Good Turing估計法:
這個方法是很多平滑技術的核心
在上邊為什麼會是小於1,在這裡我證明了一下:
缺陷:
三:Jelinek-Merer平滑方法
基本思想:主要利用低元N-gram模型對高元N-gram模型進行線性插值
四:絕對減值法
各種平滑方法的比較:
不管訓練語料規模多大,對於二元語法和三元語法而言,Kneser-Ney平滑方法和修正的Kneser-Ney平滑方法的效果都好於其他所有的平滑方法。Katz平滑方法和Jelinek- Mercer平滑方法次之。
在稀疏資料的情況下,Jelinek-Mercer平滑方法優於Katz平滑方法;而在有大量資料 的情況下,Katz平滑方法則優於Jelinek-Mercer平滑方法。
這裡我畫了一張圖:
這裡淺談一下我在讀宗成慶老師這本書的時候的一點點小看法,讀宗老師的書總是感覺太過於全,但是很多東西都講得不夠透徹,並且很多地方也是有趕工的痕跡,不過總體上的路線都能夠總結出來,但是其中宗老師提供了很多的論文地址,大家可以去搜一搜然後在去詳細深入.
影響平滑演算法效能的因素:
平滑方法的相對效能不訓練語料的規模、n元語法模型的階數和訓練語料本身有較大 的關係,其效果可能會隨著這些因素的丌同而出現很大的變化。
語言模型的缺陷 :
1:在訓練語言模型時所採用的語料往往來自多種丌同的領域,這些綜合性語料難以反映在不同領域之間在語言使用規律上的差異,而語言模型恰恰對於訓練文字的型別、主題 和風格等都十分敏感;
2:n 元語言模型的獨立性假設的前提是一個文字中的當前詞出現的概率只不它前面相鄰 的n-1 個詞相關,但這種假設在很多情況下是明顯不成立的。