pytorchでBERT(1/3)を実施


pytorchによるBERTの実装


1.BERTの基本概念


Transformerからの双方向エンコーダRepresentation(BERT)は、Googleが発表した組み込みモデルです.質問への回答,テキストの生成,文の分類などのタスクで最適な性能を得,自然言語処理分野に大きな貢献をした.
A 문장 : He got bit by Python (파이썬이 그를 물었다)
B 문장 : Python is my favorite programming language(내가 가장 좋아하는 프로그래밍 언어는 파이썬이다)
上の2つの文章ではpythonという言葉の意味が違います.word 2 vecと同じimbeddingは同じ単語なので、表現は同じです.BERTはword 2 vecとは異なり,コンテキストベースのモデルであるため,文のコンテキストを理解し,コンテキストに基づいて単語beddingを生成する.

2.BERTの振る舞い


BERTはトランスコードモデルに基づき、エンコーダではなくエンコーダのみを使用する.

BERT構造

3.BERT構造

  • エンコーダ層数Lで示す
  • 状態のヘッドはAで示す
  • である.
  • 非表示ユニットはHで
  • を表す.

    3.1. BERT-base


    BERT-baseは12個のエンコーダ層が積層されている.すべてのエンコーダは12個のアレイヘッダを使用し、エンコーダのフィードフォワードネットワークは768個の階層のHeddenユニットから構成されている.
    L = 12, A = 12, H = 768

    3.2. BERT-lage


    BERT LAGEは、24のエンコーダ層が積層されている.すべてのエンコーダは16個のアレイヘッダを使用し、エンコーダのフィードフォワードネットワークは1024個の階層のHeddenユニットから構成されている.
    L = 24, A = 16, H = 1024

    3.3. その他複数BERT構造

  • BERT-tiny : L = 2, A = 2, H = 128
  • BERT-mini : L = 4, A = 4, H = 256
  • BERT-small : L = 4, A = 8, H = 521
  • BERT-medium : L = 8, A = 8, H = 521
  • 4.研修されたBERT


    モデルの学習では、特定のタスクに対する膨大なデータセットを使用してモデリングを行い、学習したモデルを保存します.新しいタスクがある場合は、ランダムウェイトを使用してモデルを初期化するのではなく、学習したモデルのウェイトを使用してモデルを初期化します.モデルはすでに大規模なデータセットで学習されているので、新しいタスクのために、新しいモデルを最初から学習するよりも、予め学習したモデルを使用して、新しいタスクに基づいて重みを調整します.
    BERTは,大きな言語モデル(MLM)とNSP(Next Sentence Prediction)の2つのタスクにより,巨大な語彙量に基づいて事前学習を行う.予備学習後に予備学習のBERTを保存し、新しいタスクがあれば、最初から学習するのではなく、予備学習のBERTを使用します.

    4.1. BERTの入力表示


    BERTにデータを入力する前に、3つの埋め込みレイヤに基づいて入力データを埋め込みに変換する必要がある.
  • トークン埋め込み
  • セグメント埋め込み
  • 位置埋め込み
  • 4.1.1. タグ埋め込み


    基本的にトランスフォーマーのように単語をマークします.
    A : Paris is a beautiful city
    B : I love paris
    tokens = [Paris, is , a, beautiful, city, I, love, Paris]
    その後、最初の文の先頭にのみ新しいタグ[CLS]タグを追加します.
    token = [[CLS], Paris, is , a, beautiful, city, I, love, Paris]
    各文の末尾に[SEP]というタグを追加します.
    token = [[CLS], Paris, is , a, beautiful, city, [SEP], I, love, Paris, [SEP]]
    [CLS]タグは分類操作に用いられ、[SEP]タグはすべての文の末尾を表す.

    4.1.2. セグメント埋め込み


    セグメントマッチングは、与えられた2つの文を区別するために使用されます.

    セグメント埋め込み

    4.1.3. 埋め込み位置


    トランスミッタの位置符号化を使用して、すべての単語を並列処理します.BERTは本質的にトランスミッタのエンコーダであり、BERTデータを直接入力する前に、トークン位置に関する情報を文書に提供しなければならない.

    4.1.4. 入力データ



    入力データ
    最終的に、BERTは、与えられた文をタグに変換し、タグのimbeding、セグメントimbeding、位置imbeding層にタグを置き、imbedingを得る.その後、すべてのimbeddingを合計し、BERTに入力として提供する.

    4.2. 予習ポリシー


    BERTは2つのタスクについて予習を行う.
  • マスク言語モデリング(MLM)
  • 予測記事(NSP)
  • 4.2.1言語モデリング


    言語モデリングは一般に,任意の文に単語を順番に見ることによって次の単語を予測することを学習する.
  • 自動回帰言語モデリング
  • 自動符号化言語モデリング
  • 自動回帰言語モデリングは2つの方法に分けられる.
  • 前方(左から右)予測(前方予測)
  • 後方(右から左)予測(後方予測)
  • Paris is a beautiful ___. I love Paris.
    モデルには予測空白が必要です.順方向予測を使用すると、モデルは次のようにしてすべての単語を左から右に読み込み、予測を実行します.
    Paris is a beautiful ___.
    後方予測を使用して、予測を実行するには、次のように、モデルが右から左にすべての単語を読み込みます.
    ___. I love Paris.
    自動符号化言語モデリングは前後予測を用いた.予測しながら双方向に文章を読む.
    Paris is a beautiful ___. I love Paris.

    4.2.2. マスク言語モデリング(MLM)


    マスク言語モデリングに80%〜10%〜10%の規則を適用した.文章中のランダムシールドマークの15%.
  • 15%のうち80%が[MASK]に両替された
  • token = [[CLS], Paris, is , a, beautiful, [MASK], [SEP], I, love, Paris, [SEP]]
  • 15%ランダムトークン
  • に10%トークンを置換
    token = [[CLS], Paris, is , a, beautiful, love, [SEP], I, love, Paris, [SEP]]
  • 15%のうち、残りの10%のコインは変更されません.
    token = [[CLS], Paris, is , a, beautiful, city, [SEP], I, love, Paris, [SEP]]

    マスク言語モデリング
    上の図に示すように、「city」という言葉が遮断される確率が高い.この場合,ブロックされた単語は「city」と予測される.
    マスク言語モデリングタスクは、空のタスクとも呼ばれます.

    4.2.3. 次の文を予測する(NSP)


    次の予測はBERTを学習するためのバイナリ分類テストである.BERTに2つの文を入力し、2番目の文が1番目の文の次の文であると予測します.
    文章の二重ラベルShe cooke pasta(彼女はパスタを作った)It is goodious(おいしい)isNextJackLove songwriting(ジャックは作曲が好き)Hewrite a newrite a new song(彼は新しい歌を書いた)isNextBirds in the sky(鳥が空を飛んでいる)He reading(彼は読んでいる)Not NextTurn the radio on(ラジオを開けて)She sanda new hat(彼女は新しい帽子を買った)notNext
    tokens = [[CLS], She, cooked, pasta, [SEP], It, was, delicious, [SEP]]

    予測記事
    [CLS]タグは基本的にすべてのタグの統計表現を保持しているので,文全体の表現が含まれている.したがって,他のすべてのタグの表現を無視し,[CLS]タグの表現を導入し,ソフトMax関数を用いてバイナリ分類を行う.