`PreTrainedTokenizerFast.build_inputs_with_special_tokens` doesn't add the special tokens
Author: bryant1410
Pull request: no
Labels: name: Core: Tokenization

# 🐛 Bug

## Information

Model I am using (Bert, XLNet ...): BertTokenizer (but seems to apply to most)

Language I am using the model on (English, Chinese ...): English

The problem arises when using:
* [ ] the official example scripts: (give details below)
* [x] my own modified scripts: (give details below)

The tasks I am working on is:
* [ ] an official GLUE/SQUaD task: (give the name)
* [x] my own task or dataset: (give details below)

## To reproduce

```python
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('bert-base-cased')
tokenizer.build_inputs_with_special_tokens(["abc", "def"])
```

The output is `['abc', 'def']`.

## Expected behavior

The output should include the `[CLS]` and `[SEP]` tokens.

The problem is neither `PreTrainedTokenizerFast` nor its subclasses override `build_inputs_with_special_tokens`.

## Environment info
<!-- You can run the command `python transformers-cli env` and copy-and-paste its output below.
     Don't forget to fill out the missing fields in that output! -->
     
- `transformers` version: 2.5.0
- Platform: Linux
- Python version: 3.7.6
- PyTorch version (GPU?): 1.4.0, w/o GPU
- Tensorflow version (GPU?): -
- Using GPU in script?: No.
- Using distributed or parallel set-up in script?: No.

Comments:
Hi @bryant1410, 

Thanks for reporting the issue, as a workaround for now, can you try the following:

```python
tokenizer.tokenize("abc")
tokenizer.tokenizer("def")
```

It should do the same, let me know.
In the meantime I'll have a closer look at the function `tokenizer.build_inputs_with_special_tokens`

Should be fixed in https://github.com/huggingface/transformers/pull/2912

I think this may still be an issue. Special tokens are not added for me when using __call__ for a subclass where this method is overriden.

@lachlancahill Could you provide some more information. In particular how to replicate and the subclass? If a method is overridden and doesn't utilise `super()` then any changes to the parent's class method won't be reflected in the subclass 

Certainly, thanks for taking the time to look at this, @amyeroberts.

```python
from transformers import LlamaTokenizerFast


class UpdatedTokenizerFast(LlamaTokenizerFast):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def build_inputs_with_special_tokens(self, token_ids_0, token_ids_1=None):
        if token_ids_1 is None:
            raise NotImplementedError(
                'This method is designed for zero shot classification, so requires a premise and hypothesis to be passed. No token_ids_1 was passed.')

        output = [self.bos_token_id] + token_ids_0 + [self.sep_token_id] + token_ids_1 + [self.eos_token_id]

        return output


hf_repo = 'h2oai/h2o-danube2-1.8b-base'

premise, hypothesis = 'Thanks', 'again'

tokenizer = UpdatedTokenizerFast.from_pretrained(hf_repo)

example_tokens = tokenizer(premise, hypothesis, add_special_tokens=True)

print(example_tokens)
# {'input_ids': [8868, 1076], 'attention_mask': [1, 1]}

print(tokenizer.decode(example_tokens['input_ids']))
# Thanks again
``` 

I am expecting `build_inputs_with_special_tokens` to be called in my subclass, but if you could let me know where I am going wrong it would be greatly appreciated.