https://huggingface.co/docs/tokenizers/quicktour
tokenizer库的处理流程一般包括如下四步——
Normalizers: 文本句预处理,使规范化 Pre-tokenizers: 将句子初步拆分为单元词 Model:得到最终的分词token结果,及其对应id编号 Post-Processors: 添加特殊词元标记 1. 训练分词器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from tokenizers import Tokenizer # (1) 选择一种分词模型,并创建实例 from tokenizers.models import BPE tokenizer = Tokenizer(BPE(unk_token="[UNK]")) from tokenizers.trainers import BpeTrainer trainer = BpeTrainer(special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"]) # (2) 设置预分词器,这里按空白字符分割文本 from tokenizers.pre_tokenizers import Whitespace tokenizer.pre_tokenizer = Whitespace() # (3) 基于语料库,进行分词训练 copus_file = ["datasets/wikitext-103-raw-v1/wiki_train.csv"] tokenizer.train(copus_file, trainer) # (4) 保存并加载 tokenizer.save("datasets/wikitext-103-raw-v1/tokenizer-wiki.json") tokenizer = Tokenizer.from_file("datasets/wikitext-103-raw-v1/tokenizer-wiki.json") type(tokenizer) # tokenizers.Tokenizer # 与直接从预训练模型中提取的分词器类型不太一样 from transformers import AutoTokenizer tokenizer2 = AutoTokenizer.from_pretrained("datasets/bert-base-uncased") type(tokenizer2) # transformers.models.bert.tokenization_bert_fast.BertTokenizerFast tokenizers库提供了4种常见的子词分词方法。BPE通过迭代地合并最频繁的字符或子词对来构建词汇表,常用于GPT 和 RoBERTa 等模型;WordLevel基于完整词的分词方法,使用一个固定的词汇表,未登录词通常被标记为 [UNK]。此外还有Unigram以及WordPiece。
...