ナード戦隊データマン

機械学習, 自然言語処理, データサイエンスについてのブログ

bicleanerにおけるProbabilistic Dictionaryの正式な生成方法

bicleanerのドキュメントに、確率的辞書の生成方法についての記述が追加されたので紹介します。

事前準備

mosesdecoderとmgizappをインストールします。

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

# install moses
pushd mosesdecoder
make -f contrib/Makefiles/install-dependencies.gmake
compile.sh  --max-kenlm-order=20 --max-factors=1000
popd

# install mgiza
pushd mgiza/mgizapp
cmake . && make && make install
cp scripts/merge_alignment.py bin
popd

生成方法

How to train your Bicleaner · bitextor/bicleaner Wiki · GitHub

上記リンクに説明がありますが、これらを簡易的にスクリプト化します。

#!/bin/bash
 
# Usage: ./preprocess_pdic.sh indir prefix lang1 lang2 outdir
 
ROOT_DIR=/root/work/project
MOSES=/opt/mosesdecoder
MGIZAPP=/opt/mgiza/mgizapp/bin
L1_TOKENIZER=${ROOT_DIR}/dev-tools/flores/scripts/indic_norm_tok.sh
INDIR=$1
PREFIX=$2
LANG1=$3
LANG2=$4
OUTDIR=${ROOT_DIR}/bicleaner/$5
mkdir -p ${OUTDIR}
 
DATA=${PREFIX}.${LANG1}-${LANG2}
 
chmod +x ${L1_TOKENIZER}
 
${L1_TOKENIZER} ${LANG1} ${INDIR}/${DATA}.${LANG1} > $OUTDIR/${DATA}.tok.${LANG1}
${MOSES}/scripts/tokenizer/tokenizer.perl -l en < ${INDIR}/${DATA}.${LANG2} > ${OUTDIR}/${DATA}.tok.${LANG2}
 
tr '[:upper:]' '[:lower:]' < ${OUTDIR}/${DATA}.tok.${LANG1} > ${OUTDIR}/${DATA}.tok.low.${LANG1}
tr '[:upper:]' '[:lower:]' < ${OUTDIR}/${DATA}.tok.${LANG2} > ${OUTDIR}/${DATA}.tok.low.${LANG2}
 
mv ${OUTDIR}/${DATA}.tok.low.${LANG1} ${OUTDIR}/${DATA}.clean.${LANG1}
mv ${OUTDIR}/${DATA}.tok.low.${LANG2} ${OUTDIR}/${DATA}.clean.${LANG2}
 
${MOSES}/scripts/training/train-model.perl --alignment grow-diag-final-and --root-dir ${OUTDIR} --corpus ${OUTDIR}/${DATA}.clean -e ne -f en --mgiza --mgiza-cpus=8 --parallel --first-step 1 --last-step 4 --external-bin-dir ${MGIZAPP}
 
gzip ${OUTDIR}/model/lex.e2f -c > ${OUTDIR}/model/dict-ne.gz
gzip ${OUTDIR}/model/lex.f2e -c > ${OUTDIR}/model/dict-en.gz
 
echo "Done!"

注意: indic_norm_tok.shはネパール語に対するトーカナイザです。この部分は言語に合わせて変更してください。

参考

  1. How to train your Bicleaner · bitextor/bicleaner Wiki · GitHub
  2. mosesdecoder/Dockerfile.ubuntu.fastlightpbmt at master · moses-smt/mosesdecoder · GitHub