New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2018: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding #199

Open
jojonki opened this Issue Jan 31, 2019 · 0 comments

Comments

Projects
None yet
1 participant
@jojonki
Copy link
Owner

jojonki commented Jan 31, 2019

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
13 pages
https://arxiv.org/abs/1810.04805
コード:https://github.com/google-research/bert

概要

BERT (Bidirectional Encoder Representations from Transformers)は,双方向Transformerで学習した言語モデルを事前学習したもの.事前学習したBERTに対して,1レイヤを追加するだけで様々な11個のNLPタスクでSOTA(GLUE,MultiNLI,SQuAD等).

イントロ

言語モデルの事前学習は様々なNLPタスクで活躍している.文レベル(NLIとか),単語レベル(NER,SQuADとか)とか.

事前学習した言語モデルのタスクへの適用方法は主に2つ.

  1. feature-based
    タスク固有のネットワークに,事前学習済み表現を追加特徴量として利用する(例:ELMo)

  2. fine-tuning
    最小限のタスク固有のパラメタを利用し,事前学習済みパラメタをfine-tuneする(例:OpenAI GPT)

上記2つのアプローチでは,事前学習中に共通の目的関数を共有しており,言語表現は一方向の言語モデルで獲得される.
これらのテクニックは事前学習表現の獲得に以下の問題がある.

  • (特にfine-tuningアプローチで),一方向で学習すること.OpenAI GPTでは,左ー>右構造を採用しており,すべてのトークンはすでに登場したトークン(左側)のみを利用してアテンションされる.例えばこのような方法では,SQuADのようなトークンレベルタスクでは双方向のコンテキストが重要のため,性能が大きく低下してしまう

BERTではこの問題の対策として,

  • Masked Language Model (MLM)を採用.入力文からランダムにトークンをマスクし,そのマスクしたトークンを予測するように学習する.MLMは双方向のコンテキストを,双方向Transformerで事前学習できる.
  • Next Sentence Predictionによおり,テキストペアの事前学習を獲得できる

本論の貢献ポイントは,

  • 双方向コンテキストを同時に学習できる
  • タスク固有のアーキテクチャをイチイチ考える必要がなく,BERT後段に1レイヤ追加してfine-tuningするだけでよい
  • 多くのNLPタスクでSOTA.コードも公開.

関連研究

  • feature-based
    word2vecのような単語埋め込み,文埋め込み,パラグラフ埋め込み,など.
    ELMoは,言語モデルからコンテキストセンシティブな情報を抽出した単語埋め込みスタイルで,多くのSQuADなどでSOTAを獲得した

  • fine-tuning
    OpenAI GPTがGLUEベンチから多くの文レベルのタスクでSOTA

  • Transfer Learning from Supervised Data
    巨大な教師ありコーパスからのtransfer learningも有効,NLIとか翻訳.Visionエリアでは事前学習済みのモデルのtransferは重要というのは言われていることであり,ImageNetなどが多く利用されている

BERT

モデルアーキテクチャ

Transformerを使用.BERT_{BASE}とBERT_{LARGE}を用意.BaseはOpenAI GPTと同じモデルサイズ.
screen shot 2019-02-02 at 1 54 48 pm

入力表現

  • 1つのトークン列として表現.入力トークンを,トークン埋め込み,セグメント埋め込み,ポジション埋め込みの3レイヤで表現し,足し合わせることでトークン表現を獲得.トークン列の先頭には[CLS],文ペアの場合.1つ目の文の最後に[SEP]という特別なシンボルを入れる.

screen shot 2019-02-02 at 2 02 07 pm

事前学習タスク

2つの教師なし予測タスクで事前学習済みBERTを獲得する

  1. Masked LM (MLM)
    入力文のトークンからランダムにトークンを選び[MASK]シンボルに置き換え(実験では15%),そのマスクした単語を予測するように鍛える.ただしfine-tuning中は[MASK]は登場しないため,pre-training/fine-tuning間にミスマッチが存在するため,必ずしも[MASK]には置き換えないことでこの問題の影響を減らす.具体的には下記のようなことを行う.
  • 選ばれた単語は,80%の確率で[MASK]シンボルに置き換え(全データに対する12% (=0.15* 0.8))
  • 10%の確率で,ランダムに単語を置き換え(全データに対する1.5% (=0.15* 0.1))
  • 10%の確率で,何もせずそのままにしておく(全データに対する1.5% (=0.15* 0.1))

