前回は、Mosesを使い始めて真っ先に感じた疑問を晴らすために日本語と格闘したお話をしました。今回は、その結果についてのお話です。
確かに変化したけれど
日本語コーパスを形態素解析を用いて分かち書きすると、統計的機械翻訳にとっては細かく分けすぎなんじゃないだろうかという仮説を検証するため、日本語の動詞の活用部分を中心にくっつけたコーパスを使って言語モデルと翻訳モデルを作成し、デコード結果にどのような変化が現れるか、調べてみました。
当然、よくなるはずだと思っていましたが、正直、改善したのかしなかったのか、判断がつきませんでした。でも、結果が変化したことだけは確かです。以下、いくつか例をご紹介します。(ちなみに、「日本語がブランクで区切られたまま」なのは、当時は解決方法を知らなかったからなので、気にしないでください。)
原文 | A vertical bar represents a choice of two or more options within brackets or braces. |
---|---|
人間翻訳(手本) | 縦線は、大カッコまたは中カッコ内の複数の選択項目の区切りに使用します。 |
機械翻訳(基準) | 、 縦 線 は 、 2 つ 以上 の 大 カッコ または 中 カッコ 内 の です 。 |
機械翻訳(仮説) | 縦 線 は 、 2 つ の 選択 以上 の オプション は 、 大 カッコ または 中 カッコ 内 に あります 。 |
原文 | A one-client server can be reused after its (single) client has disconnected. |
---|---|
人間翻訳(手本) | 1クライアントのサーバーは、その(単一の)クライアントの切断後に再利用できます。 |
機械翻訳(基準) | クライアント が サーバー の 後 に 再 利用 でき 、 その 単一 の クライアント が 切断 さ れ た こと を 示し て い ます 。 |
機械翻訳(仮説) | クライアント が サーバー を 再利用 できる 後 、 その 単一 の クライアント が 切断 された こと を 示して います 。 |
原文 | A connection is defined as a connection to a server process or daemon. |
---|---|
人間翻訳(手本) | 接続は、サーバー・プロセスまたはデーモンへの接続として定義されます。 |
機械翻訳(基準) | 接続 へ の 接続 として 定義 さ れ 、 サーバー ・ プロセス または デーモン を 示し て い ます 。 |
機械翻訳(仮説) | 接続 は 、 接続 として 定義 に 、 サーバー ・ プロセス または デーモン 。 |
ご覧の通り、基準となるデコード結果の品質もそれほどよくありませんが、筆者の仮説を検証できるほどのデコード結果も出ていません。どちらも特別いいというわけではないので、判断がつかなかったのです。もちろん、何かの基準に基づいて1センテンスずつきっちり比較していけば全体的な傾向は出せるかもしれませんが、筆者の英語力ではそこまでのことはできませんし、この程度の品質では社内のQA担当者に評価を依頼するわけにもいきません。しかも、こんな感じで1万センテンスもあります。困りました。。
やっぱり数値化かぁ
機械翻訳の結果をどう評価するかという課題は世界共通で、一般的にはBLEUスコアというものが使われています。しかも、実にいいタイミングで同僚のFさんがBLEUスコアを出す方法を調べてくれていました。ただ、まだBLEUスコアの意味を理解していなかったので、出てきた数字の意味がわからなかった上に、想像していたものとちょっと違っていました。
そこで、BLEUスコアについて調べてみましたが、簡単に言うと、お手本の訳文と比較して、どれくらいワードの並びが一致しているかという割合を数値化したもので、最低0から最高1までの数字で表されます。そもそも、お手本の訳文が適切なのかとか、並び順だけで判断していいのかとか、いくつかの問題が指摘されていますが、一般的には人間の評価と相関関係があることが知られています。要するに、BLEUスコアが高ければ、お手本の訳文に近いということであり、人間の評価も高くなる傾向があるということです。
また、BLEUスコア自体は、各センテンスごとに付けられるものではなく、コーパス全体に対して付けられます。なので、特定の文章がいいか悪いかはわからない代わりに、文書全体の評価を数値化して把握することができます。もちろん、BLEUスコアがすべてというわけではありませんが、筆者のような翻訳の門外漢が結果の良し悪しを判断するには、非常に役に立ちます。
実は、今回の仮説を検証するために、筆者なりによいと思った対策を追加しながら、同じコーパスを計3回デコードしたのですが、これらのBLEUスコアを出したところ、想像と違う結果が出ました。(いずれも、デコード対象のセンテンスが翻訳モデルに入っているため、再現性のテストであり、BLEUスコアは高めです。)
1回目 | 0.6633 |
---|---|
2回目 | 0.7107 |
3回目 | 0.7010 |
最も対策が多く施された3回目が最高スコアのつもりでしたが、実際には2回目が最高スコアでした。しかし、複数の対策を一度に盛り込んだため、何がよくて何が悪かったのか、切り分けができない状態でした。また、今回は未確認のものも含め、変更したい条件は他にもいくつかありました。
ちょっとしんどい作業になりますが、素の状態から1つずつ条件を変更して、結果がどのように変化していくかを順番に調べていかないと、どれが効果的なのか判断ができません。何だか、卒論研究をしてるみたいだなぁと思いつつ、検証に没頭する日が続きました。
次回はおかしなセンテンスを取り除くとです。
[注] この回顧録は、かつて勤めていた会社で書いた連載を復元したもので、某I社の現在の状況を反映している訳ではありません。