ProphetNetForCausalLM text generation fails
Author: guillaume-be
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: latest master (4.3.0.dev0)
- Platform: win64
- Python version: 3.7
- PyTorch version (GPU?): 1.7
- Tensorflow version (GPU?): N/A
- Using GPU in script?: yes
- Using distributed or parallel set-up in script?: no

### Who can help
@patrickvonplaten

## Information

Model I am using: ProphetNet

The `ProphetNetForCausalLM` defined at https://github.com/huggingface/transformers/blob/88583d4958ae4cb08a4cc85fc0eb3aa02e6b68af/src/transformers/models/prophetnet/modeling_prophetnet.py#L1884 overwrites the `is_encoder_decoder` flag to a value of False to ensure the mode is used as a decoder only, regardless of what is given in the configuration file.

However, the initialization of the parent class is done before this overwrite, causing the `model.config.is_encoder_decoder` to remain possibly `True`. This leads to an error if the `generate` method of the model is later called as the non-existign method `get_encoder` is called:

```python
AttributeError: 'ProphetNetForCausalLM' object has no attribute 'get_encoder'
```

The script below allows reproducing:

```python
from transformers import ProphetNetTokenizer, ProphetNetForCausalLM

tokenizer = ProphetNetTokenizer.from_pretrained('microsoft/prophetnet-large-uncased')
model = ProphetNetForCausalLM.from_pretrained('patrickvonplaten/prophetnet-decoder-clm-large-uncased').cuda()
model = model.eval()

input_sentences = ["It was a very nice and sunny"]
inputs = tokenizer(input_sentences, return_tensors='pt')

# Generate text
summary_ids = model.generate(inputs['input_ids'].cuda(),
                             num_beams=4,
                             temperature=1.0,
                             top_k=50,
                             top_p=1.0,
                             repetition_penalty=1.0,
                             min_length=10,
                             max_length=32,
                             no_repeat_ngram_size=3,
                             do_sample=False,
                             early_stopping=True)
model_output = tokenizer.batch_decode(summary_ids, skip_special_tokens=True)
```

## Step to fix it

The call to `super().__init__(config)` in the initialization method should be moved from modeling_prophetnet.py#L1886 to modeling_prophetnet.py#L1890 (after the configuration object was modified). If you agree I could submit a small PR with the same, I tested locally and the model does not crash.

As a side note, After the fix, the generation quality remains very poor, is there a pretrained snapshot for ProphetNet that can actually be used for  causal generation?

Comments:
You're totally right @gui11aume! Thanks for posting this issue - it would be great if you could open a PR to fix it. The checkpoint I uploaded won't work well because I just took the decoder part of the encoder-decoder model and removed all cross-attention layer. The model would have to be fine-tuned to work correctly. The main motivation to add `ProphetNetForCausalLM` however was to enable things like `Longformer2ProphetNet` as described here: https://github.com/huggingface/transformers/pull/9033