BERT 自然言語解析手法の変遷について

こんにちは、内製開発グループの藤田です。

今回は機械学習を用いた自然言語処理の歴史と、実際に学習を実施する場合の概要について、近年注文されている解析手法の一つBERTを軸に簡単に紹介したいとおもいます。
また、機械学習を用い近年目覚ましい発展を遂げた画像解析分野の類似点も併せてご紹介したいおもいます。

BERTとは

BERTとはBidirectional Encoder Representations from Transformersの略で、2018年にGoogleから発表された自然言語処理モデルです。
自然言語処理分野において、ここ数年で数々の革新的な学習モデルが発表され世間を賑わせてきました。
しかしながら、まだ人間の認知能力におよばなかったところ、BERTの登場により、人間の認知を超えることが期待されている学習モデルです。

 

自然言語処理の歴史

初めに、BERTに至るまでの自然言語処理でどのような試みがされていたかについて簡単に紹介したいとおもいます。

古典的な手法

初期は構文、文法等ルールベースによる意味解析のアプローチがとられました。
この手法は専門家であらずとも最初に思いつきそうな手法ですが、要は、文法に照らし合わせれば、おのずと文章の内容が解析できるというものです。
しかしながら、実際の文章の記述は多彩なため、文法に則ってルールを作成した場合、膨大な量のルールが必要となり、現実的な手法ではありませんでした。
ルールベースでの認知方法は自然言語に限らず、画像解析の分野でも同様の状況であり、人間の認知精度には遠く及ばないものでした。

機械学習を用いた解析手法の登場

2010年台前半、画像解析分野ではCNN(Convolutional Neural Network)の提唱によりいち早く、人間の認知能力に迫ることとなり、近年の深層学習ブームに火をつけました。
一方、自然言語解析分野では、革新的な手法の提唱はなく、自然言語分野での機械学習によるブレークスルーは難しいのではと一般的には思われていました。
そこに、自然言語分野でのブレークスルーとなるWordToVecが提唱され、自然言語の分野においても、人間の認知に迫る希望が見えてきました。
さらにその後、DocToVec、FastText、ELMO等のモデルが提唱され、それぞれ、いままでの手法と比べると革新的な手法であり、発表当時は話題となりましたが、人間の認知能力には今一歩及びませんでした。

BERTの登場

自然言語分野において決定打となる手法がない中で、2018年、学習元のデータの加工方法、学習方法を工夫することにより人間の認知能力に迫る手法が考案されました、これがBERTという手法になります。
この手法を使用することにより、従来手法よりも高精度な認知が可能となりました。
現在に至るまで、BERTから派生した様々な学習モデルが提唱されています。


自然言語の学習手法

ここでは、自然言語特有の学習手法について記載したいとおもいます。

自然言語における学習情報の生成方法

機械学習において、言語、画像などどのような種類の情報でも最終的に学習させるためには、多次元のベクトルの表現に落とし込む必要があります。
例えば白黒の静止画像の場合は、単純に各ドット数の積を次元、明度を各次元の値として行列が作れることは、容易に想像できます。
例えば、8×8ドットの場合64次元ベクトルで表現可能です(各要素には明度値が設定)

一方、文字列の場合は、一見そのままベクトルに落とし込めそうもなく、どのように特徴を抽出し行列に落とし込めるかがカギとなります。
そこで考え出されたのが、周囲の文字がどのような文字で構成されているかで、対象の文字の特徴を表そうという手法です。
例えば「スプーンでカレーを食べる」という文がある場合、「カレー」「スプーン」「食べる」という文字がそれぞれ関連して頻繁に出てくる可能性が高いです
(「箸でカレーを飲む」のような文章は考えられないため)、このように周囲に出現する単語により文字の特徴を表現する手法がとられています。

BERTによる学習手法の特徴

自然言語解析に限らず、機械学習の学習の場合、学習対象の情報とラベル情報(教師情報)を大量に用意し、それを学習させる手法がとられます。
BERTではこの学習対象情報に対し、マスキングを行いマスキング箇所の単語を正解情報とすることで、学習させ、転移学習(※)情報を生成します。

