皆様方にご支援頂いている、GPT-2日本語版作成プロジェクトにおいて、様々な日本語の自然言語処理に使用出来るBPEEncoderが、派生した成果としてリリースされました。
これまでの成果
これまで、日本語版GPT-2は、最も小さな(性能の低い)パラメーター数117Mモデルを作成していました。
117Mモデルは、学習の際の語彙を、バイト単位で行ったv1モデルと、SentencePieceで分かち書きしたワード単位で行ったv2モデルがありました。
v1モデルとv2モデルがあるのは、両者の比較から、語彙数の差によるモデルの性能比較を行いたかったためです。
そして、117Mモデルの、v1とv2の比較から、適切な語彙数を生成するEncoderの重要性が認識されました。
さらに、現在の機械学習モデルでは、バイト単位での学習とワード単位での学習の中間となる、サブワード単位での学習を行うことが一般的です。
そこで、新モデルの学習のために、サブワード単位での学習を行える、日本語版BPEEncoderを作成しました。
なぜ形態素解析では駄目なのか
従来の自然言語処理では、係り受け解析による形態素毎に文章を分割していました。
これが絶対に駄目という訳では無いのですが、係り受け解析は、基本的に、助詞や名詞のデータベースに基づく、人が作成したルールベースの処理によって、文章を解析します。
BERTやGPT-2等の現代的な機械学習モデルで使用しているSelf-Attentionが強力なのは、そうした人が作成したルールに依存せずに、広域的な単語(Encode後の単位での‘単語’)間の関連性を学習出来るためです。
要するに、その係り受けを学習したいのに、肝心の単語の分割が、人が作成したルールベースの処理であっては、人の性能を超えることが出来ない、というのが、形態素解析ではなくもっと細かい単位での学習を行うモチベーションとなります。
日本語版BPEEncoder作成の意義
現在の機械学習モデルでは、バイト単位での学習とワード単位での学習の中間となる、サブワード単位での学習を行うことが一般的ですが、サブワードへの分割アルゴリズムのほとんどは、アルファベット圏の言語を想定して作られており、日本語には対応していません。
例えばBERTでは英語以外のUnicode文字を無理矢理Multilingualモデルに分けており、日本語では本来的には不適切なEncodeがなされてしまいます。
また、日本語の場合、分かち書きとEncodeの両方が必要になる点も、アルファベット圏で作成されたEncoderを流用出来ない理由となっていました。
自然言語文章の分かち書きとEncodeは、機械学習モデルによる自然言語処理の最上流に位置する処理で、この部分の処理は、それ以降の全ての工程に対して、影響を与えます。
そのため、適切なEncoderの作成は、GPT-2に限らず、BERTやLXNet等でも必要となる、自然言語系AIのローカライズに必須の要件でした。
今回の日本語版BPEEncoderのリリースにより、GPT-2に限らず、BERTやLXNet等の日本語版作成でも使用出来る、汎用的な分かち書き/Encodeを行う手法が、一般公開されることになりました。
公開URL
日本語版BPEEncoder↓
https://github.com/tanreinama/Japanese-BPEEncoder
日本語版GPT2作成プロジェクトによって、自然言語系AIのローカライズに必要となる、新しい手法や知見が得られるメリットがあります。それらは、日本のAI技術の進展に必ず寄与するものと考えています。
今後も引き続き、日本語版GPT2作成プロジェクトを進めて参ります。
坂本