言葉がわからなくても翻訳はできる?(統計的機械翻訳)

2019年9月5日

統計的機械翻訳について調べていたのだが、(高校から大学初年程度ではあるものの)数式の集まり1で、その上、数式の意味がわかっても、私にはそこからどうしても翻訳への具体的なイメージがわかなかったため、間違っているかもしれないが他の方法でまとめてみる。

人間が良い英日翻訳者になるためには、英語(必要に応じて日本語も)の勉強をして正しく訳せるだけではなく、たくさんの日本語の本を読むなどして日本語での表現能力も高める必要がある。英文を読んで、そこに何が書いてあるかを理解し、適切な日本語に変換するのが英日翻訳者の仕事だ。

最初の機械翻訳もおそらく同じような考え方で行われてきた。英文を読み、そこに何が書いてあるかを構造的に理解して、適切な日本語に変換するという流れである。

一方で、統計的機械翻訳では、英文を読むにしても、そこに何が書いてあるかはわからない状態で処理を行う。

それではどうやって翻訳を行うか。既に翻訳されている原文と訳文が対応したデータを活用する。翻訳者なら翻訳メモリ−と言った方がわかりやすいだろうか(そこで、以降翻訳メモリーと呼ぶことにする)。とにかく、大量の翻訳メモリーを用意する。

コンピュータ側のプログラムでそれら翻訳メモリーを解析して次の2つのモデルを作る。

一つは言語モデルで、これは、日本語として適切な並び順かどうかを判断するためのものである。ある要素(例えば、「私」)の次にどういった要素が来るのか(普通は何らかの助詞だろうけど)を翻訳メモリーを解析して確率的に予想できるようにするために作るものである。

ポイントはコンピュータ上のプログラムは文法を知らないということだ。なぜなら翻訳メモリ−を解析して、文を構成する要素がどのようにつながっているかを調べるだけだからである。文法上はこうだという判断は行わず、あくまでも翻訳メモリー上でたくさん出現するものが正しいものという判断を行う。

言語モデルを構築できれば、文法がわからなくても、文を構成する要素の並びを適切に行えるようになる。

例えば、

移動 思います は 。 バス の 、 と 社員旅行 が よい

を言語モデルにインプットすると、

社員旅行 の 移動 は 、 バス が よい と 思います 。

と出力される。

もう一つは翻訳モデルで、英文と訳文の対応関係を分析する。

例えば、「I bought a book yeseterday」とその訳文である「私は昨日本を買った」を次のように分解する。

NULL I bought a book yeseterday

e0:NULL
e1:I
e2:bought
e3:a
e4:book
e5:yeseterday

私は昨日本を買った

j1:私
j2:は
j3:昨日
j4:本
j5:を
j6:買った

そして要素間の対応関係を記述する。

j1 ⇔ e1
j2 ⇔ e0
j3 ⇔ e5
j4 ⇔ e4
j5 ⇔ e2
j6 ⇔ e2

「NULL」は、英文と訳文の文の長さを合わせるために入れられる仮想的な語でこの場合「NULL」は「は」に対応する。

翻訳メモリ−を元にこういった対応関係を記述していくことで、特定の英単語に対する訳語が何かを確率的に類推できる。ある単語を翻訳モデルに入れると、どの訳が何%使われているかがわかるというイメージだ。

ここで示したのはもっとも単純な仕組みであり、実際は、はるかに複雑だろう。しかしながら、大事な事は、ある英文を構成する要素それぞれに対して、どういった訳語がこれまでに使われてきたかを、大量の翻訳メモリーの情報を元に類推していき(翻訳モデル)、そうやって選んだ要素を適切な訳文になるように並び替える(言語モデル)ことで翻訳を行うという点である。

訳文という言葉を使っているので翻訳のように見えるけど、ある文字から答えとなる文字を類推する処理と考えれば、翻訳というよりは統計を使った暗号の解読のような感じである。

統計的機械翻訳のプログラムにとって手がかりは翻訳メモリーのみなので、その翻訳メモリーが誤訳だらけならば、できあがった訳文も誤訳だらけになるし、翻訳メモリーの量が少なければ、当然品質も悪くなる。

しかしこういった翻訳が、従来の構文木に頼る翻訳を圧倒する程品質が良かったというのがポイントである。

今風に言えばビッグデータの活用が翻訳の方法を大きく変えたということか。

次は最新の機械翻訳の手法であるニューラルネットワークによる機械翻訳について考えてみる。

参考資料:黒橋 禎夫・柴田 知秀 共著(2016)『自然言語処理概論』サイエンス社

脚注

  1. 統計的機械翻訳では原文fに対する様々な訳文eの中から、feに翻訳される確率P(e|f)が最大となるêをその翻訳と考える。これは次の式で表現される。

    $$\widehat{e}=\arg \max _{e} P(e | f)=\arg \max _{e} \frac{P(f | e) P(e)}{P(f)}=\arg \max _{e} P(f | e) P(e)$$

翻訳

Posted by 管理者