Calm Hill My Random Thoughts

Building Moses on Mac OS X

Moses ကို လုပ်စရာရှိလို့ Download လုပ်ပြီးစမ်းကြည့်တယ် Build လုပ်ပြီးသား Release တွေက တခုမှသုံးလို့မရဘူး Build လုပ်ထားတဲ့လူက ဘယ်လိုများ လုပ်ထားတယ်မသိ Library တွေကို Fixed Path တွေနဲ့ Loading လုပ်ထားတော့ သူ့စက်ထဲကအတိုင်း Directory Structure တွေလိုက်ပြောင်းပြီး ပျောက်နေတဲ့ Library တွေကို သွားထည့်ရမှ အလုပ်လုပ်မလို ဖြစ်နေတော့ ကိုယ်တိုင်ပဲ Source ကနေပြန်ပြီးတော့ Build လုပ်ရမယ့်ကိန်း ဆိုက်လာတယ်။ Build လုပ်ပြန်တော့လည်း Document ကို အသေအချာဖတ်ပြီး Build လုပ်တာ Error မတက်ပေမယ့် Run တဲ့အချိန်ကျမှ Library တွေကို Loading လုပ်လို့မရဘူး ပျောက်နေတယ်ဆိုပြီး ပြဿနာတွေ တက်လာတယ်။ Mac ပေါ်မှာပဲ လုပ်လို့ မရတာလားဆိုပြီး Linux ပေါ်ပြောင်းပြီး စမ်းတော့လည်း Error ကအတူတူပဲဆိုတော့ ပြဿနာကို မြေလှန်ရှာရတော့တယ်။

တကယ်တမ်း ပြဿနာက Moses မှာမဟုတ်ပဲ သူသုံးထားတဲ့ Boost Library တွေမှာဖြစ်နေတယ် Boost Version 1.5 အောက်ဆိုရင် အလုပ်မလုပ်တဲ့အတွက် Moses က သူအနိမ့်ဆုံးလိုအပ်တဲ့ Boost Library ကို ကိုယ်တိုင် Build လုပ်ပြီးယူသုံးတယ် ဒါပေမယ့် Link လုပ်တဲ့အခါကျတော့ Dynamic နဲ့ လုပ်ထားတော့ သုံးတဲ့အချိန်ကျ အဲဒီ Library ကို System Directory တွေထဲလိုက်ရှာလို့မတွေ့တော့ Error တွေက Run တဲ့အခါမှ Library ပျောက်တယ်လုပ်နေတာ ကိုယ်ကလည်း Build လုပ်ထားတဲ့ Library ကို System ထဲကို Install မလုပ်ချင်တော့ Static Link လုပ်ဖို့လိုတော့ Makefile တွေမှာ နည်းနည်းရှာပြီး ပြင်လိုက်ရတယ်။ နောက်ထပ် ပြဿနာတခုက Moses ကို Build လုပ်တဲ့အခါ Mac OS X မှာက clang ဖြစ်နေရင် ပြဿနာနည်းနည်းရှိလို့ clang flag ကိုထည့်မပေးရင် Error တက်တဲ့အတွက် Default ပါလာတဲ့ Makefile တွေမှာ လိုအပ်တာလေးတွေ နည်းနည်းလောက် လိုက်ပြင်ပေးဖို့လိုမယ်။

Clone the Moses Repository

cd ~
git clone https://github.com/moses-smt/mosesdecoder.git

ပြီးရင်တော့ contrib/Makefiles/install-dependencies.gmake ကို နည်းနည်းပြင်ရမယ် လက်ရှိမှာ boost ရဲ့ Version က 1.60 ဖြစ်နေတယ် ဒါပေမယ့် သုံးထားတာက 1.59 ဖြစ်နေတယ် 1.60 သုံးမယ်ဆိုရင် 1.59 တွေမှာ လိုက်ပြင်ရလိမ့်မယ် မပြင်လည်း ဘာမှမဖြစ်ပါဘူး အရေးကြီးတာက boost ကို build လုပ်တဲ့ line ကို လိုက်ရှာပါ အဆုံးနားမှာ ရှိပါလိမ့်မယ် အဲဒီမှာတော့ “link=static” ထည့်ပေးရလိမ့်မယ် ပြင်ထားပြီးသား နမူနာကိုကြည့်ပါ။

Update “contrib/Makefiles/install-dependencies.gmake”

boost: URL=http://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download

cd '${TMP}/boost_1_60_0' && ./bootstrap.sh && ./b2 --prefix=${PREFIX} -j$(shell getconf _NPROCESSORS_ONLN) link=static install

ပြင်လို့ပြီးပြီဆိုရင်တော့ Dependencies တွေကို အရင်ဆုံး Build လုပ်ရလိမ့်မယ်

make -f contrib/Makefiles/install-dependencies.gmake

Dependencies တွေကို Build လုပ်ပြီးသွားပြီဆိုရင်တော့ bjam နဲ့ Moses ကို Build လုပ်လို့ရပါလိမ့်မယ် clang သုံးထားလို့ “toolset=clang” ကိုထည့်ထားတယ် gcc ပဲသုံးတယ်ဆိုရင်တော့ ထည့်ဖို့မလိုပါဘူး။

./bjam --with-boost=$(pwd)/opt --with-cmph=$(pwd)/opt --with-xmlrpc-c=$(pwd)/opt --with-irstlm=$(pwd)/opt/irstlm-5.80.08 --with-mm --with-probing-pt -j$(getconf _NPROCESSORS_ONLN) toolset=clang -q -d2

Build လုပ်ပြီးသွားရင်တော့ Moses အလုပ်လုပ်မလုပ် sample models နဲ့ အောက်မှပြထားသလို စမ်းကြည့်ရလိမ့်မယ်။

cd ~/mosesdecoder
wget http://www.statmt.org/moses/download/sample-models.tgz
tar xzf sample-models.tgz
cd sample-models
~/mosesdecoder/bin/moses -f phrase-model/moses.ini < phrase-model/in > out

sample-models ထဲက phrase-model/in ဆိုတဲ့ file ထဲမှာ ဂျာမန်လို “das ist ein kleines haus” လို့ရေးထားတာ ၂ ကြောင်းပါတယ် Moses ကို build လုပ်ထားတာ မှန်တယ်ဆိုရင် output အနေနဲ့သွားရေးထားတဲ့ out ဆိုတဲ့ file ထဲမှာ “this is a small house” ဆိုပြီး အင်္ဂလိပ်လို output ၂ ကြောင်း ထွက်လာတာ တွေ့တယ်ဆိုရင်မှန်ပါတယ် အဲဒါဆိုရင်တော့ အခြေခံအားဖြင့်တော့ Moses နဲ့စပြီးတော့ အလုပ်လုပ်လို့ရပါပြီ Tools တွေအနေနဲ့ ထပ်လိုတာရှိရင် bjam နဲ့ထပ်ပြီးတော့ build ပြန်လုပ်ပေါ့။