BERTメモ(日本語pretrainedモデル)
BERTのPre-trainedモデルに関するメモ。
本家。日本語だけでなく、104言語に対応。
GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT
multi_cased_L-12_H-768_A-12.zip
BERT-Base, Multilingual Cased (New, recommended): 104 languages, 12-layer, 768-hidden, 12-heads, 110M parameters
vocab.txt
[PAD] [unused1] [unused2] (snip) [unused99] [UNK] [CLS] [SEP] [MASK] <S> <T> ! " (snip) 〜 〝 ぁ あ ぃ い (snip) である League (snip) ##ec može であった století tidligere (snip)
全部で「119,547」行
上から順に辞書として登録した場合、特殊TokenのIndexは以下のとおり。
[PAD] : 0 [UNK] : 101 [CLS] : 102 [SEP] : 103 [MASK] : 104
「keras-bert」での特殊Tokenの定義
def get_base_dict(): """Get basic dictionary containing special tokens.""" return { TOKEN_PAD: 0, TOKEN_UNK: 1, TOKEN_CLS: 2, TOKEN_SEP: 3, TOKEN_MASK: 4, }
公開されている日本語特化モデルがどう作られているか見てみる。
形態素解析(Juman)
BERT日本語Pretrainedモデル - KUROHASHI-KAWAHARA LAB
入力テキスト: 日本語Wikipedia全て (約1,800万文, 半角を全角に正規化)
入力テキストにJuman++ で形態素解析を行い、さらにBPEを適用しsubwordに分割
語彙数: 32,000 (形態素、subwordを含む)
max_seq_length: 128
vocab.txt
[PAD] [UNK] [CLS] [SEP] [MASK] の 、 。 に は (snip) かんする ##キングス フィンガー 閃 論点 インディオ スカンジナ ##紀子 1667 好調な
全部で「32,006」行(46行目に空白行あり?)
上から順に辞書として登録した場合、特殊TokenのIndexは以下のとおり。
[PAD] : 0 [UNK] : 1 [CLS] : 2 [SEP] : 3 [MASK] : 4
sentencepiece(hottoSNS-BERT)
GitHub - hottolink/hottoSNS-bert: hottoSNS-BERT: 大規模SNSコーパスによる文分散表現モデル
ツイートは、2017年〜2018年に投稿されたツイートの一部を抽出
文字フィルタ:ReTweet記号(RT)・省略記号(...)の除外
ツイートの場合、1文で表されることが多いため、(中略)、MLMのみを事前学習として採用
短すぎる・少なすぎるツイートを除外
vocab_size: 32,000
max_seq_len: 64
sentencepieceに関する設定
character_coverage: 0.9995
model_type: unigram
add_dummy_prefix: FALSE
user_defined_symbols: <url>,<mention>
control_symbols: [CLS],[SEP],[MASK]
Nomalize: NFKC
「vocab.txt」にあたる「tokenizer_spm_32K.vocab.to.bert」の詳細は未確認(取得には登録が必要)
説明から、特殊Tokenのindexの振り方は以下と思われる。
[PAD] : 0 [UNK] : 1
sentencepiece(BERT 日本語Wikipedia)
GitHub - yoheikikuta/bert-japanese: BERT with SentencePiece for Japanese text.
https://drive.google.com/drive/folders/1Zsm9DD40lrUVu6iAnIuTH2ODIkh-WM-O?usp=sharing
Training data is the Japanese wikipedia corpus from Wikimedia Downloads.
vocab_size: 32,000
max_seq_length: 512
wiki-ja.vocab
<unk> 0 <s> 0 </s> 0 [PAD] 0 [CLS] 0 [SEP] 0 [MASK] 0 、 -3.00936 。 -3.28261 ▁ -3.52378 の -3.65896 (snip) 胱 -20.5619 齬 -20.5619
sentencepieceに関する設定(config.iniより抜粋)
[SENTENCEPIECE]
PREFIX = /work/model/wiki-ja
VOCABSIZE = 32000
CTLSYMBOLS = [PAD],[CLS],[SEP],[MASK]
「vocab.txt」は全部で「32,000」行
上から順に辞書として登録した場合、特殊TokenのIndexは以下のとおり。
<unk> : 0 <s> : 1 </s> : 2 [PAD] : 3 [CLS] : 4 [SEP] : 5 [MASK] : 6
BOS、EOSにあたる<s>と</s>については、無くてもよかったのではと思われる。
Pre-trainedモデルを使用するにあたっては、Tokenのindexを学習時と同じにする必要がある。
https://twitter.com/yohei_kikuta/status/1069754480600608768