BERTとは
BERTはBidirectional Encoder Representation from Transformersの略です。直訳すれば、「トランスフォーマーからの双方向エンコーダ表現」となります。この記事ではその意味を解説します。
BERTは事前訓練済みの巨大な言語モデル(Large Language Model、LLM)です。最近では、GPT3と共にファウンデーション(基盤)モデルとも呼ばれています。ただし、GPT3とBERTにははっきりとした違いがあります。
GPT3はトランスフォーマーのデコーダをベースにしたモデルで文章生成に優れています。その一方、BERTはトランスフォーマーのエンコーダをベースにしたモデルで文章から特徴量を抽出することを得意とします。
とは言うものの、GPT3もBERTも事前学習を行う点は共通しています。それはオリジナルのトランスフォーマーからの違いでもあります。もちろん、BERTの事前学習はGPT3とは手法が異なります。
よって、BERTにおける事前学習を理解するとBERTの特徴がよくわかります。まずは、オリジナルのトランスフォーマーとの違いを見ていきましょう。
教師あり学習の問題
オリジナルのトランスフォーマーを開発したGoogleの研究者であるAshish Vaswaniらのチームは、翻訳モデルの訓練に「教師あり学習」を使いました。この教師あり学習において、2つの問題点があります。
例えば、「ドイツ語から英語への翻訳」をするモデルのためには、ドイツ語の文章とそれに対応する英語の翻訳文の両方を含む訓練用のデータが必要です。そのようなテキストデータを大量に収集するのは機械翻訳の品質を確保するためになくてはならないものですが、大変な時間と労力がかかる作業になります。これが教師あり学習を言語モデルの訓練で使用する際の第一の問題点です。
そして「教師あり学習」にはもう一つの問題があります。
まず、オリジナルのトランスフォーマーのアーキテクチャを簡単に復習しましょう。トランスフォーマーには、翻訳元(ソース)言語の文章を処理するエンコーダと翻訳先(ターゲット)言語の文章を生成するデコーダがあります。エンコーダはソースの文章から文脈を抽出してデコーダが翻訳をするするのを助けます。

