1. 程式人生 > >srilm語言模型中的平滑演算法——Good-Turing平滑演算法

srilm語言模型中的平滑演算法——Good-Turing平滑演算法

最近使用使用python自己寫的語言模型和srilm得到的語言模型做對比,srilm裡還是有很多trick的,尤其是平滑演算法,集成了很多資料平滑演算法,研究的時候,記錄一下。

在srilm中有回退和差值兩類平滑演算法,簡單來說,回退就是將出現過的ngram的概率打個折扣,將那部分折扣下來的概率均攤為未出現的ngram作為他們的概率,而插值呢,一樣是對出現過的ngram打折扣,但是折扣下來的概率值均攤到所有的ngram上。對於那些出現的ngram來說,他們使用最大似然得到的真正概率(頻率)A大於使用插值得到的概率B大於使用回退得到的概率C,即

A>B>C

主要使用的平滑演算法

Good-Turing平滑演算法

Good-Turing演算法的思想是,對於出現次數大於某一閾值的ngram使最大似然用頻率計算是比較準確的,但是如果小於這個閾值,最大似然估計就不準了。這時候,演算法的處理就是利用出現次數較多的N階元組去調整出現比他少的N階元組的估計量。演算法的

對於中產(那些發生次數小於閾值的元組)發生了r次,假設它發生了r*次:

                                                                              \boldsymbol{r}*=\boldsymbol{(r+1)}\frac{N_{r+1}}{N_{r}}

\boldsymbol{N_{r}}是所有發生次數為r的元組個數,同樣\boldsymbol{N_{r+1}}是所有發生次數為r+1的元組個數,一般來說,發生次數為r的元組個數多餘發生次數為r+1的元組個數,這裡不要弄混發生次數和元組個數,如果做個比喻的話,那元組就是字典的key,元組個數是字典的value,元組個數是key的個數,不太嚴謹,但是好理解。

這樣的話,對於發生個數為0的元組的計數就不為0了,每個中產的概率都比以前要小了,小的那部分,分給了窮人。這裡的發生個數為0指的是在訓練集中發生次數為0,即在訓練集中沒有出現,在測試集中第一次出現,然後用的是在訓練集中出現1次的元組來估計,這樣那些第一次出現的次數為不為0,實現了平滑。

證明所有元組概率之和為1的推到如下:

nr是所有發生次數為r的元組個數,同樣nr+1是所有發生次數為r+1的元組個數,一般來說,發生次數為r的元組個數多餘發生次數為r+1的元組個數,這裡不要弄混發生次數和元組個數,如果做個比喻的話,那元組就是字典的key,元組個數是字典的value,元組個數是key的個數,不太嚴謹,但是好理解。

這樣的話,對於發生個數為0的元組的計數就不為0了,每個中產的概率都比以前要小了,小的那部分,分給了窮人。這裡的發生個數為0指的是在訓練集中發生次數為0,即在訓練集中沒有出現,在測試集中第一次出現,然後用的是在訓練集中出現1次的元組來估計,這樣那些第一次出現的次數為不為0,實現了平滑。

證明所有元組概率之和為1的推到如下:

nr是所有發生次數為r的元組個數,同樣nr+1是所有發生次數為r+1的元組個數,一般來說,發生次數為r的元組個數多餘發生次數為r+1的元組個數,這裡不要弄混發生次數和元組個數,如果做個比喻的話,那元組就是字典的key,元組個數是字典的value,元組個數是key的個數,不太嚴謹,但是好理解。

這樣的話,對於發生個數為0的元組的計數就不為0了,每個中產的概率都比以前要小了,小的那部分,分給了窮人。這裡的發生個數為0指的是在訓練集中發生次數為0,即在訓練集中沒有出現,在測試集中第一次出現,然後用的是在訓練集中出現1次的元組來估計,這樣那些第一次出現的次數為不為0,實現了平滑。

證明所有元組概率之和為1的推到如下:

                                                   

