各位小夥伴們你們好,數據平滑這個地方我想使用宗成慶老師的書中的一個例子進行開始,從而引出這一篇文章的主題,咱們爲何要須要數據平滑以及經常使用的數據平滑的模型,話很少說,開始行動:算法
請看這個例子:性能
假設語料是由下面的三個句子構成:cdn
①:BROWN READ HOLY BIBLEblog
②:MARK READ A TEXT BOOK字符串
③:HE READ A BOOK BY DAVIDit
若是按照最大似然估計的方法計算p(BROWN READ A BOOK)的話:io
所以:class
可是這時候問題來了:語法
若是咱們這時候要求p(David read a book),這時候機率是多少呢?lazyload
可是根據咱們本身積累的知識,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 個詞相關,但這種假設在不少狀況下是明顯不成立的。