ichou1のブログ

主に音声認識、時々、データ分析のことを書く

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 A

BERT(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」になる。

f:id:ichou1:20190609120200p:plain

トークン数は「30,000」、token embeddingのベクトル次元は「768」

「Embedding-Dropout」、「Embedding-Norm」レイヤを通した後に、Transformerが「transformer_num」(=12)個、続く(下図は論文「Attention Is All You Need」のFigure 1と同じように色付け)

f:id:ichou1:20190610211925p:plain

Transformerの出力を2つの学習タスクに渡す。

  • Next Sentence Prediction
  • Masked Language Mode
Next Sentence Prediction

f:id:ichou1:20190610221513p:plain

Masked Language Mode

f:id:ichou1:20190610221530p:plain