srilm建立語言模型
reference:
http://blog.csdn.net/zhoubl668/article/details/8365716
測試資料可以從這個網站下載: http://www.statmt.org/europarl/ , 我測試下載的是 parallel corpus Bulgarian-English.
1.生成n-gram計數檔案
./ngram-count -text ./test/europarl-v7.bg-en.en -order 3 -write ./test/europarl-v7.bg-en.en.counts
note: -text 表示輸入的檔案,就是我們的所有語音對應的文字檔案,最好是提前做一個資料清理(把標點符號去掉,全都轉化為大寫或者小寫)
-order 表示生成的是n-gram模型,詞的長度最大是3
-write 寫入一個計數檔案
下面是生成的counts檔案中的幾行:
Uncooperative 1 #表示該詞在檔案中出現了一次
Uncooperative countries 1 <span style="font-family: Menlo;">#表示該詞在檔案中出現了一次</span>
Uncooperative countries of 1
propagate 6 #表示該詞在檔案中出現了6次
propagate transplantation 1
propagate transplantation and 1
2.利用生成的n-gram計數檔案,生成語言模型:
./ngram-count -read ./test/europarl-v7.bg-en.en.counts -order 3 -lm ./test/europarl-v7.bg-en.en.lm -interpolate -kndiscount
note: -read 表示讀入的計數檔案-lm 是需要生成匯出的lm檔案
-interpolate 是插值平滑
- kndiscount 是modified kneser-ney 打折法, 跟插值平滑聯合使用,具體什麼演算法還不是很瞭解(???)
下面是生成的lm檔案中的前幾行:
\data\
ngram 1=115075 #表示一元詞的個數
ngram 2=1477406 #表示二元詞的個數
ngram 3=885946
\1-grams:
-5.880136 "A -0.1279694
-6.049498 "Adapting -0.1279694
-6.049498 "America -0.1279694
-6.049498 "BRICS” -0.1279694
-6.049498 "Competitiveness -0.1279694
-6.049498 "County -0.1279694
-6.049498 "Don't -0.1279694
-6.049498 "Ecobales” -0.1279694
-5.880136 "European -0.1279694
-6.049498 "Garden -0.1279694
-6.049498 "Health -0.1279694
-6.049498 "How -0.1279694
上面每一行都是三列, 第一列表示的是 "A 出現的概率(注意這個地方沒有去掉標點符號,而詞與詞之間的分割是以空格來分的), 取以10為底的對數.
可以驗證一下,"A 在counts中的次數是2 一元的總次數是每一個詞出現的次數的和total . math.log10(2./total) 就是第一列的結果
第三列表示的是 回退權重(backoff weight)w,然後 也是 math.log10(w), 具體怎麼計算暫時不是很清楚(???)
3. 利用上一步生成的語言模型計算測試集的困惑度:(???)
這個是對原來的集合計算的一個困惑度:
./ngram -ppl ./test/europarl-v7.bg-en.en -order 3 -lm ./test/europarl-v7.bg-en.en.lm > ./test/europarl-v7.bg-en.en.ppl
file ./test/europarl-v7.bg-en.en: 406879 sentences, 9.8864e+06 words, 0 OOVs
0 zeroprobs, logprob= -1.76278e+07 ppl= 51.5887 ppl1= 60.6785
可以看到集合中沒有未登陸詞,因為我們是用這個集合生成的
0 zeroprobs , 沒有0概率, 沒有句子沒有出現過
logprob , log10(p(T)) , p(T) 所有句子的概率乘積
ppl, ppl1: 均未困惑度,不知道怎麼計算的(???)
下面是eesen中swbd計算語言模型過程:
# Trigram language model
ngram-count -text $dir/train.gz -order 3 -limit-vocab -vocab $dir/wordlist \
-unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o3g.kn.gz
echo "PPL for SWBD1 trigram LM:"
ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout
ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/3gram.ppl2
ngram-count -text $dir/train.gz -order 4 -limit-vocab -vocab $dir/wordlist \
-unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o4g.kn.gz
echo "PPL for SWBD1 4gram LM:"
ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout
ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/4gram.ppl2
可以對比參考一下, 上面還有好多問題,好多不明白的地方,弄懂了再更新。
相關文章
- 使用函式式語言來建立領域模型函式模型
- 大語言模型模型
- 語言大模型大模型
- nlp中的傳統語言模型與神經語言模型模型
- N元語言模型模型
- 小語言模型指南模型
- 8 語言模型簡介模型
- 微調大語言模型模型
- Go語言RESTful JSON API建立GoRESTJSONAPI
- 一文解碼語言模型:語言模型的原理、實戰與評估模型
- 蛋白質語言模型綜述模型
- 大語言模型中的MoE模型
- 如何評估大語言模型模型
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- R語言批量建立資料框R語言
- 使用 Go 語言建立 WebSocket 服務GoWeb
- 使用Go語言建立WebSocket服務GoWeb
- 圖:程式語言的建立者們
- 探索自然語言處理:語言模型的發展與應用自然語言處理模型
- 什麼是大語言模型(LLM)?模型
- 01-大語言模型發展模型
- 語言模型與神經網路模型神經網路
- 深入瞭解視覺語言模型視覺模型
- GPT大語言模型Alpaca-lora本地化部署實踐【大語言模型實踐一】GPT模型
- 基於MDK建立純組合語言--組合語言
- 分步指南:教你在20分鐘內使用機器學習建立語言檢測模型!機器學習模型
- 牛津大學xDeepMind自然語言處理 第13講 語言模型(3)自然語言處理模型
- 從語言學角度看詞嵌入模型模型
- 蘋果OpenELM:開源小語言模型蘋果模型
- 2024年大語言模型的微調模型
- 在本地跑一個大語言模型模型
- 探究大語言模型的思維方式模型
- 語言模型:GPT與HuggingFace的應用模型GPT
- XLM — 基於BERT的跨語言模型模型
- 改進大語言模型的最全方法!模型
- 大語言模型湧現欺騙能力模型
- 我的語言模型應該有多大?模型
- 新型大語言模型的預訓練與後訓練正規化,谷歌的Gemma 2語言模型模型谷歌Gemma
- 新型大語言模型的預訓練與後訓練正規化,Meta的Llama 3.1語言模型模型