今やChat GPTについて知らない人はいないんじゃないか?って思えるぐらい有名になりました。しかし、何でこんな物が突然現れたのか不思議に思う方も多いのではないでしょうか?そこで、Chat GPTが登場するまでの様々な技術について、数式は使わずに平易に解説していくシリーズとして「Chat GPT はどうやって生まれてきたのか?」を連載しています。今回はその9回目となります。今回は、GPT と BERT について説明していきます。
これまでの連載で、Chat GPT の GPT は Generative Pre-trained Transformer の略であることと、Transformer は自然言語処理で利用されるモデルであることを、お伝えしてきました。今回のお題は GPT と BERT ということで、とうとう最終局面に突入となります。但し、今回扱う GPT は 初代GPT であるのに対して、 Chat GPT は、GPT-3.5 がベースなので、最終回は次回以降になる予定です。
今回は、GPT と BERT を通して「事前学習」と「ファインチューニング」について説明していきます。
1. 事前学習とファインチューニング
2018年に OpenAI から以下の論文で発表され、「事前学習」と「ファインチューニング」が提唱されました。
これにより、自然言語処理の様々なタスクをまとめて解決することができるようになりました。以下では、自然言語処理のタスクについてから始まり、順に説明していきます。
1.1 自然言語処理のタスク
この連載では、これまで自然言語処理に関して機械翻訳のみを取り扱ってきましたが、自然言語処理にはそれ以外にも多くの種類のタスクが存在しています。大きく分類しただけでも、NLI(自然言語推論)、質問応答、テキストの意味的類似度、テキスト分類、テキスト要約、NER(固有表現抽出)などがあります。
NLI(自然言語推論): Natural Language Inferenceの略であり、2つの文の間の論理的な関係を推論します。2つの文の内容に矛盾があるのか、一方が他方を含意するのかなどを判定します。
NER(固有表現抽出): Named Entity Recognition の略。 テキストから、人名、組織名、地名、日時表現、金銭表現などの固有表現を特定します。
研究者は、それぞれのタスクで評価用のデータセットを準備してモデルの高精度化にチャレンジしていました。ディープラーニングの台頭によりニューラルネット機械翻訳が登場し、それまでの統計的機械翻訳をあっという間に追い抜いてしまったことから、機械翻訳以外のタスクに関しても大量の教師データがあれば高性能のモデルを作成可能なことは十分想定できました。しかしながら、機械翻訳で使用する対訳コーパスのように大量の教師データ(数万件~数百万件)をそれぞれのタスクごとに準備するのは困難でした。
対訳コーパス: 文と文を対訳の形でまとめたデータ
1.2 事前学習とファインチューニングの考え方
1.1章の状況を打開するために考案されたのが、「事前学習」と「ファインチューニング」です。従来は、タスクごとに0からモデルを作ろうとしていたのに対して、共通する半製品をまず作ってから、それぞれのタスクで別々に仕上げをするというイメージになります。この例えでは、半製品を作る作業が「事前学習」に、仕上げ作業が「ファインチューニング」に相当します。つまり、まず言語の基礎を学習してから、タスク毎の学習をするという手順になります。当然ながら、言語の基礎の学習が「事前学習」に、タスク毎の学習が「ファインチューニング」に相当します。
このように2段階に分けることによって、「事前学習」において言語の基礎が学習できていれば、「ファインチューニング」ではそれほど大量の教師データがなくても十分に学習できるようになります。具体的には、数万件~数百万件は必要だったところを数千件~数万件で済むようになります。
では、「事前学習」はどうすれば良いのかというと、大量の文章を準備すれば機械的に穴埋め問題と正解データをつくることができますので、これを使って学習します。なお、「機械的に穴埋め問題と正解データをつくる」に関しては、本連載その4(word2vec)にも記載がありますので、参考にしてください。
1.3 GPT(Generative Pre-trained Transformer)
GPTは、上記論文において、「事前学習」と「ファインチューニング」を実際に使用したモデルです。GPTは、12のタスクの内、9つでSoTAを達成し(表1)、「事前学習」と「ファインチューニング」の有用性を如実に示しました。
SoTA: state of the art の略で、特定のタスクにおいて最も優れたモデルを指します。
GPTの構成を図1(左)に示します。基本的に Transformer の Decoder にあった Masked Multi-Head Attention を使った構成になっています。最終層が左右に分かれているのは、事前学習時とファインチューニング時で構成を変更することを表しています。
なお、位置情報の埋め込みには、Transformer での正弦波を用いる手法に代えて、学習による手法を採用しています。しかし、Transformer の論文でも両者の性能は変わらないと記載されてますので、重要な変更ではないでしょう。
以降では、事前学習とファインチューニングに分けて説明していきます。
1.3.1 GPT の事前学習
GPT では事前学習として、BooksCorpusデータセットを使って、文章のそれまでの単語から次の単語を予測する学習を実施します。このデータセットには、さまざまなジャンルの7,000冊以上の未出版の書籍が含まれています。そのため、連続した⻑いテキストが含まれており、⻑距離情報に基づいた学習ができます。
なお、事前学習の時は最終層で各単語の出現確率を求めます(図1 Text Prediction)。
1.3.2 GPT のファインチューニング ファインチューニングでは、タスクに応じて最終層を取り替えて(図1 Task Classifier)、それぞれの教師データで学習します。事前学習では100epoch学習したのに対して、ファインチューニングでは、ほとんどのタスクで3epochで十分だったとのことです。 タスクによって入力データの形式は色々と違いがありますが、図1(右)のように、一つのシーケンスとして入力できるように工夫してあります。
1.4 BERT(Bidirectional Encoder Representations from Transformers)
GPT が発表された数か月後にグーグルが BERT を発表しました。
BERT は、11のタスクすべてでSoTAを達成し(表2)、GPT の記録を塗り替えてしまいました。そして様々な研究機関や大学が、 BERT による事前学習済のモデルを公開するようになり、事前学習時とファインチューニングの考え方が普及しました。
GPT は次の単語予測にこだわっていましたが、BERT は様々なタスク用に高精度なモデルが作成できることを優先します。つまり、GPT は未来の単語は参照しないように、Masked Multi-Head Attention を使用していましたが、BERT ではこの制限を外します。つまり、マスク処理のない通常の Multi-Head Attention を使用します。これが、「GPT は Transformer の Decoder をベースとしているが、BERT は Encoder をベースとしている」と言われる所以です。構成に関して他は GPT とほぼ同様です。
以降では、事前学習とファインチューニングに分けて説明していきます。
1.4.1 BERT の事前学習
事前学習についても、BERT では各タスクで高精度なモデルが作成できることを考慮しています。タスクには入力が2文になるものもあるので、事前学習時でも2文入力することとし、以下の2つのタスクを同時に学習します(データセットには GPT が利用した BooksCorpus に English Wikipedia を加えて使用)。
Masked Language Model 入力の一部のトークン(単語)をマスクし、元のトークンを当てる。
Next Sentence Prediction 入力された2文が文脈的に連続しているか、していないかを判断する。
なお、BERT では2文を入力しているため、どちらの文かを区別するための「セグメント埋め込み」を実施します。
1.4.2 BERT のファインチューニング
BERT への入力形式を図2に示します。データを入力すると、事前学習の効果により、C には入力文全体の情報が、Ti には各トークン(単語)の文脈を加味した分散表現が得られるようになります。これにより、ファインチューニングで使う情報を選択することによって、様々なタスクに対応することができます。つまり、1文または2文を分類するタスクは C を処理する層を、NERの様に各トークンを分類するタスクは Ti を処理する層を追加して、ファインチューニングを実施します。なお、入力に1文しか必要としないタスクでは、2文目は入力せずに1文目だけにします。
2. おわりに
「GPT と BERT」と題して 「事前学習」と「ファインチューニング」について説明しました。
GPT は、SoTAを達成したものの、あっという間に BERT に抜かされてしまいました。
そして、事前学習とファインチューニングと言えば BERT と言うぐらい、BERT の方が有名になってしまいました。これは、グーグルの完全勝利のようにも見えます。しかしながら、今から思えば当時の OpenAI にとって事前学習とファインチューニングも1つの通過点に過ぎず、それは些細な事と考えていたのかも知れません。AGI(汎用人口知能)の開発を目標としている OpenAI は、次の単語予測にこだわって研究を続けていきます。
次回は、「GPT-2 と T5」 をお届けする予定です。