Add mBART-50
# What does this PR do?

This is the second part of splitting #9811

This PR adds the mBART-50 models.
- Add `MBart50Tokenizer` and `MBart50TokenizerFast`. A new tokenizer is needed because it adds extra languages and the encoding format is different than `MBartTokenizer`. The difference is that for `mbart-50` both source and target language text begin with the `<language token>`,  whereas for `mbart-cc25` `<language_token>` is used as suffix token.

- The new tokenizers use `src_lang` as a `getter` and `setter` property. This is needed because for many-to-many translation models whenever we change the `src_lang` we need to set special tokens for that language. The `src_lang.setter` calls `set_src_lang_special_tokens` method whenever a we set a new `src_lang` to handle this.

-  A new model class is not necessary as mBART-50 is similar to our existing mBART-25 model, the only difference being `relu` activation instead of `gelu` and emb size of 250054 instead of 250027

All model checkpoints are uploaded on hub  https://huggingface.co/models?filter=mbart-50
> As a follow-up, is mBART aligned with mBART-50? We should have the same setter there. It would make a nice first issue I believe, once this PR is merged and provides a good model.

Yes. Here the setter was necessary because of the many to many models. But yes mBART can also be used for multilingual fine-tuning so the tokenizers should also be aligned.<|||||>Hi, I want to use MBart-Large-50 for finetuning, but I get the error:
`File "/home/michael/anaconda3/envs/paraphrases/lib/python3.9/site-packages/transformers/models/mbart/tokenization_mbart.py", line 199, in set_src_lang_special_tokens
    self.cur_lang_code = self.lang_code_to_id[src_lang]
KeyError: None
`
It was working with the previous version of the model. Is it correct, that this PR adresses this issue that MBartTokenizer is used and not MBart50Tokenizer?<|||||>Hey @MichaelJanz 

For mBART-50 you should use the `MBart50Tokenizer`. Also when fine-tuning make sure that you either pass or set the `src_lang` and `tgt_lang` attributes<|||||>Hi @patil-suraj and thanks for answering!
I am using the script under examples/seq2seq run_seq2seq.py, which has no reference to the `MBart50Tokenizer`, but I think it should have. `src_lang` and `tgt_lang` are set. I suspect that the base class of `MBart50Tokenizer` is used, which is simply `MBartTokenizer`. Will the script work when this commit is merged, or are there further changes neccesary, or am I executing the script wrong?<|||||>`MBart50Tokenizer` does not inherit from `MBartTokenizer` and for now, the script does not support mBART-50, but you could easily modify the script for mBART-50. I think the only necessary change is to use the correct tokenizer class. This PR will be merged today, please open an issue if you have more questions after the PR is merged. Happy to answer :)<|||||>Thanks for your help!
If I can get it to work, I will create a PR. Thanks for your great work :)<|||||>Thanks a lot, everyone! Merging!