こんにちはかえるるるです。
【この記事は自然言語処理アドベントカレンダー2019の 13日目の記事です。(https://qiita.com/advent-calendar/2019/nlp)】
2018年に BERT が出現して以来、今日まで BERT, XLNet, RoBERTa, ALBERT, T5 と Transformer ベースのモデルが精度の面で話題になりました。
その精度を担保しているポイントになっているのは事前学習という手法で、そこで学習したパラメータを使用すると汎用的なタスクにおいて高い精度をだせるようになっていることが知られています。
そこで今回は、BERT で使用された NextSentencePrediction と ALBERTの論文 でその代替として紹介された。 SentenceOrderPrediction (SOP) について簡単な検証を行いました。
もくじ
検証のモチベーション
検証の結果
検証の方法
感想
まとめ
1 検証のモチベーション
ALBERT の論文では BERT のような Transformer ベースのモデルにとって、NSP はタスクとして簡単であったため、そのタスクを内包した上位互換タスクと言え る SOP を事前学習タスクとして解かせた結果、一定の精度向上が得られたと紹介されていました。タスクについての概要を読んだところ頭ではなるほど納得いき ましたが、実際に自分で手を動かしてみようと思った次第です。
2 検証の結果
val acc | |
---|---|
NSP | 0.972 |
SOP | 0.964 |
微小ながら、 SOP の方が低い精度でした。
3 検証の方法
データセット
- 作成方法 Google の BERT と Google の ALBERT の create_pretraining_data.py を参考に実装しました。 本実装は、TF で動かすことを前提にコードが書かれており、PyTorch で動かせるように DataFrame の形で入手するように書き換えました。 筆者の実装
分散表現 : 日本語 BERT
model : BertForNextSentencePrediction
(本当はランダムな分散表現を使用し、スクラッチの Transformer モデルを使用するつもりでしたが、見知らぬバグを踏みまくって BertModel を継承したモデルを使用しました。)
4 感想
・BERT の事前学習データセットの作成方法がわかった
・(完装できなかったが、) BERT と Transformer の再現実装を試み、内容の理解が深まった。
・自力実装も継続して取り組んでいきたい
5 まとめ
・ 論文の主張の通り, 解きやすさは SOP > NSP だった。
・ 次は Transformer-Base のモデルを自力実装してこのタスクに取り組みたい。
以上です。ありがとうございました。