デメリットとしては,各バッチで全データの15%しか予測しないために,多くの学習ステップ数が必要になる.片方向モデルよりも学習に時間がかかるが,性能は十分あがる

  1. Next Sentence Prediction(次文予測)
    NLIやQAでは,文ペアの関係が重要である.そこで.本タスクを採用.2つの文,A,Bを与えて連続するかどうかを答える.タスクでは50%が実際に連続する文で,もう50%はコーパスから得られた適当な文.本実験で事前学習モデルでは97-98%の正解率を獲得.シンプルだが,QA, NLIで非常に効果があった

事前学習の手続き

既存の言語モデル事前学習の方法に則る.今回は,BooksCorpus (800M words),英語Wikipedia(2,500M words).ここからMLMと次文予測データを作る.BASEとLARGEの学習は4日かかった.// 細かい学習パラメタは論文参照

fine-tuning手続き

文レベルの分類タスクでは,BERTの最終隠れ状態(Transformerの出力)を,後段タスクへの入力として利用する.例えばAffineレイヤを追加して,そのレイヤとBERTを同時にタスクの正解ラベルに合わせて同時にfine-tuningする.詳しくは第4章で後述.
ハイパーパラメタは事前学習中とだいたい同じ(バッチサイズ,学習率,エポック数は除く).// ここの学習パラメタも3.5章参照

BERTとOpenAI GPTの比較

OpenAI GPTはTransformerによる言語モデルであり,BERTと近いが,片方向・双方向の以外の違いもある.

  • GPTはBooksCorpusだけで学習
  • GPTは[SEP], [CLS]をfine-tuning時のみに利用
  • GPTは32K単語のバッチを1Mステップで,BERTは128K単語のバッチを1Mステップで
  • GPTの学習率は常に5e-5,BERTはタスクに合わせてdev setの結果を見て変更

5章でablationテストによる,できるだけ公平な比較をした

実験

GLUE(General Language Understanding Evaluation,Wang et al., 2018)

評価にはGLUEを利用.
MNLI,QOP(Quora Question Pairs,バイナリ分類),QNLI(Question NLI,バイナリ分類),SST-2(Stanford Sentiment Treebank,バイナリ分類),CoLA(Corpus of Linguistic Acceptability,バイナリ分類),STS-B(Semantic Textual Similarity Benchmark),MRPC(Microsoft Research Paraphrase Corpus),RTE(Recognizing Textual Entailment),// WNLI(Winograd NLI)はデータに問題があり取り除いている

各タスクに合わせた最終レイヤ.追加した最終レイヤは,OpenAI GPTと同じである.
screen shot 2019-02-02 at 4 53 07 pm

結果はTable 1.BASEとLARGEの両モデルで全タスクを4.4%-6.7%ほど上回っている.LARGEがBASEをすべて上回っている.面白いことに少量データにおいてもLARGEが勝つ(これを5.2章)
screen shot 2019-02-02 at 5 18 28 pm

SQuAD v1.1

SQuADはWikipediaのパラグラフを抽出し,それに関する質問と答えが与えられるタスク.その答えは,パラグラフのスパン(5番目の単語から7番目の単語といったように)の形式になっている.ただそれでもBERTで簡単にこの形式にも対応できる.まず質問とパラグラフをこの順でつなげて1つのシーケンスにする.質問を埋め込みA,パラグラフを埋め込みBでエンコード.パラグラフのデコードに相当するところで,スパンの開始・終了の検知のために,S(H次元),E(H次元)の2つのベクトルを用意し,下式でfine-tuningするだけでよい.
screen shot 2019-02-03 at 3 05 17 pm

SQuADの結果は下記.学習時にTrivia QAという他のQAデータセットもジョイント学習したもの,及びアンサンブル学習したものも派生として追加.ジョイントやアンサンブルをしなくてもかなり高いスコア,最も強いモデルではSOTA.
screen shot 2019-02-03 at 3 00 26 pm

