基于短语的统计机器翻(PBMT) 开源工具 :Moses
如何運行Moses
?
1. Moses的歷史
Moses是Pharaoh的升級版本,增加了許多功能。它是一個基于短語的統計機器翻譯系統,整個系統用C++語言寫成,從訓練到解碼完全開放源代碼,可以運行在Linux平臺和Windows平臺。它有兩大特點:
1.1 Factored Translation Model
在Factored Translation Model中,一個單詞不僅僅是一個符號(token),而是一個包含多個因子的向量,例如表面詞形、詞干、詞性等。這些因子共同作用來刻畫一個單詞。
1.2 Confusion Network Decoding
當前的機器翻譯系統能夠接受的輸入一般是純文本形式的一串單詞(一句話或者一篇文章),而現在將機器翻譯系統作為一個大的信息處理系統的組成部分的需求日益增長,它的輸入可能不再是純文本的形式,而是其它模塊的輸出結果,例如命名實體(NE)識別的結果,或者語音識別的結果。這樣的輸入不再是單一的,而是可能含有錯誤的、多種可能性的輸入。Confusion Network Decoding允許這種多可能性的輸入,最終選擇最優譯文。
2. Moses基本框架
Moses核心框架仍是Philipp Koehn的基于短語的SMT框架。平臺采用GIZA++進行翻譯模型的訓練,SRILM進行語言模型的訓練,Moses進行生成模型的訓練及解碼,mteval對實驗結果進行BLEU評分。
2.1 總調用部分:moses-cmd/src/Main.cpp
2.2 解碼器初始入口部分
i. 參數設置:
moses/src/Parameter.cpp
ii. 模型數據加載:
moses/src/StaticData.cpp
2.3 句子翻譯處理部分
i. 解碼器算法實現總調度:
Manager.cpp
ii. 翻譯選項處理:
TranslationOptionCollection.cpp
iii. 部分翻譯處理:
Hypothesis.cpp
iv. 包含翻譯假設,實現剪枝:
HypothesisStack.cpp
2.4 結果輸出:moses-cmd/src/Main.cpp
i. 輸出最佳翻譯結果:
moses-cmd/src/IOStream::OutputBestHypo
ii. n-best生成及輸出:
n-best lists generated in Manager.cpp, output in IOStream.cpp
3. Moses測試平臺搭建
3.1 安裝SRILM
參考http://www.leexiang.com/how-to-configure-srilm-on-ubuntu
補充:語言模型訓練工具除了SRILM可選外,還可以使用IRSTLM
3.2 安裝GIZA++
參考http://www.leexiang.com/gizapp-report
3.3 安裝Moses
3.3.1 安裝和編譯
在編輯Moses之前一定要安裝所有的依賴包,否則無法編譯通過,請安裝以下軟件包:
$sudo apt-get install autoconf automake texinfo zlib1g zlib1g-dev zlib-bin zlibc libtool libboost-all-dev libxmlrpc-c3-dev build-essential
推薦通過Subversion下載并管理Moses:
svn co?https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk moses
進入moses,運行./regenerate-makefiles.sh
注:如果gcc 是4.4版本,可能會出現錯誤,需要修改moses/src,moses-cmd/src,misc三個文件夾中的Makefile.am文件,在AM_CPPFLAGS=…..后面加上-std=c++0x,并修改configure文件中3870行,將MY_ARCH=${with_srilm}/sbin/machine-type?改為MY_ARCH=“i686-gcc4“,重新編譯一次。
./configure –with-srilm=MT/srilm (SRILM的絕對路徑)
再運行命令make -j 4
則Moses的解碼器編譯成功。
3.3.2 安裝Moses訓練腳本:
進入moses/scripts目錄,查看Makefile文件。該文件需要指定兩個目錄TARGETDIR和BINDIR。其中,TARGETDIR會存放編譯后的文件,BINDIR需要事先存放3個可執行程序:GIZA++, snt2cooc.out,mkcls(Makefile會調用check-dependencies.pl以檢查是否指定目錄和包含可執行程序)。
我們在scripts目錄下新建兩個目錄:target和bin,將之前編譯好的GIZA++、snt2cooc.out和mkcls拷貝到bin目錄 下,并將Makefile文件的第13-14行修改為:
TARGETDIR=/home/user/MT/moses/scripts/target
BINDIR=/home/user/MT/moses/scripts/bin
在scripts目錄下輸入命令:
make release
注:運行命令后,可能出現錯誤:/bin/sh: ./check-dependencies.pl: not found,此時需要將scripts/Makefile文件中的@./check-dependencies.pl修改為perl check-dependencies.pl,通過moses郵件列表發現的,至于原因我暫時也不知道,如果您明白請告訴我,謝謝
編譯完成后,會在TARGETDIR 目錄下創建一個scripts-timestamp目錄,這個目錄中存放編譯后的腳本。編譯后的文件名寫入released-files。編譯后的腳本路徑:SCRIPTS_ROOTDIR=/home/user/MT/moses/scripts/target/scripts- 20100105-1600
至此,Moses安裝成功。
使用時需要聲明環境:
export SCRIPTS_ROOTDIR=/home/user/MT/moses/scripts/target/scripts-YYYYMMDD-HHMM
3.3.3 安裝Moses附加腳本:
(1) 下載相關腳本
從http://www.statmt.org/wmt07/scripts.tgz下載scripts.tgz并解壓:
tar xzf scripts.tgz
這些腳本包括:
Tokenizer scripts/tokenizer.perl
Lowercaser scripts/lowercase.perl
SGML-Wrapper scripts/wrap-xml.perl
(2) 下載中科院計算所ICTCLAS中文分詞工具
下載地址:http://www.ictclas.org
(3) 準備數據
中英雙語平行語料庫:train.chn和train.eng(測試集);dev.chn和ref0~3(開發集);
要求已完成英文token及英文句首字母大寫轉小寫。
如果沒有進行預處理,可參考下面:
英文切分:scripts/tokenizer.perl -l en < data/english > data/train.seg.eng.upper
中文切分:使用ICTCLAS實現中文語料分詞,獲得切分語料庫train.seg.chn
大小寫轉換:scripts/lowercase.perl < data/ train.seg.eng.upper > data/train.seg.eng
過濾長句:bin/moses-scripts/scripts-YYYYMMDD-HHMM/training/clean-corpus- n.perl data/train.seg chn eng data/train 1 100
4. 構建語言模型
此處訓練一個5元的語言模型,用kndiscount平滑方法,命令如下:
./ngram-count -text train.chn -lm train.chn.gz -order 5 -unk -interpolate -kndiscount -tolower
參數說明:
-text:要訓練的文本,一行一句
-lm:輸出文件名
-order n:語言模型的元數
-unk:未登錄詞,默認是移除未登錄詞
-kndiscount:平滑
-interpolate:插值
至此,語言模型訓練完成。
5. 訓練模型
運行:/home/user/MT/moses/scripts/target/scripts-20100105-1600/training/train-model.perl (舊版是train-factored-phrase-model.perl)
-scripts-root-dir /home/user/moses/scripts/target/scripts-20100105-1600
-root-dir /home/user/MT/moses/data/
-corpus /home/user/MT/moses/data/train -e eng -f chn
-max-phrase-length 10
-alignment-factors grow-diag-final-and
-reordering msd-bidirectional-fe
-lm 0:5:/home/user/moses/data/train.chn.gz
程序會在/home/user/MT/moses/data下建立corpus、giza.eng-chn、giza.chn-eng和model四個目錄。
在model目錄里,存放著最終結果:配置文件moses.ini、短語表phrase-table.0-0.gz和重排序表reordering- table.msd-fe.0.5.0-0.gz。
這一步耗時較長,慢慢等待,期間可以上個廁所……..
至此,短語抽取完成。
6. 最小錯誤率訓練
執行最小錯誤率訓練時,必須要采用Moses規定的文件格式。輸入文件是純文本文件,一行一句,沒有任何標記。參考譯文文件也是相同格式。
需要注意的是,Moses規定每個參考譯文單獨存放在一個文件中。
這里我們使用的參考譯文有四個,即ref0~3,運行以下命令:
/home/user/MT/moses/scripts/target/scripts-20100105-1600/training/mert-moses-new.pl \
/home/user/MT/moses/data/dev.eng \
/home/user/MT/moses/data/ref \
/home/user/MT/moses/moses-cmd/src/moses \
/home/user/MT/moses/data/model/moses.ini \
-working-dir /home/MT/moses/data/mert \
-root-dir /home/user/MT/moses/scripts/target/scripts-20100105-1600 \
-nbest 200 \
訓練完成,生成一系列文件。
tail -n 1 run*.cmert.log查看所有迭代的BLEU結果,選擇最好的runXX.moses.ini
用生成的最好的配置文件覆蓋moses.ini,輸入
cp runXX.moses.ini moses.ini
最終生成moses.ini文件,至此,最小錯誤率訓練完成。
7. 解碼
echo "I have a book ." | moses –config moses-tuned.ini
輸出結果含有如下一行:
BEST TRANSLATION: 我 有 一本 書?
說明翻譯成功。
總結
以上是生活随笔為你收集整理的基于短语的统计机器翻(PBMT) 开源工具 :Moses的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Beam Search
- 下一篇: pytorch记录:seq2seq例子看