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模型的时候,要特别注意,别混了,要不到时候预训练模型的时候出异常。