※ 転移学習
近年の機械学習では画像解析等でも一般的に採用されている手法です。
考え方としては、全体の文章には特徴はあるが、文章の個々の記述どの文章も似ていることから、一般的な文章を事前に学習させることで、ラベルずけされた学習情報を少量で済ますことが可能となりました。
この手法により、機械学習をするにあたり一番のネックとなっていた、手作業での学習対象情報に対するラベルづけの作業が大幅に軽減されるというメリットがあります。

具体的な学習手順

ここでは、自然言語の機械学習を実施するにあたり、文章分類を例にとり、具体的にどのように学習させるかについての概要を紹介しようとおもいます。
現在、さまざまな開発環境、ライブラリが出回っており、Web画面から直接学習させるようなサービスもあるかとおもいますが、個人でローカルPCを使用し試しに動かす場合を想定して記載します。

1.学習環境の準備

学習モデルを使用できるライブラリを用意します(有名どころだとPytorch、Keras等)
また、個人のPCで実施の場合、学習処理が重く学習に数日かかる場合もあるため、GPU搭載マシンのほうが良いかとおもいます
(NVIDIA製GPUで仮想環境管理ツール(Anaconda)から各ライブラリをインストールし使用するパターンが一般的とおもいます)

2.学習文章の収集

分類したい文章情報を用意します
ニュース記事の文章分類であれば、ニュースが書かれている文章を数百枚~数千枚程度用意します

3.学習用文章の整理

文章の中にある学習情報に関係ない情報(日付、特殊記号とか)を除去し
学習元情報の不要な情報の偏りを除去します

4.分かち書き実施

対象となる単語の前後の単語の出現する文言により特徴を見分けています
英語の場合は、それぞれの単語ごとに空白ががあるため、容易に分割できるのですが
日本語の場合、各文字が連結されているため、形態素解析ツール(meCab等)を使用し、単語ごとに分割(分かち書き)します

5.学習文章へのラベルづけ

分類対象となる文章を準備しラベル付けを実施します
ニュース記事の文章分類であれば、分類する文章にそれぞれ「芸能」「事件」「エンタメ」等のラベルづけをします

6.転移学習用情報を準備(実施する学習モデルによっては無い場合もあり)

転移学習用の情報作成で使用するための文章を用意し学習させ、事前に転移学習情報を作成します
学習に使用する文章は一般的な文章であればよく、文章にラベル付けは不要です
個人で試すレベルの場合はWikipedia等から持ってくるパターンが多いとおもいます
その他、各団体、有志の方が転移学習用情報として事前に作成しているものを使用する方法もあります

7.学習を実施

学習情報を元にパラメタ(次元数、バッチサイズ、学習回数)を調整しつつ学習を実施し、収束状況と精度からベストな学習情報を作成します
下記に、学習を実施するにあたり、ポイントとなるキーワードについて下記に記載しました

次元数について

機械学習一般で使用される概念で、自然言語学習の場合、文章の特徴を表現する要素数です。

次元数を増やすと理屈では認識精度は上がるように思えますが、重要でない情報を特徴量としてしまうため、適切な値に調整が必要です。


バッチサイズについて

一度にどれだけ学習させるかのサイズです、大きいほうが学習時間が早く、偏りがなく学習できます。
但し、個人PCなど非力なマシンの場合サイズが大きいとメモリが足りなくなり落ちる恐れがあるため、適宜調整が必要になります。


学習回数について

認識精度を上げるため、前回の学習結果をもとにパラメタを変更し再度学習を行うのですが、その際、何回学習を実施するかの回数です
一般的なライブラリであれば、ある一定数の学習回数が来たら打ち切り、一定程度認識精度が上がったら(収束したら)学習を打ち切り等設定できます。
学習回数を多くすることで、認識精度が高くなることが期待できますが、その分、いつまでも、認識精度が上がらす(収束せず)学習が終わらない問題もあるため、適宜調整が必要になります。

8.学習済み情報で認識を実施

上記の学習済み情報を使用して実際の文字列に対し認識を実施します。
現在、世の中で使用されている翻訳、文章分類等のサービスは、上記の1.から5.までの過程で作成された、学習済み情報を元に処理が行われています。

さいごに

自然言語処理についてBERTの紹介と、BERT登場に至るまでの自然言語処理分野の変遷、実際の学習の手順を紹介させていただきました。
最近は、ハードウエア、ツール、学習データ等が充実しており、だれでも簡単に最新の学習モデルを使用し機械学習を体験することができますので、ぜひ皆さんもチャレンジしてはいかがでしょうか。