機械翻訳の精度をあげるには?
機械翻訳は関数の学習
機械翻訳の研究は1970年代から行われてきました。ニューラルネットワークの登場によって爆発的に進化し、現在はプロの翻訳家に遜色ないレベルの翻訳が可能になっています。
コンピュータが扱えるのは数値だけですから、機械翻訳においては言葉を「符号化」します。まず、エンコーダで原文を数値列xに符号化します。英語の場合は単語を数値に置き換えて、単語の並びとしての文が数値列に符号化されます。例えば、“I am John.”→ x=(145,23,1938)となります。次に、言語モデルによって数値列xを数値列yに変換します。最後に、yをエンコーダで復号して、翻訳文「私はジョンです」を生成するのです。言語モデルは、xをyに変換する関数y=f(x)です。深層学習は、訓練データを説明する汎用的な関数を学習しているのです。
未知語の問題
すべての言葉を学習すれば完璧な翻訳が可能かというと、そうはいきません。過学習という問題があり、学習する語彙(ごい)数を大きくすると、学習時間が急増するほか、翻訳精度が低下してしまうのです。そのため、英語の語彙数は100万語以上あるのに対して、深層学習の語彙数は数十万語で固定されています。100万語以上学習させるとしても、毎年増えていく固有名詞や新語をすべて学習することはできず、未知語を完全になくすことは不可能です。
subword分解
そこで、subword分解という手法が提案されました。従来は文を単語に分解していましたが、より適切な長さに分解する手法です。英語の場合であれば、動詞の活用形を個別の単語とするのではなく、語幹と活用語尾に分解するイメージです。適切な分解の仕方は言語によって異なりますので、表現の出現頻度などを鑑みながら、分解の仕方を決めていきます。これはデータの偏りに基づいたデータ圧縮に相当します。複数の言語についてsubword分解による機械翻訳を行ったところ、通常の方法よりも精度が高いことが確認されました。
※夢ナビ講義は各講師の見解にもとづく講義内容としてご理解ください。
※夢ナビ講義の内容に関するお問い合わせには対応しておりません。