語言模型訓練工具SRILM

2021-06-21 06:02:48 字數 3198 閱讀 3521

srilm的全稱是stanford research institute language modeling toolkit  。他被用來構建和應用統計語言模型,主要用於語音識別,統計標註和切分,以及機器翻譯等工作。

一、windows下編譯

ubuntu編譯,可以再52nlp中去找。

vc編譯,可以再下面鏈結找,

instructions

簡單說,

2, 解壓工具包,

4,把工具包的東西都放到srilm.sln所在資料夾下,

5,把lib的那個project編譯一下,

6,把其他project都編譯一下。

vc中編譯srilm就大功告成了。

ps:直接按照上面的步驟來做並不能成功編譯,原因是有幾個工程缺少標頭檔案,到相關目錄下找到標頭檔案加上即可。

更多資料:

二、實用簡介

srilm的主要目標是支援語言模型的估計和評測。估計是從訓練資料(訓練集)中得到乙個模型,包括最大似然估計及相應的平滑演算法;而評測則是從測試 集中計算其困惑度(mit自然語言處理概率語言模型有相關介紹)。其最基礎和最核心的模組是n-gram模組,這也是最早實現的模組,包括兩個工 具:ngram-count和ngram,相應的被用來估計語言模型和計算語言模型的困惑度。

乙個標準的語言模型(三元語言模型(trigram),使用 good-truing打折法和katz回退進行平衡)可以用如下的命令構建:

ngram-count -text traindata -lm lm

其中lm是輸出的語言模型檔案,可以用如下的命令進行評測:

ngram -lm lm -ppl testdata -debug 2

其中具體的引數可參看官方**的幫助文件,如果你已經在linux下編譯好了,可以直接使用man呼叫幫助文件。

事實上,統計機器翻譯框架主要用的就是 n-gram這個模組來訓練語言模型。

1、從語料庫中生成n-gram計數檔案:

ngram-count -text europarl-v3b.en -order 3 -write europarl.en.count

其中引數

-text指向輸入檔案,此處為europarl-v3b.en;

-order指向生成幾元的n-gram,即n,此處為3元;

-write指向輸出檔案,此處為europarl.en.count,

輸出內容為:

…sweeteners 66

sweeteners should 1

sweeteners should be 1

…分為兩列,第一列為n元詞,第二列為相應的頻率。如一元詞sweeteners在語料庫中的頻率統計為66次;二元詞sweeteners shoul在語料庫中的頻率統計為1次;三元sweeteners should be在語料庫中的頻率統計為1次。

ngram-count -read europarl.en.count -order 3 -lm europarl.en.lm -interpolate -kndiscount

其中引數

-read指向輸入檔案,此處為 europarl.en.count;

-order與上同;-lm指向訓練好的語言模型輸出檔案,此處為europarl.en.lm;

最後兩個引數為所 採用的平滑方法,-interpolate為插值平滑,-kndiscount為 modified kneser-ney 打折法,這兩個是聯合使用的。

需要補充的是,一般我們訓練語言模型時,這兩步是合二為一的,這裡主要是為了介紹清楚n-gram語言模型訓練的步驟細節。

語言模型europarl.en.lm的檔案格式如下,為 arpa檔案格式。為了說明方便,檔案中的括號是我加上的注釋:

data

ngram 1=262627 (注:一元詞有262627個 )

ngram 2=3708250 (注:二元詞有 3708250個)

ngram 3=2707112 (注:三元詞有 2707112個)

1-grams:(注:以下為一元詞的基本情況)

-4.891179(注:log(概率),以10為底) ! -1.361815

-6.482389 !) -0.1282758

-6.482389 !』 -0.1282758

-5.254417 「(注:一元詞) -0.1470514

-6.482389 「『 -0.1282758(注:log(回退權重),以10為底)

…2-grams:

-0.02140159 !

-2.266701 ! –

-0.5719482 !)

-0.5719482 !』

-2.023553 」 『biomass』

-2.023553 」 『vertical』

…3-grams:

-0.01154674 the !

-0.01154674 urgent !

-0.01154674 us』 !

-1.075004 the 「.eu」 top

-0.827616 the 「.eu」 domain

-0.9724987 the 「.eu」 top-level …

ngram -ppl devtest2006.en -order 3 -lm europarl.en.lm > europarl.en.lm.ppl

其中測試集採用wmt08用於機器翻譯的測試集devtest2006.en,2000句;

引數-ppl為對測試集句子進行評分(logp(t),其 中p(t)為所有句子的概率乘積)和計算測試集困惑度的引數;

europarl.en.lm.ppl為輸出結果檔案;

其他引數同上。

輸出檔案結果如下:

file devtest2006.en: 2000 sentences, 52388 words, 249 oovs

0 zeroprobs, logprob= -105980 ppl= 90.6875 ppl1= 107.805

第一行檔案devtest2006.en的基本資訊:2000句,52888個單詞,249個未登入詞;

第二行為評分的基本情況:無0概率;logp(t)=-105980,ppl==90.6875, ppl1= 107.805,均為困惑度。其公式稍有不同,如下:

其中sen和word分別代表句子和單詞數。

SRILM 語言模型訓練工具

2,安裝 make srilm pwd3,配置 將bin和bin i686 m64新增到path環境變數中 4,測試 ngram count help 5,海量語料訓練 由於對於大規模語料進行語言模型的訓練,經常會導致記憶體問題。經過測試,用srilm處理乙個3g的語料,訓練3元語言模型,32g記憶...

用srilm生成語言模型

srilm的主要目標是支援語言模型的估計和評測。估計是從訓練資料 訓練集 中得到乙個模型,包括最大似然估計及相應的平滑演算法 而評測則是從測試集中計算其困惑度。其最基礎和最核心的模組是n gram模組,這也是最早實現的模組,包括兩個工 具 ngram count和ngram,相應的被用來估計語言模型...

語言模型訓練

模型訓練 nohup ngram count text tieba.word.merged order 4 vocab words.txt kndiscount interpolate lm tieba.word.4gram.lm 結果測試 ngram lm tieba.word.4gram.lm ...