前回は、Mosesを使い始めて真っ先に感じた疑問のお話をしました。今回は、その疑問を晴らすために日本語と格闘したお話です。
コンパイルからやり直し
日本語コーパスの分かち書きの結果をよく見ると、「ん?」というものにいくつも遭遇しました。一例を挙げると、こんな感じです。
例1 | カタカナ用語がおかしなところで分離される。 | インストール | イン ストール |
---|---|---|---|
ワークスペース | ワークス ペース | ||
チャンク | チャン ク | ||
例2 | 2文字のアルファベットを中心にバラバラになってしまう。 | pc | p c |
cd-rom | c d - rom | ||
例3 | 数字がバラバラになってしまう。 | 130トラック | 1 3 0 トラック |
いずれのケースも、日本語として一塊のままでいいものが誤って分割されていて、英語のワード数に比べて、日本語のワード数が無駄に多くなってしまっています。欧米言語間で統計的機械翻訳が比較的うまくいっているのは、語順が近いということもありますが、互いの単語が1対1の関係に近いからではないかとも考えていたので、英語と日本語の単語もそのような状態にしたいと思いました。また、バラバラになった日本語の単語が、元の並び順とは異なる並び順で使われる可能性もゼロではないので、必要以上に分割するのはよくないのではないかとも考えました。
日本語の分かち書きにはMecabというツールを使っていますが、どこを調べても同じ現象が載っていません。Mecabの設定方法を調べて、その通りに変更しても、どうしても意図したとおりに動いてくれないのです。いきなり袋小路か。。と思った矢先、あることに気付きました。みなさんとインストール方法が違うんじゃないかと。
第5回でも触れたように、某I社では奈良先端科学技術大学院大学のThe Ubuntu NLP Repositoryというところから、必要なツールのソース・ファイルを入手していましたが、他の方はMecabの開発元から入手しているようでした。苦労してセットアップしたMecabをアンインストールし、開発元から入手したソース・ファイルを使ってコンパイルからやり直す必要がありますが、あれほど面食らったコンパイル作業も、この頃にはすっかり慣れたものです。
Mecabをインストールしなおすことで、アルファベットと数字がバラバラになる現象は解消されました。カタカナ用語の分離についても、ユーザー辞書を作成することで解消できることがわかりました。一部、バラバラのままの単語もありましたが、概ね、まともだと思えるような分かち書きに近付きました。
懐かしのサ行変格活用
次に注目したのが、動詞の活用部分がやたらと細かく分割されてしまうことです。例えば、「update」に対する訳語が「更新します」の場合、
- update = 更新 し ます
のように、英語だと1ワードなのに、日本語だと3ワードになってしまいます。これを、
- update = 更新します
にしてしまえば、1対1の関係にできます。
英語にも分かち書きの処理はありますが、単語と単語の間が既に区切られているため、分かち書きによる差というものはほとんど存在しません。
これに対して日本語は、分かち書きの処理方法によって単語の範囲や種類が変わってしまいます。形態素解析を用いる限り、極端に大きく差が出るということはないですが、それでも、使う辞書だったり、辞書にない言葉(未知語)の処理方法の設定次第で、分かち書きの結果は異なったものになります。ましてや、筆者のアイディアのように、日本語の動詞の活用部分をくっつけてしまうと、通常の分かち書きの結果とは全く異なったものになってしまいます。
統計的機械翻訳の仕組みから考えても、日本語にデコード(翻訳)する場合は、分かち書きによって分割された単語を組み合わせることで訳文の日本語が作られるので、どう分かち書きするのかが、日本語にとってかなりの影響を与えるはずです。もちろん、この時点では単なる推測に過ぎませんから、筆者のアイディアが、本当に良い影響を与えるのかどうかは、実験してみないとわかりません。
早速、自分の仮説を検証するために、日本語の動詞の活用の洗い出しから始めました。頭の奥深く、どこにしまったかも忘れてしまったような、「サ行変格活用」とか「未然形、連用形、終止形、連体形、仮定形、命令形」の勉強からやり直しです。まさか、この歳になって「し、し、する、する、すれ、せよ」とか勉強することになるとは、思ってもみなかった予想外の展開。数日をかけて、動詞の500パターンあまりを洗い出し、いくつかの助詞と助動詞も加えて、動詞の活用部分を中心にくっつけてしまう置換パターンを作りました。
さらに、同僚のFさんも巻き込み、用意した置換パターンの一覧に基づき、一括置換処理をするツールを作ってもらい、自分の仮説を検証するための準備が整いました。
ちょっと余談ですが、英語から日本語に翻訳する場合は、従来の機械翻訳だと原文である英語の解析ばかりやっていました。主に、どんな英文が機械翻訳に適しているかという視点です。それが、統計的機械翻訳だと訳文である日本語の解析をしてるから、何だか不思議です。対極をなしてて面白いなぁと思いながら、ひたすら苦行のような洗い出しをしてました。
話を戻しますが、仮説の検証のために1万センテンスをデコードし、期待に胸膨らませてデコード結果を見てみましたが、そこには予想外の結果が待ち構えていました。
次回はBLEUスコア導入です。
[注] この回顧録は、かつて勤めていた会社で書いた連載を復元したもので、某I社の現在の状況を反映している訳ではありません。