DEEP LEARNING JP
[DL Papers]
http://deeplearning.jp/
BERT: Pre-training of Deep Bidirectional Transformers for
Language Understanding
Makoto Kawano, Keio University
書誌情報
●タイトル:BERT: Pre-training of Deep Bidirectional Transformers
for Language Understanding
●著者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina
Toutanova
●投稿日:2018/10/11
●選定理由:Twitterでバズってた
‣ NLP界隈のImageNet Pre-trainedモデル(VGGやResNet)的存在になるか
もらしい
‣ Transformerって良くわかってない
2
アウトライン
1.背景
1. Feature-basedアプローチ
2. Fine-tuningアプローチ
2.BERT
1. 入力表現について
2. 事前学習タスク
3.実験
1. 11種類のNLPタスク
2. 提案手法の有効性
3
アウトライン
1.背景
1. Feature-basedアプローチ
2. Fine-tuningアプローチ
2.BERT
1. 入力表現について
2. 事前学習タスク
3.実験
1. 11種類のNLPタスク
2. 提案手法の有効性
4
背景
●様々な自然言語処理タスクにおいて,事前学習は有効
‣ 文レベルのタスク:文同士の関係性が大事
• 自然言語推論
• 言い換え
‣ トークンレベル:モデルはトークンレベルで良い出力が求められる
• 名付けられたエンティティ認識
• Q&A
●事前学習には二種類のアプローチがある
5
Feature-basedアプローチ
●様々なNLPタスクの素性として利用される
‣ N-gramモデル[Brown et al., 1992]やWord2Vec[Mikolov et al., 2013]
• 文や段落レベルの分散表現に拡張されたものある
‣ タスクに合わせて学習させると性能向上[Turian et al., 2010]
●最近では,ELMo[Peters et al., 2017, 2018]が話題に
‣ Context-Sensitiveな素性を獲得
‣ 複数のNLPタスクでSOTA
• QA,極性分類,エンティティ認識
‣ 既存の素性にConcatすると精度UP
6
ELMo [Peters et al., 2017, 2018]
●BiLSTMをL層積んで,各隠れ層を加重平均する
●獲得したELMoをNLPタスクの入力および隠れ層に連結するだけ
7
or
Transformer[Ł.Kaiser et al., arXiv,2017]
●有名なXXX is All You Needの先駆者(今回はAttention)
●RNN構造ではなく,Attention機構のみで構成
●Encoder-Decoderで構成されている
‣ 左側:Transformer-Encoder
‣ 右側:Transformer-Decoder
●Transformerって結局?
‣ Multi-Head AttentionとPosition-wise FFNの集合体
(より詳細は@_Ryobotさんのブログhttp://deeplearning.hatenablog.com/entry/transformerでお願いします)
8
Fine-tuningアプローチ
●言語モデルの目的関数で事前学習する
‣ そのあと教師ありタスクでfine-tuningする
‣ 少ないパラメータで学習することが可能(らしい,,,)
●最近では,OpenAI GPT[Radford et al. 2018]
‣ GLUEスコアでSOTA
‣ TransformerのDecoderだけを利用[Liu et al., 2018]
• 単方向のモデル
9
アウトライン
1.背景
1. Feature-basedアプローチ
2. Fine-tuningアプローチ
2.BERT
1. 入力表現について
2. 事前学習タスク
3.実験
1. 11種類のNLPタスク
2. 提案手法の有効性
10
BERT
●双方向Transformer
‣ 実装:tensor2tensor
‣ リークを防ぐマスクがない
‣ 二種類のモデルを用意
• BERTBASE:GPTと比較用
• BERTLARGE:Googleの本気用
●ちなみに
‣ 双方向Transformer=Encoder
‣ 単方向Transformer=Decoder(生成に使えるかららしい)
系列長=バッチと同じ扱いらしい
→一つの系列=系列長x特徴量
11
入力表現:一つの文章or文章のペア(QAなど)
●三種類の埋め込みの合計(sum≠concat)
‣ トークン埋め込み:30000種類のWordPiece埋め込み
• 分割されたところは「##」で表現
‣ 単語位置埋め込み:系列長1〜512個の表現
• 位置0には,[CLS]トークンを追加→系列分類問題ではこの埋め込みを利用
‣ 文区別埋め込み:QAなどの場合の話
• 一文の時はAのみ
12
タスク1:Masked Language Model
●双方向モデルは,left-to-rightモデルや双方向の連結より強力
‣ 一般的な条件付き言語モデルでは学習できない
• 特定の単語予想:p(xn | x1, x2, …, xn-1)
• 双方向だと,間接的に複数層の文脈から「自身」をみてしまう
‣ 次の単語ではなく,ランダムで抜かれた単語を予測するモデルにする
• Denoising Autoencoderに似ているが,全体を予測するわけではない
• ただし,二つの欠点が生じてしまう
13
タスク1:Masked Language Model
●pre-traininig時とfine-tuning時で違いが生じてしまう
‣ Fine-tuningの時に[MASK]トークンは見ない
‣ 常に置換するのではなく,系列のうち15%の単語を置き換える
• 例:my dog is hairy -> hairyが選択される
• 80%:[MASK]トークンに置換
• my dog is hairy -> my dog is [MASK]
• 10%:ランダムな別の単語に置換
• my dog is hairy -> my dog is apple
• 10%:置き換えない(モデルに実際に観測される言葉表現に偏らせる)
• my dog is hairy -> my dog is hairy
14
タスク1:Masked Language Model
●15%しか予測させないため,学習に時間がかかってしまう
‣ 実験で,MLMが全ての単語を予測するleft-to-rightモデルより時間が
かかることを示す
‣ 「時間はかかるけど,それ以上に精度改善するからいいとする」
→🤔🤔🤔🤔🤔
15
タスク2:Next Sentence Prediction
●QAや自然言語推論(NLI):2つの文章の関係性理解が大事
‣ 言語モデルでは,捉えきれない
‣ 二値のnext sentence predictionタスクを解かせる
• 文章AとBが与えられた時に,50%で別のBに置き換える
‣ 解かせると,97%-98%の精度
• QAとNLIで非常に有効であることを実験では示す
16
Pre-training手続き
● データセット:BooksCorpus(800M)+English Wikipedia(2500M)
‣ Billion Word Benchmarkのような文より,ドキュメントレベルが大事
● 系列長が合計512以下になるように2つの文章をサンプリング
‣ Next sentence predictionのため,AとBの組み合わせは50%で変わる
‣ MLMのためWordPieceトークンに分けられたあと,マスクされる
● バッチサイズ:256(=256文x512系列長=128000単語/バッチ)
‣ 1,000,000ステップ=33億の単語を40エポック学習
● Adam:LR=1e-4, L2weight_decay=0.01
● Dropout: 0.1
● Gelu活性化関数を利用
BERTBASE:4台x4TPUx4日x$4.5
BERTLARGE:16台x4TPUx4日x$4.5
🤔🤔🤔
17
Fine-tuning手続き
●系列レベルの分類問題
‣ 固定長の分散表現C∈RHを獲得するため,最初の[CLS]トークンを使う
‣ 新しく追加する層は分類層W∈RKxH+ソフトマックス層のみ
‣ BERTも一緒に学習させる
●スパンorトークンレベルの分類問題
‣ 各タスクの仕様に合わせて学習させる
●バッチサイズ,学習率,エポック数のみ変更
‣ ドロップアウト:常に0.1
‣ 10万以上のラベル付きデータセットの場合はそこまで気にしなくていい
‣ Fine-tuningは高速でできるため,パラメータ探索すべき
18
Fine-tuning手続き
19
アウトライン
1.背景
1. Feature-basedアプローチ
2. Fine-tuningアプローチ
2.BERT
1. 入力表現について
2. 事前学習タスク
3.実験
1. 11種類のNLPタスク
2. 提案手法の有効性
20
実験:8個のNLPベンチマークタスク
●General Language Understainding Evaluationベンチマーク
‣ 訓練/検証/テストに分割済
‣ 公平な評価が可能
• テストはラベルなしで公開
@_Ryobotさんのツイート
https://twitter.com/_Ryobot/status/1050925881894400000
から拝借(非常に助かりました) 21
実験:QA
●Fine-tuning時
‣ 答えのStart/Endベクトルを学習
22
実験:Named Entity Recognition
●入力された単語のラベルを当てる
‣ Person, Organization, Location, Miscellaneous, Other(割り当てなし)
‣ 5クラス分類問題用の層を追加するのみ
23
効果検証:事前学習タスク
●No NSP:MLMを学習させるだけ
●LTR&No NSP:MLMもなし=left-to-right言語モデルで学習
‣ Pre-training時:マスクなし, fine-tuning時:左からの情報のみ
• 別のパターンも試したけど,精度下がりすぎて意味がなかった
‣ OpenAI GPTと比較することが可能
• データセットの違い:GPTはBooksCorpusのみ
• 入力表現の違い:GPTは[CLS][SEP]はfine-tuningのみ&文区別表現なし
• Fine-tuning戦略:バッチに含まれる単語やパラメータ探索なし
24
効果検証:事前学習タスク
●LTRはMLMに比べて全然ダメ
‣ QAは,右側の文脈も大事であることがわかる
‣ MRPCは,原因わからないが何度やってもダメだった
‣ BiLSTM追加したらQAは改善したが,それ以外はだめ
●LTR+RTLについて
‣ コストが倍
‣ QAでRTLはおかしい
‣ 双方向の方が左と右の文脈を
選択することができる
25
効果検証:モデルのサイズ
●データセットが小さくても大きい方が精度高い
‣ 翻訳や言語モデルなどの巨大なデータセットを使うタスクでは当たり前
26
効果検証:学習回数
●Q:BERTの学習に,128,000単語/バッチx1,000,000回必要か?
‣ A:Yes.50万回より100万回の方が1%も精度高い🤔
●Q:LTRよりもMLMの方が収束まで時間かかる?
‣ A:Yes.時間はかかるけど,それ以上に精度改善するからいい
→🤔🤔🤔🤔🤔
27
効果検証:feature-basedアプローチ
●Feature-basedアプローチも有効なのではないか?
‣ 全てのNLPタスクをTransformer Encoderでは解けない
‣ 計算量コストも,一度計算すれば完了だから使いやすい
●Named Entity RecognitionタスクでPre-training
‣ BERTのパラメータは固定して,2層の768-BiLSTM+分類層追加
●結果的には最後4つのTransformerの出力を連結
‣ BERTは,feature-based,fine-tuningアプローチ
どっちでも行けることがわかる
28
まとめ
●双方向言語モデルが大事
●BERTを使えば,タスクSpecificなアーキテクチャいらない
●10月末にPre-trainedモデルが公開されるのでDLしましょう
‣ そして様々なNLPタスクにおけるSOTA戦争を!
●次のキャラは何がくる?
29

[DL輪読会]BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding