bert_tokenizer.decode(bert_tokenizer.encode(sentence))!=sentence
from transformers import AutoTokenizer       # transformers==4.2.1
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
paragraph = "no_passages_used __knowledge__ no_passages_used"
print(tokenizer.encode(paragraph))
print(tokenizer.decode(tokenizer.encode(paragraph)))

"""
>[101, 2053, 1035, 13768, 1035, 2109, 1035, 1035, 3716, 1035, 1035, 2053, 1035, 13768, 1035, 2109, 102]
>[CLS] no _ passages _ used _ _ knowledge _ _ no _ passages _ used [SEP]
"""
Hi! This is a normal behavior of the BERT tokenizer. You can add the tokens you do not wish to see split to the vocabulary:
```py
>>> tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
... tokenizer.add_tokens(["no_passages_used"]) # <--------------------------------- Here
... paragraph = "no_passages_used knowledge no_passages_used"
... print(tokenizer.encode(paragraph))
... print(tokenizer.decode(tokenizer.encode(paragraph)))
[101, 30522, 3716, 30522, 102]
[CLS] no_passages_used knowledge no_passages_used [SEP]
```<|||||>Don't forget to resize the embedding matrix of your model if you add new tokens to the vocabulary: [docs for add_tokens method](https://huggingface.co/transformers/internal/tokenization_utils.html?highlight=resize_token_embeddings#transformers.tokenization_utils_base.SpecialTokensMixin.add_tokens)