PreTrainedTokenizer returns potentially incorrect attention mask
# 🐛 Bug

## Information

When deriving the `attention_mask` `PreTrainedTokenizer` makes an assumption in `prepare_for_model` that the input hasn't been padded prior, this assumption can be false. For example, in the case where one precomputes padded token ids for sentences separately and then uses `BertTokenizer.encode_plus` to join them.

I'm submitting this issue, in order to find out whether this assumption has been made on purpose and if it hasn't I can easily submit a PR fixing it.

In the `PreTrainedTokenizer`, the  `attention_mask` is obtained in two places:

- line `1175`: `encoded_inputs["attention_mask"] = [0] * difference + [1] * len(encoded_inputs["attention_mask"] = [0] * difference + [1] * len(encoded_inputs["input_ids"]) `

- line `1188`: `encoded_inputs["attention_mask"] = [1] * len(encoded_inputs["input_ids"])`.

I suggest that instead of making the assumption attention mask is derived as:

`encoded_inputs["attention_mask"] = encoded_inputs["input_ids"] != 0`
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