nr是所有發生次數為r的元組個數,同樣nr+1是所有發生次數為r+1的元組個數,一般來說,發生次數為r的元組個數多餘發生次數為r+1的元組個數,這裡不要弄混發生次數和元組個數,如果做個比喻的話,那元組就是字典的key,元組個數是字典的value,元組個數是key的個數,不太嚴謹,但是好理解。

這樣的話,對於發生個數為0的元組的計數就不為0了,每個中產的概率都比以前要小了,小的那部分,分給了窮人。這裡的發生個數為0指的是在訓練集中發生次數為0,即在訓練集中沒有出現,在測試集中第一次出現,然後用的是在訓練集中出現1次的元組來估計,這樣那些第一次出現的次數為不為0,實現了平滑。

證明所有元組概率之和為1的推到如下:

                                              

上式是對於次數為r概率重新估計的元組,概率為θ

保證概率的總和為1,出現同樣次數的元組具有相同的概率,所以總的概率就是出現在不同次數的概率與這個次數的元組總數的乘積之和,即θ(r)N的總和:

                                       

  其中

                                              \sum (r+1) N_{r+1}=\sum rN_{r}

因此最後保證了概率之和為1:

                                         

參考:

相關推薦

srilm語言模型平滑演算法——Good-Turing平滑演算法

最近使用使用python自己寫的語言模型和srilm得到的語言模型做對比,srilm裡還是有很多trick的,尤其是平滑演算法,集成了很多資料平滑演算法,研究的時候,記錄一下。 在srilm中有回退和差值兩類平滑演算法,簡單來說,回退就是將出現過的ngram的概率打個折扣,

SRILM語言模型格式解讀

highlight use ref ron 概率 出現 5.1 srilm tag 先看一下語言模型的輸出格式 [html] view plain copy \data\ ngram 1=64000 ngram 2=522530 ngram 3

Mac OSX下安裝配置SRILM語言模型訓練工具

