AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

単純な機械翻訳

かなーりブログ更新してませんでした。
しばらくUnity触ってないので、ちょっと遊びで機械翻訳perlでやってみます。

30年ぐらい前の技術だと、機械翻訳は、単語を置き換えて、品詞を特定し、品詞にそって構文をとり、構文ルールに則って並べ替えを行って機械翻訳をしていた。
人工知能の教科書あたりには、文脈自由文法など品詞分析など、ツリー解析などが載っている。

それだと、ルールの作成に膨大な人出がかかる。それで、その後、統計的にルールを機械が自ら発見し、そのルールにそって翻訳しましょうという方向の技術が発見される。
例えば、グーグルの機械翻訳なんて完全に自動でしょう。
英語と日本語の対訳を膨大にもっておいて、その対訳を利用して、未知の文章を翻訳する。

そのへんを考える前に、まずは大昔の機械翻訳の手法をやってみます。

語彙として、playという単語に、4つの意味を用意します。
遊ぶ 引く 演奏する 試合
です。
はじめの3つは動詞で、最後は名詞です。
playは楽器が目的語だと演奏とか引くになる。一方ゲームだと遊ぶになり、
同時に「試合」とか「遊び」といった名詞に意味にもなります。

http://rafeel.s602.xrea.com/honyaku/?q=I+play+piano.

従って、「I play piano.」を翻訳する上では、playの訳としては単純には4種類の訳がまず考えられます。
(本当はI plat the pianoとtheがいるんでしょうけど、ここでは考えない)
で、どれを採用するかは、コロケーションの問題だったり、構文解釈の問題だったりします。
これは人間が和訳するときも同じです。

単純には次の4例が考えられる。

[3] (私試合ピアノ:n)
[3] (私ピアノ遊ぶ:st)
[3] (私ピアノ演奏する:st)
[3] (私ピアノ引く:st)

一番はじめはplayを名詞とみなした場合で、4つの名詞が並ぶとみなします。
名詞は形容詞にもなるので、名詞+名詞=名詞ともなるので、品詞的には問題ないです。
ただ、代名詞Iの後ろに名詞が並ぶのはあまり見たことが無いですが。

次の2から4は、動詞とみなしますが、これはコロケーションの問題です。
米国人の頭ではplayで統一されるでしょうが、日本語では動詞の意味が分かれている。

昔は、コロケーションは全部辞書をもっておくしかなかったのでしょう。
究極的には文章単位で訳をもっていれば、一瞬で翻訳できてします。

このコロケーションをすべて持っておくにしても、間に副詞やら形容詞やらが挟まるとややこしい。
ネットには膨大な文章があるのだから、同じ文の中に、同時に出現する単語の出現数でも数えておけば、おそらくピアノと引くは相性がよく、ピアノと遊ぶが同時に出てくることはほとんどないはず。
その知識によって、ピアノを引くという文例が選択できるはず。
これって人間も同じような思考過程で訳語を選んでいると思います。

この程度の段階だと、機械翻訳は、複数の選択肢で枝分かれした木の中を探索して、なんらかのコスト関数が最小になる組み合わせを探しだす探索問題になります。
結局、それは、将棋やオセロの局面探索と同じです。

将棋やオセロも昔は人力で局面評価関数を作っていた。膨大な時間がかかる。(けど可愛い)
ある時から、評価関数を機械学習する手法が確立し、コンピューターは勝手に強くなっていく。
機械翻訳でも、ある組み合わせの翻訳例の中から一番まともな訳を、評価関数を利用して見つけ出せばいい。
上記の例は意味が揺れているのがplayだけなのでいいですが、複文になったり、もっと複雑な文章だと、意味が揺れる単語が増えて、全体で組み合わせが膨大に増えていく。
さらに省略や倒置まで起こってくるので複雑さが増しますが、本質的な難しさは、表面的な言葉の並びではなく、目的語が何をしているのかといった意味なんでしょうが、おそらくそこには現実的な対応策は見つかってなさそうです。
将棋やオセロでは、局面の状態だけがすべてなので、そこに暗黙的な状態や常識は考える必要が無い。


子どもは、1歳時は1語文、二歳児は2語文が話せるというのが、認知発達の流れですが、
複雑な複文以前に、まず一語とか二語がちゃんと処理できるAIを作れるのかな?と思います。
二語だと、「ママ まんま」とか、「わんわん ばか」とかのレベルですが、この段階で、すでに主語を切り替えている。
前文は、母に対する食事を要求する命令文です。後者は、犬という存在に対する怒りを表現している。
六ヶ月で人見知りが始まり、六ヶ月不安と言われますが、幼児はすでに母以外の存在に気づいている。