このように翻訳とはソースから抽出した情報をターゲットの言語へと変換していく作業になります。例えば、ドイツ語の文章の情報をもとに同じ意味を含んだ英語の文章への変換を行います。
つまり「教師あり学習」によってエンコーダはドイツ語から英語への翻訳というタスクに役立つ情報を抽出するようになります。これは翻訳が最終的な目的であることを考えれば、合理的に思えます。 しかし、ここに落とし穴があります。
なぜならば、翻訳のために学習したエンコーダによる情報は他のタスクには役立たないからです。
異なるタスクを実行するためには、たとえトランスフォーマーのアーキテクチャを土台にしたとしてもモデルをゼロから訓練をする必要があります。要するに、翻訳タスクで学んだことはすべて忘れてやり直さなくてはなりません。
自然言語処理では、質問応答(Question & Answering、QA)や言語推論(Natural Language Inference、NLI)などのたくさんの異なるタスクがあります。その一つ一つに対して別々の訓練が必要となります。
つまり特定のタスクに役立つ表現を抽出することを目的とした教師あり学習では、タスクごとに訓練をする手間が大変になります。特に大規模なコーパスでは時間がかかります。無駄が多いわけです。これが教師あり学習の二つ目の問題点です。
次に、子供が学習する過程について考察します。それは教師あり学習の二つの問題を解決するヒントを与えてくれます。
子供の学習
子供が言語能力を習得する過程を考察してみましょう。もちろん脳の仕組みは完全には解明されていないので想像の域を出ません。しかし、こんな質問を考えてみます。「人間の脳は、特定のタスクごとに異なる表現を学習するでしょうか?」
おそらく、そんなことはないでしょう。子供たちが言語を学ぶとき、頭の中で単一のタスクを目指しているわけではありません。 彼らは、さまざまな状況での経験を通して言語に対する理解を深めます。それはさまざまな言語タスクを実行するのに役立つ言語スキルの基盤となります。その上で、習得した言語スキルを利用することをさらに学習します。
つまり学んだ言語能力を調整してさまざまな言語活動に適用するようになります。そこでは一度学習したことをタスクに応じて使いこなすことを学習しています。最初は目的もなく遠回りに見えますが、学んだことを無駄にしないのでとても効率の良い学習方法です。
「教師あり学習」的なことは子供の言語能力がある程度成長した後に行われます。授業を受けたり、テストのために勉強するのですが、そこではすでに言語を理解し使いこなせる土台があるのが前提です。
言語モデルでも、目的の明確な教師あり学習を行う前に、言語そのものに対する学習を事前に行えないでしょうか。その上でさまざまなタスクに合わせてモデルを調整できれば、モデルをゼロから訓練しなおす必要がなくなります。
自己教師あり事前学習
BERTやGPTでは言語そのものを事前に学習します。BERTの論文では「教師なし学習」と呼んでいますが、最近は「自己教師あり学習」と呼ぶことが多いので、ここでもそうしています。
自己教師あり学習ではデータそのもののから正解データを作るので人間がラベルを付与する必要がありません。つまり、世の中にある大量の「ラベル付けがされていない」コーパス(テキストデータを大量に集めたもの)を利用することが可能です。研究者たちはそこに目をつけて大規模な事前学習を行うことで大量のパラメータを持つモデル(BERTやGPT)を訓練することに成功しました。
従って教師あり学習の第一の問題点は自己教師あり学習を使うことで無くなります。なぜなら正解データを準備することなく大量のデータを使って言語そのものを学習できるからです。BERTによる事前訓練の詳細は後で解説します。
こうして事前学習を行ったBERTモデルは、文章からさまざまな特徴を抽出できるようになります。それは特定のタスクに縛られてない言語情報の表現です。よって、さまざまな目的に合わせてすばやく微調整(ファインチューニング)が可能です。これで教師あり学習の第二の問題点も解決されました。
次は、ラベルのないテキストのデータでBERTをどのように事前学習するのかを見ていきましょう。
言語モデル
まずは、言語モデル(LM)とは何かを解説します。
ある文章内の単語のシーケンス(順番に並んだもの)に続く次の単語の確率を推定します。 ここでは単語と呼びましたが、実際には形態素あるいはトークンと呼ばれる言語の最小要素の並びから次に来るトークンを予測します。
犬が丘の上を___上記の文に続くのは「歩く」や「走る」などの確率が高いでしょう。でも「寝る」は確率が低いと思われます。
仮に「歩く」が続くとするとその次には何が続くでしょうか。
犬が丘の上を歩く___可能性はたくさんありますが、予測を続けていけば文章の続きを生成できます。例えば「犬が丘の上を歩くと魚の匂いがただよってきた」なんて文章が作れます。
このように言語モデル(LM)を応用すれば、次から次へとトークンを予測することにより、プロンプト(導入文)に続くテキストを生成することができます。
これを左から右へ(left-to-right)の言語モデルと呼びます。
注釈: 「左から右」は、英語やドイツ語などの言語では通常の文の流れる方向です。 しかし、他の言語では「右から左」または「上から下」など異なる方向・順序が使われます。 したがって、ここで言う「左から右」とは、特定の言語を対象とするのではなく、言語シーケンスの自然な流れ (順方向)を意味します。 また、「右から左」とは、反対の流れ(逆方向) を意味します。
言語モデルの訓練では、もともと文章に存在するトークンを正解(ラベル)として予測の対象とします。よって、ラベルが付与されていないテキストのデータを使用できます。つまりデータそのものにラベルが存在する「自己教師あり」の学習が行えます。
次に、順方向による予測だけではない言語モデルの訓練を見ていきます。
マスク言語モデル
マスク言語モデル(Masked Language Model、略してMLM)は、マスク(非表示に)されたトークンの確率を推定します。非表示にされる場所はランダムなので文章を順方向に辿るだけではありません。
犬が__を歩くと魚の匂いがただよってきた。この文章ではマスクされたトークンの前後の文脈を考慮する必要があります。「犬」だけなら次に続くトークンには多数の可能性があります。しかし、「魚の匂いがただよってきた」という情報があると文脈がより限定されるので「犬が海辺を歩くと」などの確率が高くなるでしょう。
BERTによるMLMは、トランスフォーマーの仕組みである自己アテンションに基づいて、マスクされたトークンを予測します。自己アテンションは、マスクされたトークンを含め、すべてのトークンを考慮するため、順方向だけでなく、逆方向も含めた文脈を抽出して予測に役立てます。
Jacob Devlinは順方向だけの言語モデルが生成する表現を単方向(uni-directional)表現と呼び、順方向と逆方向の両方を使う言語モデルが生成する表現を双方向(bi-directional)表現と呼んでいます。
私見ですが、「双方向」という用語は、少し誤解を招くと思います。なぜなら自己アテンションの仕組みはトークンの位置は重要ですが、方向はあまり意味を持たないからです。よって、この「双方向」という用語は「単方向」のアンチテーゼとして理解した方が良いでしょう。
BERTはトランスフォーマーのエンコーダを使って文章から双方向表現を抽出します。研究者たちはエンコーダを事前訓練してMLMモデルに仕上げることでタスクに縛られない有用な特徴量抽出器に仕上げました。
これがBERTの名前の由来である「トランスフォーマーからの双方向エンコーダ表現」の意味です。
これに対してトランスフォーマーのデコーダを使うGPTは左からの文脈のみで文章生成するので単方向表現の事前学習を行います。
BERTの論文には、次のような脚注 (4) があります。
双方向トランスフォーマーは「トランスフォーマー・エンコーダ」と呼ばれることが多いのに対し、左からの文脈のみのバージョンはテキスト生成に使用できるため「トランスフォーマー・デコーダ」と呼ばれることに注意してください。
(原文)We note that in the literature the bidirectional Transformer is often referred to as a “Transformer encoder” while the left-context-only version is referred to as a “Transformer decoder” since it can be used for text generation.
双方向表現はすべてのトークンからの文脈を同時に抽出するので、別々に訓練された順方向と逆方向の単方向モデル表現を単純に連結するよりも優れています。
ただし、MLMの訓練だけではさまざまなタスクに対応できる基盤として、まだ十分ではありません。なぜなら、多くのタスクでは2つの文の関係を理解する必要があるからです。
例えば、質問応答(QA)や自然言語推論(NLI)などがその例です。MLMだけではこれらに役立つ情報を抽出するだけの言語能力を習得できません。少なくともBERTの開発者たちはそう考えました。
よって、複数の文の間の関係については、別の「自己教師あり学習」が行われました。
次文予測
次文予測(Next Sentence Prediction、NSP)は、2 つの文の関係を学習するために、2値(Binary Value)を予測するタスクです。そこでは、正解は「はい・いいえ」や「真・偽」といったバイナリ表現になります。
たとえば、文Aと文Bがあり、モデルは文Bが文Aに続く文脈を持つ文であるかどうかを予測します。以下は2つの文が前後でつながる文の例です。
文A: 男は店に行った
文B: 彼は牛乳を買ったこれに対して以下は文脈が完全に異なるので、つながらない文になります。
文A: 男は店に行った
文B: ペンギンは空を飛ばないこのような訓練に使うラベルはデータから生成できます。文Bが文Aに続くのであればデータからそのまま持ってくれば良いですし、文Aに続かない文ならば関係のない文章からランダムにひっぱってきたものを使います。よってラベルを自動生成できるので「自己教師あり学習」になります。
BERTはMLMとNSPの2つのタスクで事前学習を行うのですが、MLMタスクとNSPは異なる二つのタスクです。両方のタスクで訓練するにはどうすればよいでしょうか?
その仕組みを見ていきましょう。BERTの訓練では30,000トークンの語彙を持つWordPieceをトークン化に使用していますが、そのほかにも以下の特別なトークンも使用しました。
[CLS] — すべてのシーケンスの最初のトークンとして使われます。 エンコーダから出力される最終的な隠れ状態が分類タスクに使われます。つまり、文章の情報を集約した表現です。
[SEP] — 区切りのトークン。たとえば質問と関連する文章を分離します。
[MASK] — 入力トークンの一部を非表示にするトークン
MLMタスクでは、文章の中でランダムに選ばれたトークンを[MASK] トークンに置き換えます。マスクされたトークンが正解(ラベル)となります。モデルの予測とラベルで損失(交差エントロピー)を計算してモデルを訓練します。
NSPタスクでは、[SEP] トークンを使用して文 A と文 B を分離し、[CLS]の最終的な隠れ状態を2値(バイナリ)予測に使用します。
以下はBERTの論文からの例です。[CLS]、[SEP]、[MASK]のトークンが同時に使われているのがわかります。

