There are 2 things you need to do in order to train additional special tokens:

Add new tokens to the tokenizer.

You can either add “regular” tokens, as follows:
tokenizer.add_tokens(['newWord', 'newWord2'])
Or you can add them as special tokens (similar to [CLS] and [SEP]) by passing the additional argument special_tokens=True. This is equivalent to calling tokenizer.add_special_tokens (the latter accepts a dictionary rather than a list).
special_tokens_dict = {'additional_special_tokens': ['[C1]','[C2]','[C3]','[C4]']}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)


Resize the token embedding matrix of the model, so that it matches with the tokenizer:

model.resize_token_embeddings(len(tokenizer))
Next, you can fine-tune your model on your custom dataset, and train these additional tokens.
Sources:

How to add some new special tokens to a pretrained tokenizer? · Issue #247 · huggingface/tokenizers · GitHub 2
how can i finetune BertTokenizer? · Issue #2691 · huggingface/transformers · GitHub 4

source code 1 of tokenization_utils_base.py