統計的機械翻訳ツールキットcicada

機械的にことばの意味を汲み取って別の言語で表現する機械翻訳は、人工知能自然言語処理が目指す究極の目標の一つとされて、古くから研究されてきました。近年では、大量の対訳データに基づいて統計的な言語モデル機械学習アルゴリズムを利用する統計的機械翻訳が主流です。単語や句の単位で二カ国語を対応させる比較的表層的で頑健な方法から、文の構文的な関係が表現された構文解析木や、複数の構文解析木をコンパクトに表現した構文解析森の状態から変換規則を求めるような、文法を利用した高度な方法まで様々提案されています。統計的機械翻訳の手法は、たとえ同じ言語であっても、たとえば話し言葉から書き言葉に変換するといった言い換えの用途にも利用できます。

統計的機械翻訳システムのオープンソースとしてはMosesが有名ですが、cicadaは最新の研究成果が様々盛り込まれていながら、とてもまとまりがあって使い勝手の良い実装です。付属ドキュメントも充実していて、作者のホームページに載っている統計的機械翻訳のチュートリアル資料も大変参考になります。

cicadaはMacPortsからインストールすることができます。ソースコードからビルドすると相当待たされますが、現時点でBiuldbotが用意されているMountain LionまでのOSであれば、バイナリを取ってくるのでインストール時間はかなり短縮できます。近日中にMavericks用のBuildbotも動き出すようなので期待しましょう。

$ sudo port selfupdate
$ sudo port install cicada
$ /opt/local/share/examples/cicada/scfg/sample.sh

最後のコマンドは動作確認用で、あらかじめ用意されているモデルを使って中国語から英語に翻訳するサンプルのテストを実行しています。

京都フリー翻訳タスク (KFTT)には、日英翻訳のデータとMosesをベースとしたシステムが公開されていますが、cicadaの配布物の中にそのデータの一部がサンプルとして同梱されていて、モデルの学習から翻訳の実行と評価まで実際に試すことができます。サンプルのディレクトリをコピーして作業をしてみましょう:

$ mkdir samples
$ cd samples
$ cp -R /opt/local/share/examples/cicada/kftt.30k .
$ cd kftt.30k

実行する手順は /opt/local/share/doc/cicada/training.rst に書いてありますが、コマンドを実行するスクリプトがサンプルディレクトリにちゃんと置かれていて、そのまま使うことができます。ただし、重い処理になるので、搭載メモリの少ない非力なマシンでは辛くなるので実行しない方が良いでしょう…。

まず、(1) 単語を対応付けて、(2) 翻訳の文法モデルを作り、(3) 文字列ベースの言語モデルを求めます。そして、(4) モデルを組み合わせて良い結果を出すためにパラメータのチューニングを行います。あとは、(5) 翻訳を実行して、(6) 一般的な評価尺度のBLEUスコアで翻訳結果を評価します:

$ cd alignment && ./alignment.sh ...(1)
$ cd ../scfg/model && ./extract.sh && ./index.sh ...(2)
$ cd ../../ngram && ./expgram.sh ...(3)
$ cd ../scfg/tune && ./config.sh && cd ../../data && ./preprocess.sh && cd ../scfg/tune && tune.sh ...(4)
$ cd ../test && ./test.sh ...(5) (6)

構文解析を利用したモデルを学習する手順は /opt/local/share/doc/cicada/training-stsg.rst に書かれています。日本語に対してはCaboCha (cabocha) とMeCab (mecab-utf8)、英語にはStanford Parser (stanford-parser) を利用します。実行する前にMacPortsでこれらの解析器をインストールしておきます:

$ sudo port install cabocha stanford-parser

なお、MacPortsには、バージョンはやや古いですがMoses (mosesdecoder) や、GIZA++ (giza-pp)、IRSTLM (irstlm)、lader (lader)、MGIZA++ (mgizapp)、pialign (pialign) などの統計的機械学習に関連するportが登録されています。