注釈: 2つの文を分ける際に、文Aまたは文Bのどちらに属しているかの情報として埋め込みベクトルに付け加えます。これは位置エンコーディングに似ていますが、各トークンの位置ではなく、文レベル(AかBか)の区別に使います。BERTの論文ではそれをセグメント(区分、分割)埋め込みと呼んでいます。セグメント埋め込みはその他の埋め込みベクトルと同様に学習によって形成された分散表現です。下図では緑の箱に入った$${E_A}$$と$${E_B}$$とで表現されています。よって、各トークンの埋め込みベクトルには位置エンコーディングとセグメント埋め込みベクトルが加算されます。

以上の仕組みにより、MLMとNSPの両方を訓練することが可能になっています。このようにして、開発者たちは自己教師あり学習でBERTを事前学習させることに成功しました。彼らの最終モデルは、これらのタスクで 97% ~ 98%の精度を達成しています。
このようにしてBERTは言語そのものを目的を限定せずに学習します。それはまるで人間の子供が言語を習得する第一の過程のようでもあります。
次のステップは、事前学習済みのBERTによる双方向表現をより特定のタスクを実行するために微調整(ファインチューニング)を行うことです。
教師ありファインチューニング
事前学習によって学んだ言語能力を特定のタスクに適応させるために微調整(ファインチューニング)を行います。ここでは教師あり学習を行いモデルのパラメーターをタスクに合わせて調整します。
ニューラルネットワークのパラメータが急激に変化しないように学習率を低めに抑えてながら教師あり学習を行います。よって微調整と呼びます。これはゼロからの訓練よりもはるかに高速です。また事前トレーニング済みのパラメーターを固定しないので柔軟にモデルをタスクに合わせて調整することが可能です。
タスクによっては出力層を変更したりタスク固有のアーキテクチャを導入する必要がありますが、特徴量を抽出するBERTの部分は設計変更することなく、特定のタスクごとにモデルをファインチューニングできます。なぜなら、BERTモデルはMLMとNSPによる事前学習のおかげで、単一の文または2つの文からの表現を生成できるので下流のタスクごとにタスク固有の入力と出力をBERTに柔軟に適応させることができるからです。
分類タスクでは、最終的な[CLS]の表現を出力層に入力します。 2文のタスクの場合、エンコーダは、[SEP] を使用して2つの文を連結したシーケンスから2文にまたがるアテンションを使用して双方向の表現を計算できます。 たとえば、質問応答タスクの質問とそれに続く文章の組み合わせなどに使用できます。
以上でBERTの事前訓練とファインチューニングによる学習方法の解説となります。重要なのは、以下のポイントです。
自己教師あり学習を利用して豊富なコーパスを利用
特別なトークンを使いMLMとNSPの両方の事前学習
事前学習はタスクに限定されることない言語学習
ファインチューニングによってさまざまなタスクに対応
最後に実験結果について触れます。彼らは、次の2つのサイズのモデルに関する結果を報告しました。
ベースのBERTは、合計で110Mのパラメーターを使用します。
12個のエンコーダ・ブロック
768次元の埋め込みベクトル
12のヘッドを持つ自己アテンション
大規模なBERTは、合計で340Mのパラメーターを使用します。
24個のエンコーダ・ブロック
1024次元の埋め込みベクトル
16のヘッドを持つ自己アテンション
ちなみにオリジナルのトランスフォーマーのベースモデルのエンコーダでは以下の設定になっています。
6個のエンコーダ・ブロック
512次元の埋め込みベクトル
8のヘッドを持つ自己アテンション
全体的にBERTはオリジナルのトランスフォーマーの1.5から2倍の設定になっています。
以下は、GLUEと呼ばれる言語モデルのテスト結果です。一番下の二行がベースと大規模なBERTの結果です。当時の他のモデルよりも良い結果を出しています。

参照
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
GitHub