1.安裝依賴軟體包 C/C++ compiler:編譯器gcc 3.4.3及以上版本; Tcl toolkit: 可嵌入式指令碼語言。用於指令碼程式設計和測試,這裡是為了SRILM的測試。此處需要7.3及以上版本,本例用的是tcl8.5(貌似是系統自帶的,安

n-gram語言模型平滑演算法

一、n-gram模型概念 n-gram模型也稱為n-1階馬爾科夫模型,它有一個有限歷史假設:當前詞的出現概率僅僅與前面n-1個詞相關,可以表示為:                     &n

NLP語言模型及文字特徵提取演算法

本文以基本語言模型為邏輯主線,漫談NLP中兩個核心問題,即文字表示(Text Representation)與文字特徵提取(Feature Engineering)。通過本文你會發現,NLP的一部分經典演算法以及目前的發展都能夠通過文字表示串聯在一起,有個

SRILM使用之訓練無平滑語言模型

【語料準備】 訓練語料 wget http://idiom.ucsd.edu/~rlevy/teaching/2015winter/lign165/lectures/lecture13/toy-example/corpus.txt 測試語料 wg

word2vec 的數學原理三 背景知識 語言模型

tps 詳解 art 技術 nbsp log 分享圖片 word2vec 自己 主要參考: word2vec 中的數學原理詳解 自己動手寫 word2vec word2vec 中的數學原理三 背景知識 語言模型

自然語言處理語言模型預訓練方法

16px 預測 網絡語言 緩解 lang 大數 一中 標準 小數 自然語言處理中的語言模型預訓練方法 最近,在自然語言處理(NLP)領域中,使用語言模型預訓練方法在多項NLP任務上都獲得了不錯的提升,廣泛受到了各界的關註。就此,我將最近看的一些相關論文進行總結,選取了幾

為什麼使用神經網路訓練得到的語言模型不需要做資料平滑

我們都知道,在自然語言處理的語言模型裡面,最核心的就是計算得到一個句子的概率,為了得到這個概率,我們需要計算得到一系列的條件概率。這些條件概率就是整個語言模型的引數。 為了得到條件概率,我們可以有兩種不同的方法。 第一種就是使用統計概率方法,通過統計的方法得到不同的詞對的條件概率。這種方

NLP語言模型預訓練方法

最近,在自然語言處理(NLP)領域中,使用語言模型預訓練方法在多項NLP任務上都獲得了不錯的提升,廣泛受到了各界的關注。就此,我將最近看的一些相關論文進行總結,選取了幾個代表性模型(包括ELMo [1],OpenAI GPT [2]和BERT [3])和大家一起學習分享。

語言模型訓練工具SRILM

                     SRILM是著名的約翰霍普金斯夏季研討會(Johns Hopkins Summer Workshop)的產物,誕生於1995年,由SRI實驗室的Andreas Stolcke負責開發維護。  關於SRILM的安裝,我已經在前面關於moses平臺搭建的文章(參見:《Mo

自然語言處理CNN模型幾種常見的Max Pooling操作

CNN是目前自然語言處理中和RNN並駕齊驅的兩種最常見的深度學習模型。圖1展示了在NLP任務中使用CNN模型的典型網路結構。一般而言,輸入的字或者詞用Word Embedding的方式表達,這樣本來一維的文字資訊輸入就轉換成了二維的輸入結構,假設輸入X包含m個字元,而每個

自然語言處理的詞袋模型

詞袋模型 from sklearn.feature_extraction.text import CountVectorizer import os import re import jieba.posseg as pseg # 載入停用詞表 stop_

R語言︱機器學習模型評估方案(以隨機森林演算法為例)

      筆者寄語:本文中大多內容來自《資料探勘之道》,本文為讀書筆記。在剛剛接觸機器學習的時候,覺得在監督學習之後,做一個混淆矩陣就已經足夠,但是完整的機器學習解決方案並不會如此草率。需要完整的評價模型的方式。      常見的應用在監督學習演算法中的是計算平均絕對誤差(

自然語言處理的N-Gram模型詳解

N-Gram(有時也稱為N元模型)是自然語言處理中一個非常重要的概念,通常在NLP中,人們基於一定的語料庫,可以利用N-Gram來預計或者評估一個句子是否合理。另外一方面,N-Gram的另外一個作用是用來評估兩個字串之間的差異程度。這是模糊匹配中常用的一種手段。本文將從此開始

EM(期望最大演算法)在高斯混合模型的python實現

以下程式碼僅實現了兩個高斯混合模型在均勻分佈條件下的引數估計,想要實現完全隨機的非均勻分佈的多高斯混合模型,可在上面加以修改。具體參考書中的9.3.2節 ##python實現## import math #import copy import numpy

EM演算法在高斯混合模型的應用(詳細解釋與求解)

1、高斯混合模型GMM 是指具有以下概率分佈的模型: P ( y

概率語言模型 Probabilistic Language Modeling (二) --- 模型估計演算法介紹

1. 緣由–資料稀疏問題 假設k泛指某一事件,N(k)表示事件k觀察到的頻數,極大似然法使用相對頻數作為對事件k的概率估計為p(k)=N(k)N,在語言模型中,訓練語料中大量的事件N(k)=0,這顯然沒有反映真實情況,這種零值的概率估計會導致語言模型演算法的失

語言模型:Trigram-模型平滑估計

作者:chen_h 微訊號 & QQ:862251340 微信公眾號:coderpai 該系列將描述一些自然語言處理方面的技術,完整目錄請點選這裡。 正如我們前面討論的,三元語言模型有非常多的引數。利用最大似然估計會造成一個很嚴重的問

語言模型訓練工具:SRILM的使用

一、小資料 假設有去除特殊符號的訓練文字trainfile.txt,以及測試文字testfile.txt,那麼訓練一個語言模型以及對其進行評測的步驟如下: 1:詞頻統計       ngram-count -text trainfile.txt -order 3 -writ