Can't assign custom vocab_files_names in Wav2Vec2Tokenizers
Author: jp1924
Pull request: no

### System Info

python: 3.8
transformers: 4.23.1

### Who can help?

@patrickvonplaten

### Information

- [ ] The official example scripts
- [x] My own modified scripts

### Tasks

- [x] An officially supported task in the `examples` folder (such as GLUE/SQuAD, ...)
- [ ] My own task or dataset (give details below)

### Reproduction
```python
from transformers import Wav2Vec2Tokenizer, Wav2Vec2CTCTokenizer


def main() -> None:
    # [NOTE]: plsace insert save_dir path
    output_dir = r"./output_dir"

    encoder1_tokenizer = Wav2Vec2CTCTokenizer.from_pretrained("facebook/wav2vec2-base-960h")
    encoder2_tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")

    encoder1_tokenizer.vocab_files_name = {
        "vocab_file": "encoder1_vocab.json",
        "tokenizer_config_file": "encoder1_tokenizer_config.json",
    }
    encoder2_tokenizer.vocab_files_name = {
        "vocab_file": "encoder2_vocab.json",
        "tokenizer_config_file": "encoder2_tokenizer_config.json",
    }

    encoder1_tokenizer.save_vocabulary(save_diretory=output_dir)
    encoder2_tokenizer.save_vocabulary(save_diretory=output_dir)

if "__main__" in __name__:
    main()
```
### Expected behavior

This is the problem that occurred when the bi-encoder had to be placed on Wav2Vec2.
When i saving the model
To prevent overwriting due to duplication when saving in tokenizer, i may have named files that are saved differently.

I overridden vocab_files_name as shown in Reproduction.

But later I found out that the file hasn't been renamed

So I looked up the problem and found the following problem

tokenization_wav2vec2.py > [L127-161](https://github.com/huggingface/transformers/blob/v4.24.0/src/transformers/models/wav2vec2/tokenization_wav2vec2.py#L127-L161)
```python
class Wav2Vec2CTCTokenizer(PreTrainedTokenizer):

    """
    Constructs a Wav2Vec2CTC tokenizer.
    This tokenizer inherits from [`PreTrainedTokenizer`] which contains some of the main methods. Users should refer to
    the superclass for more information regarding such methods.
    Args:
        vocab_file (`str`):
            File containing the vocabulary.
        bos_token (`str`, *optional*, defaults to `"
"`):
            The beginning of sentence token.
        eos_token (`str`, *optional*, defaults to `"
"`):
            The end of sentence token.
        unk_token (`str`, *optional*, defaults to `"<unk>"`):
            The unknown token. A token that is not in the vocabulary cannot be converted to an ID and is set to be this
            token instead.
        pad_token (`str`, *optional*, defaults to `"<pad>"`):
            The token used for padding, for example when batching sequences of different lengths.
        word_delimiter_token (`str`, *optional*, defaults to `"|"`):
            The token used for defining the end of a word.
        do_lower_case (`bool`, *optional*, defaults to `False`):
            Whether or not to accept lowercase input and lowercase the output when decoding.
        **kwargs
            Additional keyword arguments passed along to [`PreTrainedTokenizer`]
    """

    vocab_files_names = VOCAB_FILES_NAMES # [NOTE]: here
    pretrained_vocab_files_map = PRETRAINED_VOCAB_FILES_MAP
    max_model_input_sizes = PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
    model_input_names = ["input_ids", "attention_mask"]

    def __init__(

```
VOCAB_FILES_NAMES sets the default value for vocab_files_names

tokenization_wav2vec2.py > [L595-606](https://github.com/huggingface/transformers/blob/v4.24.0/src/transformers/models/wav2vec2/tokenization_wav2vec2.py#L595-L606)
```python
    def save_vocabulary(self, save_directory: str, filename_prefix: Optional[str] = None) -> Tuple[str]:
        if not os.path.isdir(save_directory):
            logger.error(f"Vocabulary path ({save_directory}) should be a directory")
            return
        vocab_file = os.path.join(
            save_directory, (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"] # [NOTE]: here
        )

        with open(vocab_file, "w", encoding="utf-8") as f:
            f.write(json.dumps(self.encoder, indent=2, sort_keys=True, ensure_ascii=False) + "\n")

        return (vocab_file,)
```

However, if you look at the save_vocabulary function, "vocab_files_names" is not included in the checked part, but "VOCAB_FILES_NAMES" is included, so the file name does not change even if you override "vocab_files_names"

So I want to change that "VOCAB_FILES_NAMES" part to "vocab_files_names"
And this was on Wav2Vec2CTCTokenizer and Wav2Vec2Tokenizer

Comments:
Might be of interest to @sanchit-gandhi 

Hey @jp1924 

I think there's some confusion between `vocab_file`, `vocab_files_names` and `VOCAB_FILES_NAMES`:
* `vocab_file`: an **argument** that denotes the path to the file containing the tokeniser's vocabulary
* `vocab_files_names`: an **attribute** of the class `Wav2Vec2CTCTokenizer` (not an input argument). Note that this is a required attribute of the base class `PreTrainedTokenizerBase`:
https://github.com/huggingface/transformers/blob/afce73bd9d891b55dcb8d4d875d17718ffa01ff0/src/transformers/tokenization_utils_base.py#L1388-L1390
We set this attribute purely to correctly initialise the `Wav2Vec2CTCTokenizer`.
* `VOCAB_FILES_NAMES`: a **dictionary** mapping. Maps the `vocab_file` to the correct name for saving (`vocab.json`)

Of these three, the only one we should ever have to change is `vocab_file` (specifying the right path to our tokeniser vocabulary). The other two are used internally to correctly initialise the PreTrained tokeniser.

If you want to save two distinct vocabulary files, you have two options:
1. Save them in different directories (`output_dir_1` and `output_dir_2`)
2. Pass the argument `filename_prefix` when you save the vocabulary

Option 1:
```python
from transformers import Wav2Vec2Tokenizer, Wav2Vec2CTCTokenizer

def main() -> None:
    output_dir_1 = r"./output_dir_1"
    output_dir_2 = r"./output_dir_2"

    encoder1_tokenizer = Wav2Vec2CTCTokenizer.from_pretrained("facebook/wav2vec2-base-960h")
    encoder2_tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")

    encoder1_tokenizer.save_vocabulary(save_directory=output_dir_1)
    encoder2_tokenizer.save_vocabulary(save_directory=output_dir_2)

if "__main__" in __name__:
    main()
```
-> this will save encoder1's vocab under `output_dir_1` and encoder2's vocab under `output_dir_2`. 

Option 2:
```python
from transformers import Wav2Vec2Tokenizer, Wav2Vec2CTCTokenizer

def main() -> None:
    output_dir = r"./output_dir"

    encoder1_tokenizer = Wav2Vec2CTCTokenizer.from_pretrained("facebook/wav2vec2-base-960h")
    encoder2_tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")

    encoder1_tokenizer.save_vocabulary(save_directory=output_dir, filename_prefix="encoder1")
    encoder2_tokenizer.save_vocabulary(save_directory=output_dir, filename_prefix="encoder2")

if "__main__" in __name__:
    main()
```
-> this will save encoder1's vocab as `encoder1-vocab.json` and encoder2's vocab as `encoder2-vocab.json` (both under `output_dir`)

I didn't think I could save it using the prefix. Thank you for letting me know!