1. はじめに
2017 年は、トランスフォーマーモデルが初めて登場した 機械学習の歴史的な年でした。多くのベンチマークで良好なパフォーマンスを示し、データ サイエンスの多くの問題に適用できます。その効率的なアーキテクチャにより、特定のタスクに重点を置いた他の多くのトランスベースのモデルが後に開発されました。
モデルの 1 つは BERT です。これは主に、テキスト情報を非常に正確に表現し、長いテキスト シーケンスの意味論的な意味を保存できる埋め込みを構築できることで知られています。したがって、BERT 埋め込みは機械学習で広く使用されています。BERT が NLP の膨大なタスクへの扉を開くため、BERT がテキスト表現を構築する方法を理解することは非常に重要です。
この記事では、元の BERT 論文を参照し、BERTアーキテクチャを見て、その背後にある中心的なメカニズムを理解します。最初のセクションでは、BERT の概要を説明します。その後、その内部ワークフローと情報がモデル全体にどのように渡されるかをさらに深く理解していきます。最後に、NLP の特定の問題を解決するために BERT を微調整する方法を学びます。
2. 概要
Transformerのアーキテクチャは、エンコーダとデコーダという 2 つの主要な部分で構成されます。スタック型エンコーダーの目標は、主なコンテキストを保持する入力に対して意味のある埋め込みを構築することです。最後のエンコーダーの出力は、新しい情報を生成しようとするすべてのデコーダーの入力に渡されます。
BERTは Transformer の後継であり、そのスタック型双方向エンコーダを継承しています。BERT のアーキテクチャ原則のほとんどは、オリジナルの Transformer のものと同じです。
変圧器のアーキテクチャ
3.バートバージョン
BERT には、基本バージョンと大規模バージョンの 2 つの主要なバージョンがあります。それらのアーキテクチャは、使用するパラメーターの数が異なることを除いて、まったく同じです。全体として、BERT ラージでは、BERT ベースと比較して 3.09 倍多くのパラメーターを調整する必要があります。
BERTベースとBERTビッグベースの比較
4.双方向表現
BERT の名前の文字「B」で始まることから、BERT は双方向モデルであることを覚えておくことが重要です。これは、情報が両方向 (左から右、右から左) に渡されるため、Word の接続をより適切に捕捉できることを意味します。これにより、一方向モデルと比較してトレーニング リソースが増加することは明らかですが、同時に予測精度も向上します。
より深く理解するために、BERT アーキテクチャを他の一般的な NLP モデルと比較できます。
オリジナル論文のBERT、OpenAI GPT、および ElMo アーキテクチャを比較します 。著者が承諾しました。
5. 入力のトークン化
公式論文では、著者は入力に渡されるテキストを指すために「センテンス」という用語を使用しています。同じ用語を指すために、この一連の記事では「シーケンス」という用語を使用します。これは混乱を避けるために行われます。これは、「文」とは通常、ポイントで区切られた単一のフレーズを意味し、他の多くの NLP 研究論文では「シーケンス」という用語が同様の状況で使用されているためです。
BERT のトレーニング方法を詳しく説明する前に、BERT がデータを受け入れる形式を理解する必要があります。BERT は入力として、単一のシーケンスまたはシーケンスのペアを受け取ります。各シーケンスはトークンに分割されます。さらに、2 つの特別なトークンが入力に渡されます。
この小説の公式論文では「文」という用語が使用されていますが、これは BERT に渡される入力シーケンスを意味し、実際には複数の文で構成される場合があります。わかりやすくするために、この記事では表記に従い、同じ用語を使用します。
- [CLS] — 開始を示す最初のシーケンスの前に渡されます。一方、 [CLS] はトレーニング中の分類目標にも使用されます (次のセクションで説明します)。
- [SEP] — 最初のシーケンスの終わりと 2 番目のシーケンスの始まりを示すためにシーケンス間で渡されます。
2 つのシーケンスを渡すと、入力にシーケンスのペア (質問と回答、仮説と前提など) が含まれるさまざまなタスクを BERT で処理できるようになります。
6. 入力エンベディング
トークン化後、トークンごとに埋め込みが構築されます。入力埋め込みをより代表的にするために、BERT はトークンごとに 3 種類の埋め込みを構築します。
- トークンの埋め込みは、トークンの意味論的な意味を捕捉します。
- セグメントの埋め込みには2 つの可能な値のいずれかがあり、トークンがどのシーケンスに属するかを示します。
- 位置埋め込みには、シーケンス内のトークンの相対位置に関する情報が含まれます。
入力処理
これらの埋め込みが要約され、結果が BERT モデルの最初のエンコーダーに渡されます。
7. 出力
各エンコーダーは 入力としてn 個の エンベディングを受け取り、同じ数の同じ次元の処理されたエンベディングを出力します。最終的に、BERT 出力全体には、それぞれが最初のトークンに対応するn 個の埋め込みも含まれます。
8. トレーニング
BERT トレーニングは 2 つの段階で構成されます。
- 事前トレーニング。BERT は、マスク言語モデリング (MLM)と自然言語推論 (NLI) という2 つの予測タスクで、ラベルのないシーケンスのペアに対してトレーニングされます。シーケンスの各ペアについて、モデルは両方のタスクの予測を行い、損失値に基づいてバックプロパゲーションを実行して重みを更新します。
- 微調整。BERT は事前にトレーニングされた重みで初期化され、ラベル付きデータの特定の問題に合わせて最適化されます。
9. 事前トレーニング
モデルは大規模なデータ コーパスでトレーニングされるため、微調整と比較して、事前トレーニングには通常、かなりの時間がかかります。このため、事前トレーニングされたモデルのオンライン リポジトリが多数存在し、特定のタスクを比較的迅速に解決するために微調整することができます。
BERT が事前トレーニング中に解決する 2 つの問題について詳しく見ていきます。
9.1 マスク言語モデリング
著者らは、最初のテキスト内の特定の数のトークンをマスクし、それらを予測することによって BERT をトレーニングすることを推奨しています。これにより、BERT は周囲のコンテキストを使用して単語を推測できる復元力のある埋め込みを構築できるようになり、見逃した単語に対して適切な埋め込みを構築することにもつながります。プロセスは次のように機能します。
- トークン化後、トークンの 15% がブロック対象としてランダムに選択されます。選択されたトークンは、反復の最後に予測されます。
- 選択したトークンは、次の 3 つの方法のいずれかで置き換えられます。
- トークンの 80% が [MASK] トークンに置き換えられます。
例: 本を購入しました → [マスク] を購入しました
- トークンの 10% がランダムなトークンに置き換えられました。
例:彼はフルーツを食べています → 彼はフルーツを吸っています
- トークンの 10% は変わりません。
例:私の近くの家 → 私の近くの家 - すべてのトークンは BERT モデルに渡され、入力として受け取った各トークンの埋め込みを出力します。
4. ステップ 2 で処理されたトークンに対応する出力埋め込みは、マスクされたトークンを予測するために独立して使用されます。各予測の結果は、語彙内のすべてのトークンにわたる確率分布です。
5. クロスエントロピー損失は、確率分布を真のマスクされたトークンと比較することによって計算されます。
6. バックプロパゲーションを使用してモデルの重みを更新します。
9.2 自然言語推論
この分類タスクでは、BERT は 2 番目のシーケンスが最初のシーケンスに続くかどうかを予測しようとします。予測全体は、[CLS]トークン の最終的な隠れ状態の埋め込みのみを使用して行われます 。これには、両方のシーケンスからの集約された情報が含まれている必要があります。
MLM と同様に、構築された確率分布 (この場合はバイナリ) を使用してモデルの損失を計算し、バックプロパゲーションを介してモデルの重みを更新します。
NLI の場合、著者らは、コーパス内でシーケンスが相互に続くシーケンス ペアの 50% (ポジティブペア) と、コーパスからシーケンスがランダムに取得されるシーケンス ペア (ネガティブ ペア) の 50% を選択することを推奨しています。
バートの事前トレーニング
9.3 トレーニングの詳細
論文によると、BERT は BooksCorpus (800 億単語) と英語版 Wikipedia (2,500 億単語) で事前トレーニングされています。より長い連続テキストを抽出するために、著者は表、見出し、リストを無視して Wikipedia から段落のみを読み取ります。
BERT は 256 万のバッチでトレーニングされ、そのサイズは 40 シーケンスに相当し、3 億ワードの 3 エポックに相当します。各シーケンスには、最大 128 (時間の 90%) または 512 (時間の 10%) のトークンが含まれます。
元の論文によると、トレーニングパラメータは次のとおりです。
- オプティマイザー: Adam (学習率 l = 1e-4、重み減衰 L2 = 0.01、β1 = 0.9、β2 = 0.999、ε = 1e-6)。
- 学習率のウォームアップは最初の 10 ステップで実行され、その後直線的に減少します。
- 全層とも圧力差(α=0.1)層を使用しています。
- アクティブな機能: Gru。
- トレーニング損失は、平均 MLM と平均次文予測尤度の合計です。
9.4 微調整
事前トレーニングが完了すると、BERT は文字通り単語の意味を理解し、その意味をほぼ完全に表現する埋め込みを構築できます。微調整の目的は、特定の下流タスクを解決するために BERT の重みを徐々に変更することです。
10. データ形式
セルフアテンション メカニズムの堅牢性により、BERT は特定の下流タスクに合わせて簡単に微調整できます。BERT のもう 1 つの利点は、双方向のテキスト表現を構築できることです。これにより、ペアを操作するときに 2 つのシーケンス間の正しい関係を発見できる可能性が高くなります。以前の方法には、2 つのシーケンスを独立してエンコードし、その後それらに双方向のクロスアテンションを適用することが含まれていました。BERT はこれら 2 つの段階を統合します。
特定の問題に応じて、BERT は複数の入力形式を受け入れます。BERT を使用してすべてのダウンストリーム タスクを解決するためのフレームワークは同じです。テキスト シーケンスを入力として受け取ることにより、BERT は一連のトークン埋め込みを出力し、それがモデルに供給されます。ほとんどの場合、すべての出力埋め込みが使用されるわけではありません。
一般的な問題と、BERT を微調整することでそれらを解決する方法を見てみましょう。
文ペアの分類
文ペア分類の目的は、特定のシーケンス ペア間の関係を理解することです。最も一般的なタスクの種類は次のとおりです。
- 自然言語推論: 2 番目のシーケンスが最初のシーケンスに続くかどうかを判断します。
- 類似性解析: 配列間の類似性の度合いを見つけます。
文ペアの分類
微調整のために、両方のシーケンスが BERT に渡されます。経験則として、[CLS] トークンの出力埋め込みは分類タスクに使用されます。研究者らによると、[CLS]トークンには文の関係に関する主要な情報が含まれている必要があります。
もちろん、他の出力埋め込みも使用できますが、実際には通常は省略されます。
質疑応答タスク
質問と回答の目的は、特定の質問に対応するテキストの一節から答えを見つけることです。ほとんどの場合、答えは 2 つの数字、つまりチャネルの開始トークン位置と終了トークン位置の形式で与えられます。
質疑応答タスク
BERT は入力として質問と段落を受け入れ、それらの埋め込みのセットを出力します。回答は段落に含まれているため、段落トークンに対応する出力埋め込みのみに関心があります。
段落内の開始応答トークンの位置を見つけるために、各出力埋め込みと特別な訓練可能なベクトル Tstₐrt の間のスカラー積が計算されます。ほとんどの場合、モデルとベクトル Tstₐrt がそれに応じてトレーニングされる場合、スカラー積は、対応するトークンが実際に開始応答トークンである可能性に比例するはずです。スカラー積を正規化するために、スカラー積はソフトマックス関数に渡され、確率として表示できます。最も高い確率に対応するトークン埋め込みが、開始応答トークンとして予測されます。真の確率分布に基づいて損失値が計算され、バックプロパゲーションが実行されます。ベクトル Tₑnd を使用して同様のプロセスを実行し、終了マーカーを予測します。
単文の分類
以前の下流タスクと比較した場合の違いは、ここでは 1 文の BERT のみが渡されることです。この構成によって解決される一般的な問題は次のとおりです。
- 感情分析: 文章が肯定的な態度を表しているのか、それとも否定的な態度を表しているのかを理解します。
- トピック分類: 文章を内容に基づいていくつかのカテゴリのいずれかに分類します。
単文の分類
予測ワークフローは文ペア分類の場合と同じです。[CLS] ラベル付き出力埋め込みが分類モデルへの入力として使用されます。
単文タグ
固有表現認識 (NER) は、シーケンスの各トークンを対応する実体の 1 つにマッピングすることを目的とした機械学習の問題です。
単文タグ
これを行うために、入力文トークンの埋め込みが通常どおり計算されます。次に、各埋め込み ( [CLS] と [SEP]を除く) は、それぞれを特定の NER クラス (そうでない場合はマップしない) にマップするモデルに独立して渡されます。
11. 特徴抽出
最後の BERT レイヤーを取得して埋め込みとして使用することは、入力テキストから特徴を抽出する唯一の方法ではありません。実際、研究者らは、CoNLL-2003 データセットの NER タスクを解決するために、さまざまな方法でエンベディングを集約するいくつかの実験を完了しました。実験を行うために、彼らは分類層を適用する前に、抽出された埋め込みをランダムに初期化された 2 層 768 次元 BiLSTM への入力として使用しました。
以下の図は、埋め込み (BERT ベースから抽出) がどのように機能するかを示しています。図に示すように、最もパフォーマンスの高い方法は、最後の 4 つの BERT 隠れ層を連結することです。
実行された実験に基づくと、隠れ層の集約は、さまざまな NLP タスクでより良い結果を得るために埋め込み表現を改善する潜在的な方法であることを覚えておくことが重要です。
左側の画像は、隠れ層を備えた拡張 BERT 構造を示しています。右側の表は、埋め込みがどのように構築されるか、および対応する戦略を適用することで得られる対応するスコアを示しています。
12. BERT と他の関数を組み合わせる
たとえば、テキストだけでなく数値的な特徴も扱うことがあります。当然のことながら、テキストおよびその他の非テキストの特徴からの情報を組み込むことができる埋め込みを構築することが望ましい。推奨されるアプリケーション戦略は次のとおりです。
- テキスト関数と非テキスト関数の連結。たとえば、ある人物に関するプロフィールの説明をテキスト形式で処理し、名前や年齢などの別の特徴がある場合、次の形式で新しいテキストの説明を取得できます。「私の名前は <名前> です。< プロフィールの説明」 >。私は <歳> です。」最後に、このようなテキストによる説明を BERT モデルに入力できます。
- 埋め込みと機能の連結。前述したように、BERT 埋め込みを構築して、他の機能と接続することができます。構成で変更された唯一の点は、下流タスクの分類モデルが高次元の入力ベクトルを受け入れる必要があることです。
13. 結論
この記事では、BERT のトレーニングと微調整のプロセスについて詳しく説明します。実際、この知識は NLP のほとんどのタスクを解決するのに十分であり、ありがたいことに BERT を使用するとテキスト データを埋め込みにほぼ完全に組み込むことができます。
最近、他の BERT に似たモデル (SBERT、RoBERTa など) が登場しました。BERT の機能を深く分析して新しい高性能モデルを導き出す「 BERTology 」と呼ばれる特別な研究領域もあります。これらの事実は、BERT が機械学習の革命を規定し、NLP の大幅な進歩を可能にするという事実を裏付けています。