コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
 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')))
コード例 #4
0
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("./")