Kerasメモ(BERTその1)
BERT(Bidirectional Encoder Representations from Transformers)を試してみる。
論文には2種類のモデルが掲載されている。
the number of layers (i.e., Transformer blocks) as L
the hidden size as H
the number of self-attention heads as ABERT(BASE)
(L=12, H=768, A=12, Total Parameters=110M)BERT(LARGE)
(L=24, H=1024, A=16, Total Parameters=340M)
Keras実装が公開されているので、これを使ってみる。
先述の「official pre-trained model」を使う場合は以下のとおり(サンプルソース)
BERT(BASE)
Total params: 109,705,010
from keras_bert import get_model model = get_model( token_num=30000, pos_num=512, transformer_num=12, head_num=12, embed_dim=768, feed_forward_dim=768 * 4, )
BERT(LARGE)
Total params: 335,691,058
from keras_bert import get_model model = get_model( token_num=30000, pos_num=512, transformer_num=24, head_num=16, embed_dim=1024, feed_forward_dim=1024 * 4, )
BASEを対象に見てみる。
入力長(seq_len: Maximum length of the input sequence)については、省略時のデフォルトは「512」
学習時は、2値(IsNext / NotNext)の「Next Sentence Prediction」タスクを解くので、2つのSentenceを与える。
Segment情報に関しては、CLS(beginning of the first sentence)から最初のSEP(end of each sentence)までが「0」、それ以降は「1」になる。
トークン数は「30,000」、token embeddingのベクトル次元は「768」
「Embedding-Dropout」、「Embedding-Norm」レイヤを通した後に、Transformerが「transformer_num」(=12)個、続く(下図は論文「Attention Is All You Need」のFigure 1と同じように色付け)
Transformerの出力を2つの学習タスクに渡す。
- Next Sentence Prediction
- Masked Language Mode
Next Sentence Prediction
Masked Language Mode