BPE,WordPiece,Unigram 三种编码与special_tokens

184 阅读1分钟

BPE

BPE编码的tokenzier一般来说不需要特殊添加special_tokens,但是tokenizer打包的时候,如果不添加,就不能用于后续的预训练模型,所以在包装的时候,要加入如下

   wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    bos_token="<|endoftext|>",
    eos_token="<|endoftext|>",
)

WordPiece

WordPiece编码的tokenizer,在输入tokenizer_model前,要加入special_tokens。对应的tokenizer打包的时候,对应的代码如下

  wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    unk_token="[UNK]",
    pad_token="[PAD]",
    cls_token="[CLS]",
    sep_token="[SEP]",
    mask_token="[MASK]",
)

Unigram

Unigram编码的tokenzier,在输入tokenizer_model前,要加入special_tokens。对应的tokenizer打包的时候,对应的代码如下

  wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    bos_token="<s>",
    eos_token="</s>",
    unk_token="<unk>",
    pad_token="<pad>",
    cls_token="<cls>",
    sep_token="<sep>",
    mask_token="<mask>",
    padding_side="left",
)

上面的WordPiece的special_token和其他的不太一样,一个是[]的,其他是<>.如果用bert模型的时候,要特别注意,别混了,要不到时候预训练模型的时候出异常。