RoBERTa事前訓練用のtokenizerをByteLevelBPETokenizerを使わずに書き換える
『 #Transformerによる自然言語処理 』3章 RoBERTaモデルのゼロからの事前訓練
code:train_tokenizer.py
# ref: https://github.com/ftnext/practice-dl-nlp/blob/a211598129b39d41185850bdf333efa9b57bd410/bert_exercise/20220506KantaiBERT_with_datasets.ipynb
tokenizer = ByteLevelBPETokenizer()
tokenizer.train(files=paths, vocab_size=52_000, min_frequency=2, special_tokens=special_tokens)
QuicktourのTraining the tokenizerのコードのようにしたい
違いはjson 1ファイルを保存するだけになる]
ByteLevelBPETokenizerの実装を覗いて書き換える
tokenizer = ByteLevelBPETokenizer()でやっていること
tokenizer = Tokenizer(BPE())
vocab引数もmerges引数もNoneなのでこちらの分岐
BPEのunk_token引数はNone(Quicktourと違う)
tokenizer.normalizerは設定されない(Noneのまま)
unicode_normalizer引数はNone
lowercase引数はFalse
tokenizer.pre_tokenizerを設定
tokenizers.pre_tokenizers.ByteLevel
add_prefix_space引数はFalse
tokenizer.decoderを設定
tokenizers.decoders.ByteLevel
tokenizer.post_processorを設定
tokenizers.processors.ByteLevel
trim_offsets引数はFalse
以上を設定したtokenizerにはtokenizer._tokenizerでアクセスできる
tokenizer.trainでやっていること
trainer = trainers.BpeTrainer(...)
tokenizers.trainers.BpeTrainer
initial_alphabet引数にtokenizers.pre_tokenizers.ByteLevelのalphabetメソッドの返り値(256文字)を渡す
self._tokenizer.train(files, trainer=trainer)
Post-processを追加
tokenizer.encode("The Critique of Pure Reason.")したときに、CLSとSEPが付加されなかった
QuicktourのPost-processingに沿って追加して対処した
ByteLevelBPETokenizerからTokenizer(BPE())の書き換えの検証
Tokenizerに書き換えた後、RobertaTokenizerとしてどう読み込む?
vocab.jsonとmerges.txtの2ファイルはない。tokenizer.jsonからどう読み込む?
Tokenizerに書き換えた後、トークナイズした結果が揃うことの検証