Wav2Vec2CTCTokenizer does not take the vocabulary into account when identifying tokens in a sentence
Author: guillaume-wisniewski
Pull request: no

## Environment info
- `transformers` version: 4.4.0
- Platform: Darwin-19.6.0-x86_64-i386-64bit
- Python version: 3.7.9
- PyTorch version (GPU?): 1.8.1 (False)
- Tensorflow version (GPU?): not installed (NA)
- Using GPU in script?: no
- Using distributed or parallel set-up in script?: no

### Who can help
@patrickvonplaten @LysandreJik

## Information

Model I am using (Bert, XLNet ...): wav2vec2

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

We are trying to train an automatic phonemic transcription system for a low-resource language using the instructions [here](https://huggingface.co/blog/fine-tune-xlsr-wav2vec2 )

I created a `Wav2Vec2CTCTokenizer` tokenizer as follows:
```python
from transformers import Wav2Vec2CTCTokenizer

# example of a phonemic transcription                                                                         
sent = "ʈʰ æ æ̃ ˧ kʰ"
# phonemes are separated by spaces in the transcription                                                       
vocab = {phoneme for phoneme in sent.split()}
vocab_dict = {k: v for v, k in enumerate(vocab)}

# <space> will be our phoneme separator                                                                       
vocab_dict[" "] = len(vocab_dict)
vocab_dict["[UNK]"] = len(vocab_dict)
vocab_dict["[PAD]"] = len(vocab_dict)

import json
with open('vocab.json', 'w') as vocab_file:
    json.dump(vocab_dict, vocab_file)

tokenizer = Wav2Vec2CTCTokenizer("./vocab.json",
                                 unk_token="[UNK]",
                                 pad_token="[PAD]",
                                 word_delimiter_token=" ")

```

The result of the sentence tokenization is:
```
>>> tokenizer(sent)

{'input_ids': [6, 6, 5, 2, 5, 2, 6, 5, 4, 5, 6, 6], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

```
Where 6 is the id of the <unk> token. The vocabulary is :
`{'æ̃': 0, 'kʰ': 1, 'æ': 2, 'ʈʰ': 3, '˧': 4, ' ': 5, '[UNK]': 6, '[PAD]': 7}`

It appears that phonemes made of several characters (e.g. ʈʰ) are not recognized as a whole but rather taken separately (ʈ and than ʰ) each token being mapped to a separate id (here `<unk>` as the separated characters are not in the vocabulary). 

The tokenization output results from the `Wav2Vec2CTCTokenizer._tokenize` function being called before looking in the dictionary representing the vocabulary to map tokens into IDs. This function converts the string representing the sentence to tokenize into a list without taking into account the tokens defined in the vocabulary.

I do not know if this is the intended behaviour or if we are not using the tokenizer correctly (in which case the documentation might be improved)


Comments:
Hey @guillaume-wisniewski ,

Thanks a lot for the very clear error description.The PR attached should fix the problem :-) Let me know if you still encounter any problems.