OpenAIGPTTokenizer does not work with spacy 3.x installed
Author: cody-moveworks
Pull request: no

## Environment info
<!-- You can run the command `transformers-cli env` and copy-and-paste its output below.
     Don't forget to fill out the missing fields in that output! -->

- `transformers` version: 4.11.3
- Platform: Darwin-19.6.0-x86_64-i386-64bit
- Python version: 3.6.8
- PyTorch version (GPU?): 1.9.1 (False)
- Tensorflow version (GPU?): 2.6.0 (False)
- Flax version (CPU?/GPU?/TPU?): not installed (NA)
- Jax version: not installed
- JaxLib version: not installed
- Using GPU in script?: <fill in>
- Using distributed or parallel set-up in script?: <fill in>

### Who can help

@patrickvonplaten @LysandreJik since it is related to OpenAI GPT model.

## Information

It seems that OpenAIGPTTokenizer does not work with spacy>=3.0.0.

In `tokenization_openai.py`, there is logic that uses spacy tokenizer if spacy and ftfy are installed:

```
        try:
            import ftfy
            from spacy.lang.en import English

            _nlp = English()
            self.nlp = _nlp.Defaults.create_tokenizer(_nlp)
            self.fix_text = ftfy.fix_text
        except ImportError:
            logger.warning("ftfy or spacy is not installed using BERT BasicTokenizer instead of SpaCy & ftfy.")
            self.nlp = BasicTokenizer(do_lower_case=True)
            self.fix_text = None
```

This block executes correctly for spacy versions 2.x. But for spacy versions 3.x, the API changed and the proper way to create the tokenizer is like so (taken from the docs at https://spacy.io/api/tokenizer):

```
from spacy.lang.en import English
nlp = English()
# Create a Tokenizer with the default settings for English
# including punctuation rules and exceptions
tokenizer = nlp.tokenizer
```

## To reproduce

Steps to reproduce the behavior:

1. `pip install transformers==4.11.3 ftfy==6.0.3 spacy==3.0.0`
2. Open a python shell and run the following:

```
from transformers import OpenAIGPTTokenizer

tokenizer = OpenAIGPTTokenizer.from_pretrained('openai-gpt')
```

3. Should break with a stack trace that looks like the following:

```
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/cody/.pyenvs/test/lib/python3.6/site-packages/transformers/tokenization_utils_base.py", line 1750, in from_pretrained
    **kwargs,
  File "/Users/cody/.pyenvs/test/lib/python3.6/site-packages/transformers/tokenization_utils_base.py", line 1872, in _from_pretrained
    tokenizer = cls(*init_inputs, **init_kwargs)
  File "/Users/cody/.pyenvs/test/lib/python3.6/site-packages/transformers/models/openai/tokenization_openai.py", line 107, in __init__
    self.nlp = _nlp.Defaults.create_tokenizer(_nlp)
AttributeError: type object 'EnglishDefaults' has no attribute 'create_tokenizer'
```

## Expected behavior

The tokenizer should be able to work with spacy 3.x.


Comments:
Hi,

The OpenAI tokenizer probably requires an update to work with Spacy v3 (as seen [here](https://github.com/explosion/spaCy/discussions/7398)). That line should be replaced by `self.nlp = _nlp.tokenizer`. 

Do you mind opening a PR for this?

Thanks!