def train_custom_tokenizer(files: List[str], tokenizer_file: str, **kwargs) -> BertWordPieceTokenizer: """ Tokenizerの学習・保存処理:custom PreTokenizer付きのTokenizerを学習・保存する。 """ tokenizer = BertWordPieceTokenizer( handle_chinese_chars=False, # for japanese strip_accents=False, # for japanese ) tokenizer._tokenizer.pre_tokenizer = PreTokenizer.custom( MecabPreTokenizer()) # 与えられたコーパスファイル集合からサブワード分割を学習 tokenizer.train(files, **kwargs) # vocab情報に加えて、前処理等パラメータ情報を含んだトークナイザ設定のJSONを保存 # NOTE: Pythonで書かれたcustom PreTokenizerはシリアライズできないので、RustベースのPreTokenizerをダミー注入してシリアライズ # JSONにはダミーのPreTokenizerが記録されるので、ロード時にcustom PreTokenizerを再設定する必要がある。 tokenizer._tokenizer.pre_tokenizer = BertPreTokenizer() tokenizer.save(tokenizer_file) # (Optional) .txt形式のvocabファイルは f"vocab-{filename}.txt" で保存される(外部の処理で欲しい場合) filename = "wordpiece" model_files = tokenizer._tokenizer.model.save( str(pathlib.Path(tokenizer_file).parent), filename) return tokenizer
def train_tokenizer(data_file_paths): t = BertWordPieceTokenizer() t.train( files=data_file_paths, vocab_size=vocab_size, min_frequency=2, show_progress=True, limit_alphabet=1000, ) return t
def training_WordPiece(self): tokenizer = BertWordPieceTokenizer(vocab=None, clean_text=True, handle_chinese_chars=True, strip_accents=True, lowercase=True, wordpieces_prefix='##') tokenizer.train([ os.path.join(self.corpus_dir_path, file_path) for file_path in os.listdir(self.corpus_dir_path) if 'mecab' in file_path ], limit_alphabet=self.config['limit_alphabet'], vocab_size=self.config['vocab_size'], special_tokens=self.get_special_tokens()) print('training WordPiece is finished!') tokenizer.save_model(self.config['tokenizer_path'], prefix='tokenizer') print('tokenizer is saved in {}'.format( os.path.join(self.config['tokenizer_path'], 'tokenizer-vocab.txt')))
import tokenizers from transformers import BertTokenizer import glob from tokenizers.implementations import BertWordPieceTokenizer tokenizer = BertWordPieceTokenizer() tokenizer = BertWordPieceTokenizer( clean_text=True, handle_chinese_chars=True, strip_accents=True, lowercase=True, ) files = glob.glob("./corpus_for_tokenization/*.txt") tokenizer.train(files, vocab_size=50000, min_frequency=3, show_progress=True, special_tokens=["[PAD]", "[UNK]", "[CLS]", "[SEP]", "[MASK]"], limit_alphabet=15000, wordpieces_prefix="##") tokenizer.save_model("./")