はじめに
TDU_データ科学・機械学習研究室AdventCalendar2日目
この記事では, BERTを始めとした派生モデルをいくつか紹介する.
基本的には論文の中身を紹介する形で, 実装などは紹介しないため, ぜひ論文内で紹介されているgit hub等を参考にしてほしい.
特に今回紹介するモデルは, 日本語データセットで事前学習したモデルが公開されているので, ぜひ触ってみて欲しい.
目次
- BERT
- 概要
- 提案手法, 新規性
- 実験結果
- DistilBERT
- 概要
- 提案手法, 新規性
- 実験結果
- RoBERTa
- 概要
- 提案手法, 新規性
- 実験結果
- 最後に
BERT
概要
BERTはBidirectional Encoder Representations from Transformersの略で, 2018年にarXivに投稿された.
TransformerのEncoder部分を用いたモデル構造をしており, MLM(Masked Language Modeling)とNSP(Next Sentence Prediction)という二つの目的関数を最適化する事前学習を行い, 質問応答や自然言語推論などの下流タスクにfine-tuningすることで, SOTAを達成したモデルである.
提案手法, 新規性
BERTの大きな特徴は, モデルの名前に入っている"双方向"という部分である.
MLM
この双方向な学習を可能にしているのがMLMである.
MLMでは, テキストが入力されると, そのうちの一部をマスクトークンに置換し, そのマスクトークンが元々何であったかを予測するように学習する. いわゆる穴埋め問題を解いている.
MLMの具体的なMasking手法は, 入力文のうち15%を[MASK]トークンに置換する. さらに, [MASK]トークンに置換する80%を実際に[MASK]トークンに置換し, 10%をランダムな単語トークンに置換. 残り10%をそのままにするような処理を行う.
このように単純な置換ではない手法の理由は, 事前学習とfine-tuningとの間に[MASK]トークンの有無といった違いが存在し, これが悪影響を及ぼすからである.
TransformerやRNNなど既存のモデルでは, 文章を左から右に読んでいくことが一般的であった. BERTの直近に発表されたOpen AIのGPT(Generation pretrained Transformer)も左から右に文章を理解する形の言語モデルである.
穴埋め問題を解く際に, モデルは左から右という読み方を行わない. これによって, 双方向性を実現している.
maskingの例を下に示す(原著論文より引用).
#### NSP
次に, NSPを紹介する.これは読んで字のごとく文章が与えられた時, 次に来る文章が何かを予測する手法である.
まず, ある文章が与えられる.次に, 正しく続く文章かそうでない文章をランダムで結合する.結合するときは特殊トークン([SEP])を間に挿入する. モデルは, [SEP]で区切られた前文に対して後文が後続の文であるかを予測する.
具体的な処理の流れとしては, 1つの文章が用意されたときに, 50%でランダムな文章を結合し,50%で後続の文章が結合される.
NSPの例を以下に示す(原著論文より引用).
BERTはMLMとNSPの二つの損失関数を最小化するように学習を行う.
実験結果
実験にはGLUEを用いて評価し, そのうちの大部分でSOTAを達成した.
GLUEは自然言語処理における標準的なベンチマークで, 複数の自然言語処理のタスクから構成されている.
GLUEに含まれているタスクは全部で12種類.
- COLA (The Corpus of Linguistic Acceptability)
- SST-2 (The Stanford Sentiment Treebank)
- MRPC (Microsoft Research Paraphrase Corpus)
- STS-B (Semantic Textual Similarity Benchmark)
- QQP (Quora Question Pairs)
- MNLI-m (MultiNLI Matched), MNLI-mm (MultiNLI Mismatched)
- SQuAD (Stanford Question Answering Dataset)
- QNLI (Question NLI)
- RTE (Recognizing Textual Entailment)
- WNLI (Winograd NLI)
BERTはbaseモデルと, パラメータ数を増やしたlargeモデルが論文で紹介されているが, baseモデルは上記タスクうちSQuAD以外のタスクでSOTA.largeモデルはSQuAD含めすべてのタスクでSOTAを達成した. さらにすごいのは, baseもlargeも既存のベストスコアを大きく更新したうえでSOTAを達成しているところ.
実験結果を以下に示す(原著論文より引用).
引用した結果には, GLUEタスクのすべての結果が載っていないが, 論文内ではきちんと示されている.
まとめ
BERTは, 2つの損失関数を用いて事前学習(MLMとNSP)を行い, 下流のタスクでfine-tuningすることで, GLUEベンチマークを大きく更新したモデル.
自然言語処理におけるブレイクスルーともいわれるほどで, 今でも多くのBERT派生モデルが提案されている.
DistilBERT
概要
本論文は, 昨今のモデルサイズが増加していくことを受けて, 下流タスクでの性能を保持した状態で, モデルサイズを小さくする工夫を提案した論文である.
具体的には, Knowledge Distillationという手法を用いて, モデルを学習させる. これにより, BERTモデルの推論能力を97%保持した状態で, モデルサイズを40%削減することが出来た. また, 推論時の速度においては, 60%向上することが出来た.
新規性, 提案手法
Knowledge Distillation
Knowledge Distillationはベースとなるモデル(教師モデル)の予測を教師信号として, モデル(生徒モデル)を学習させることで, モデルサイズを小さくする手法である. ベースとなるモデルは, より大きなサイズのモデルやアンサンブルモデルを用いる.
損失関数
提案手法では, Knowledge Distillationを用いたことに加え, 3つの損失関数を用いた学習方法を提案している.
- 1つ目
- 1つ目の損失関数は, Knowledge Distillationに関する損失関数である.
- 教師信号をベースモデルの予測確率として, モデルの予測確率との積和の形をとる
- 2つ目
- 2つ目の損失関数は, オリジナルのBERTでも使用されていたMasked Language Modelingである.
- 3つ目
- 3つ目の損失関数は, cosine embedding損失関数である.
- この関数は, 教師モデルと生徒モデルの隠れ状態ベクトルを似た形にする傾向がある関数である.
実験結果
実験では, 教師モデルにRoBERTa(Robustly optimized BERT approach)を用いた. また, 学習方法においてもRoBERTaの論文内で検討されている方法で実施した. 詳しくは後述のRoBERTaに関するまとめを読んで欲しい.
論文内では, GLUEタスクを用いて実験を行い, GLUEの論文でベースラインとして用いられていたELMoをベースラインとして使用した.
実験の結果, ベースラインと比較して常に良い結果か同等の精度を達成し, BERTと比較しても競合力のある精度を達成することが出来た. 具体的には, BERTの97%ほどに迫った精度でかつモデルサイズは40%削減した.
その結果を示す表を下記に示す(原著論文より引用).
他の実験では, Knowledge Distillationを段階的に適応できるかの実験を行った. 実験の手法としては, 事前学習の段階とfine-tuningの段階と2段階で実施する方法である. タスクとして文書分類タスク(IMDb), 質問応答タスク(SQuAD)を用いた.
結果として, 2段階でKnowledge Distillationを実施すると親モデルにより近い精度になることがわかった.
結果を書きに示す(原著論文より引用).
Ablation Studyでは, 3つの損失関数が本当に有効であるかどうかや, 生徒モデルの初期化に対する影響を検証した.
結果として, MLMが無くなった場合の影響は小さいが, distillationの損失関数に関しては精度に大きく寄与していることがわかった.
ablation studyの結果を下記に示す(原著論文より引用).
まとめ
BERTのdistillationを行ったDistilBERT.
大きな特徴は, Knowledge Distillationと, 3つの損失関数である.
BERTをdistillationすることで, 97%の性能維持を行いつつ, モデルサイズは40%小さくすることが出来た.
RoBERTa
概要
RoBERTaはBERTのハイパーパラメータ, 事前学習手法, 埋め込み手法を分析することで, BERTと同じモデルサイズで下流タスクに対する精度を向上させたモデル.
RoBERTaにおいてもGLUEタスクでモデルを評価しており, BERTの結果を上回るとともにSOTAもいくつかのタスクで達成した.
新規性, 提案手法
この論文では, BERTのハイパーパラメータ, 事前学習手法, 埋め込み手法を分析し改良することを行っている.
事前学習手法
BERTで行われていた事前学習手法は, MLMとNSPである.
初めにMLMについて行ったことを説明する.
BERTでは, 入力文をランダムで[MASK]トークンに置換し, 元の文を予測することを行っていた. このとき, モデルに与えられるマスクされる箇所は初めに行ってあとは使いまわしする形になる. この論文では, BERTでのマスク手法は毎回同じであることからStatic Maskingと呼び, Dynamic Maskingを提案している.
Dynamic Maskingは, モデルにテキストを入力するごとにMaskingを行う手法. つまり, Static Maskingでは学習の1epoch目も2epoch目も同じMaskingだったのに対して, Dynamic Maskingでは, 毎回異なるMaskingをすることになる.
Dynamic Maskingは学習回数が多かったり学習データが大きい場合に, 重要であると述べられていた.
次にNSPについて行ったことを紹介する.
結論から言うと, 「NSPは性能向上にあまり寄与しない」ということになる.
この論文では, 4種類の入力文作成方法とNSPを用いて比較実験を行い, 上記の結論に至った. 実験で行った4種類の手法を以下に示す.
- SEGMENT-PAIR + NSP
- 複数の文章から構成されるSEGMENTのペアで入力文を作成する手法. 複数の文章から構成されるが, トークン長は最大で512.
- SENTENCE-PAIR + NSP
- 2つの文章によって入力文を作成する手法. 2つの文章から構成されるため, トークン長が512に満たない. したがって, バッチサイズを増やすことで対応した.
- FULL-SENTENCES
- 1つか複数の文書から文章を抽出し, 入力を構成する. 文章を抽出する際, 文書をまたぐ場合がある. その場合は, セパレーショントークンを挿入する. この手法ではNSP損失を計算しない.
- DOC-SENTENCES
- 基本構成はFULL-SENTENCESと同じだが, 1つの文書から文章を抽出する点が異なる. この場合, トークン長が512にならない場合があるが, 動的にバッチサイズを変更すことで対応した.
上記の手法において, バッチサイズを変更する理由は, 各手法間で扱う合計トークン長が等しくするためである.
Text Encoding
この論文では, BPEをベースにしたText Encoding手法を用いた.
BPEでは, 単語を文字レベルに分割し, 出現頻度が高いものを結合していくアルゴリズムに従って, 語彙を作成する.
RoBERTaでは, このBPEを変更した方法でText Encodingを行う. 具体的には, BERTで用いられたBPEが文字単位での分割だったのに対して, RoBERTaはバイト単位で行う.
手順としては, 入力を文字単位に変換する. その後, バイトに変換を行い変換したバイトを用いてBPEのアルゴリズムを用いる.
結果としては, 文字単位よりもバイト単位の方が性能が低下したが, 一貫した実験を行うために論文ではこの手法を用いた.
ハイパーパラメータ
この論文では, 複数あるハイパーパラメータのうちbatch sizeに着目して調整を行った.
実験では, batch sizeを256, 2K, 8Kと変化させ, 学習するデータ数が同じになるように学習回数も変更した.
実験結果
上記の点に加え, データ数などにも着目し実験を行った. 実験に使用したタスクはGLUEタスク.
まずMaskingに関する実験を紹介する.
GLUEタスクのうち, SQuAD2.0, MNLI-m, SST-2を用いた.
Static MaskingとDynamic Maskingを比較した結果Dynamic Maskingの方が良い精度が出ることがわかった.
結果を下記に示す(原著論文より引用).
次にNSPに関する実験を紹介する.
BERT, XLNetの論文にある結果と, 著者らが実装したモデルにNSPを使うかどうかなどで実験した結果を比較した. 用いたタスクは, SQuAD1.1/2.0, MNLI-m, SST-, RACEを用いた.
結果として, NSP損失を用いない, FULL-SENTENCESやDOC-SNETENCESが一番高い精度となった. 最も高かったのは, DOC-SENTENCESであったが, DOC-SENTECESはbatch sizeが動的に変化してしまう. 既存研究との比較を行いやすくするために, 移行の実験ではFULL-SENTENCESを用いて実験を行った.
結果を下記に示す(原著論文より引用).
最後にbatch sizeに関する実験を紹介する.
MNLI-m, SST-2を用いて, batch size, 学習回数, 学習率を変化させたときのperplexityを比較した. 結果として, batch sizeを大きくした場合, 性能が良くなることがわかった.
結果を下記に示す(原著論文より引用).
他の実験として, データ数を増やして下流タスクを解く実験を行った.
この実験では, SQuAD1.1/2.0, MNLI-m, SST-2を用いた.
実験の結果, 学習データを増やし, 学習回数も増加させた場合が最も性能が良くなった.
まとめ
この論文では, batch size, text encoding, 事前学習手法を分析することで, モデルの性能を上げるにはどのようなことをすればよいかを実験によって調査した.
分析に従ってBERTを改良したRoBERTaは, GLUEタスクにおいて複数のSOTAを達成した.
最後に
この記事では, BERT派生モデルについて紹介をした.
BERTは自然言語処理のブレイクスルーであり, GLUEタスクのSOTAを大幅に更新した.
DistilBERTはBERTのパラメータ数を削減したモデルで, パラメータ数を削減したがモデルの性能は97%までになった. また推論速度も向上した.
RoBERTaはBERTのモデル構造において, どのような要素が性能向上に寄与しているかをbatch size, 事前学習, text encodingなどの観点から分析を行った. 結果として, NSPはあまり性能向上に寄与せず, MLMの工夫やbatch sizeの増加によって, BERTと同じモデルサイズでGLUEタスクのSOTAを複数達成した.
はじめてQiitaの記事を書くので, いろいろと良くない点があるかとは思うが, これで完了とせず, 適宜修正をしていきたい. また, 論文紹介の内容に関してもまだまだ改善の余地があったり, 誤った理解をしている点もあるかもしれないので, 引き続き勉強していきたい.