NER (Named Entity Recognition)

CoNLL 2003 NERデータセット利用.200kの学習単語数.アノテーションは,Person, Organizaiton, Location, Miscellaneous, Otherの5つ.シングル文の入力で各トークンに対して予測する形.

結果はTable 3.LARGEモデルはSOTA.
screen shot 2019-02-03 at 3 12 44 pm

SWAG (Situations With Adversarial Generations)

113kの文ペア.ビデオキャプション(テキスト)に対して,文が4つ与えられ,その中から常識的に妥当なものを選ぶ.キャプション文を埋め込みA,各文はそれぞれ別々に埋め込みBでエンコードされ,それぞれAとconcat(つまり,1つのSWAG例から4つのサンプルができるはず).それぞれをエンコードして得られたベクトルCi(i=1,..4)とベクトルVを用意してVをfine-tuningする
screen shot 2019-02-03 at 3 22 30 pm

結果は下記.LARGEモデルがまたもやSOTA
screen shot 2019-02-03 at 3 16 32 pm

Ablationスタディ

事前学習の効果の確認

masked LMと次文予測の2つの事前学習の重要性を探るため,いくつか派生を用意.

  1. No NSP: masked LMは行うが,次文予測は行わない
  2. LTR & No NSP: Left-to-Rightの言語モデル.マスクはないので,各トークンをすべて予測するように学習(OpenAI GPTと比較).

結果はTable 5.

  • No NSPでは,QNLI, MNLI, SQuADが悪化.
  • LTR & No NSP,全タスクで悪化.特にMRPC and SQuADで大きく悪化.右方向のコンテキストがわからないためと思われる.
  • フェアな比較のため,BiLSTMレイヤも追加して実験.SQuADは大きく改善するが,他タスクでは悪化して回復していない.

screen shot 2019-02-03 at 3 25 47 pm

LTR, RTLモデルをELMoのように学習する方法も考えられるが,
a. 2倍のコスト
b. QAタスクでは非直感的.質問に対する答えを条件づけできない.
c. 双方向モデルほどパラフルではない,双方向モデルでは左,右のコンテキストから選択できるから

モデルサイズの効果の確認

モデルサイズをいくつか変えて(L: レイヤー数,H: 隠れ層のサイズ.A: アテンションヘッドの数)効果を確認.
Table 6にGLUEタスクの結果を示す.サイズを大きくしたほうが性能が多い.小規模データセットにおいても大規模モデルが大きく効果を上げているのは驚き
screen shot 2019-02-03 at 3 40 42 pm

学習ステップ数の効果の確認

MNLIデータにおいて,事前学習のステップ数を変えて正解率の変化を確認.

  • Q: 多くの事前学習ステップ数は必要か? A: YES.相関がある感じ
  • Q: MLMは15%しか単語をカバーできないので,LTRモデルよりもカバレッジが遅い? A: LTRよりも遅いが,LTRモデルを結果的には超えることができる

screen shot 2019-02-03 at 3 44 16 pm

BERTのfeature-basedアプローチ

feature-basedとして使っても利点はある.NLPタスクによっては,タスク固有のアーキテクチャが必要かもしれないし,featureとして利用すれば高スペックマシンでなくてもBERTを使える可能性がある.

ELMoのようにCoNLLのNERタスクでBERTを追加特徴量として利用した.色々なレイヤーに追加してみたが,上位4レイヤに追加する場合がもっとも性能が良かった.これによりfine-tuningだけでなく,feature-basedとしてもBERTは役に立つということがわかる
screen shot 2019-02-03 at 3 50 10 pm

結論

双方向のコンテキストを獲得した言語モデルを利用したことにより,メジャーなNLPタスクでSOTAを達成.

コメント

  • タスク毎にネットワーク構造をレゴブロックのように組み合わせて,背くらべをする時代が終焉.
  • VisionエリアのImageNetのように,今後のNLPタスクにおいては,超強力な事前学習済み特徴量を使えば,そこそこの性能を達成できる時代が来てしまった.

参考

@jojonki jojonki changed the title 🚧 2018: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 2018: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Feb 3, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment