使用KenLM訓練n-gram語言模型 (中文)

KenLM工具

相比於SRILM訓練工具包,KenLM的誕生更later,訓練速度更快,支持單機大數據集訓練,相關鏈接如下:
KenLM開源github
KenLM 工具包主頁
KenLM各參數命令的含義
工具包下載地址:http://kheafield.com/code/kenlm.tar.gz
下載KenLM

wget -O - https://kheafield.com/code/kenlm.tar.gz |tar xz

使用cmake編譯安裝,更詳細的信息見kenlm/主目錄下的BUILDING文件

mkdir -p build
cd build
cmake ..
make -j 4

使用KenLM構建中文語言模型流程

  • 數據處理
    • 原始語料的構建(通過腳本的方式)
    • 數據的預處理與數據清洗
    • 非漢字字符將被刪除,阿拉伯數字轉換爲漢字,比如“1000”轉換爲“一千”;
    • 重複的空白字符被壓縮爲一個,並且開始的空白字符將被刪除。
    • 選擇前xxx個最常用的單詞來建立詞表,其餘部分替換爲“UNKNOWNWORD”。
    • 刪除開始和結尾的空白字符。
    • 刪除英文標點和中文標點。
    • 在兩個字符之間插入空白字符。
    • [可選]繁簡轉換:語料庫中可能會有繁體,所以需要統一轉換爲簡體
      方法一:OpenCC
      方案二:hanziconv
    • 分詞:jieba分詞
    • 再次清洗:分詞後可能還會有空白符,再次去除
    • 保存處理後的文本語料庫
  • 模型訓練:使用KenLM來訓練n-gram語言模型[與DeepSpeech2兼容]
    • 進入build/目錄,執行操作:
      bin/lmplz -o 3 --verbose header --text mytext/19-01-au.txt --arpa mylmmodel/test.arpa
    • -o 爲必須的參數,3表示3-gram
    • --verbose header表示向ARPA文件開頭添加詳細的頭文件(可選)
    • --text 訓練的語料庫
    • --arpa 訓練生成的語言模型,在這之後爲了減少空間可以將其變成二進制格式的
    • 19-01-au.txt爲從Full-text corpus data下載的英文訓練樣例
    • 將生成的語言模型變成二進制形式
      爲減少空間,需要將生成的.arpa格式的語言模型變成二進制格式的.bin或.klm格式的:
      bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log3.arpa mylmmodel/log3.bin
      bin/build_binary trie -a 22 -q 8 -b 8 mylmmodel/log3.arpa mylmmodel/log3.klm
      爲了節省磁盤存儲空間,我們將使用參數“-a 22 -q 8 -b 8”將 arpa 文件轉換爲“trie”二進制文件。“-a”表示在“trie”中用於切分的指針的最高位數。“-q -b”是概率和退避的量化參數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章