Add MobileBert
Author: vshampor
Pull request: yes

Grabbed the code from https://github.com/lonePatient/MobileBert_PyTorch and added the question answering downstream task.

Should address #4185. Also got the backbone weights' representation in the Pytorch/transformers format (i.e. the `pytorch_model.bin`, `config.json` and `vocab.txt` files) via converting the original TF [uncased_L-24_H-128_B-512_A-4_F-4_OPT](https://storage.googleapis.com/cloud-tpu-checkpoints/mobilebert/uncased_L-24_H-128_B-512_A-4_F-4_OPT.tar.gz) checkpoint - need guidance on how to upload these if necessary. 

The converted backbone weights as loaded in transformers via the PyTorch checkpoint loading method allow to reproduce the original paper's results for SST-2 somewhat - paper claims 92.8% accuracy, while I got 91.7% using the hyperparameters in https://github.com/lonePatient/MobileBert_PyTorch. Not sure if there is another fast way to confirm that these weights indeed correspond to the original pretrained MobileBert backbone.

Comments:
Hi @vshampor, can you let me know when this is ready for review? Thanks!

@LysandreJik it is quite impossible to make the CI pass for the check_code_quality stage since locally the `black` and the `isort` commands seem to produce opposite changes when applied at once with `make style` and therefore cancel out; meanwhile neither check is satisfied on the CI side since the checks for `black` and `isort` are done separately. 

Otherwise it's ok to review this now, I believe.

Ah yes, this happens when you have conflicting versions of black/isort. It's painful because isort should be installed from a specific commit.

Don't worry about it though, we'll fix that later on!

Credit goes to @lonePatient, I am merely integrating this to transformers because we at [nncf_pytorch](https://github.com/openvinotoolkit/nncf_pytorch) leverage this excellent repo for compression experiments with NLP models and would like to try out MobileBERT as well.

Will address the remarks and update the PR.


> * Upload the checkpoints to S3. Seeing as there's a single checkpoint released by google, I guess it would be under the name `google/mobilebert-uncased` @julien-c ?

Yes! We can ping the authors and check that they're ok.

@LysandreJik @julien-c so may I upload the model to S3 already or should we wait for @saberkun's approval for this?

I think the conversion script lacks
```py
name = name.replace("bert", "mobilebert")
```
in order to work

I'd like to update this as well as the code quality, do you mind if I push directly on your fork?

> I think the conversion script lacks
> 
> ```python
> name = name.replace("bert", "mobilebert")
> ```
> 
> in order to work
> 
> I'd like to update this as well as the code quality, do you mind if I push directly on your fork?

Sure.

# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=h1) Report
> Merging [#4901](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/f45e873910e60d89511ae0193711e71c5c710468&el=desc) will **increase** coverage by `0.72%`.
> The diff coverage is `91.26%`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/4901/graphs/tree.svg?width=650&height=150&src=pr&token=9qOlN6Hb1c)](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #4901      +/-   ##
==========================================
+ Coverage   77.19%   77.91%   +0.72%     
==========================================
  Files         133      137       +4     
  Lines       22233    23470    +1237     
==========================================
+ Hits        17163    18287    +1124     
- Misses       5070     5183     +113     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/modeling\_mobilebert.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19tb2JpbGViZXJ0LnB5) | `88.74% <88.74%> (ø)` | |
| [src/transformers/modeling\_tf\_mobilebert.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9tb2JpbGViZXJ0LnB5) | `93.32% <93.32%> (ø)` | |
| [src/transformers/configuration\_mobilebert.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9jb25maWd1cmF0aW9uX21vYmlsZWJlcnQucHk=) | `97.05% <97.05%> (ø)` | |
| [src/transformers/\_\_init\_\_.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9fX2luaXRfXy5weQ==) | `99.19% <100.00%> (+0.02%)` | :arrow_up: |
| [src/transformers/configuration\_auto.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9jb25maWd1cmF0aW9uX2F1dG8ucHk=) | `93.18% <100.00%> (+0.15%)` | :arrow_up: |
| [src/transformers/modeling\_auto.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19hdXRvLnB5) | `70.93% <100.00%> (+0.16%)` | :arrow_up: |
| [src/transformers/modeling\_tf\_auto.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl9hdXRvLnB5) | `72.50% <100.00%> (+0.23%)` | :arrow_up: |
| [src/transformers/tokenization\_auto.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fYXV0by5weQ==) | `97.77% <100.00%> (+0.10%)` | :arrow_up: |
| [src/transformers/tokenization\_mobilebert.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fbW9iaWxlYmVydC5weQ==) | `100.00% <100.00%> (ø)` | |
| [src/transformers/modeling\_openai.py](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19vcGVuYWkucHk=) | `79.51% <0.00%> (-1.39%)` | :arrow_down: |
| ... and [5 more](https://codecov.io/gh/huggingface/transformers/pull/4901/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=footer). Last update [f45e873...e73fde7](https://codecov.io/gh/huggingface/transformers/pull/4901?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Will add the documentation in the following commit and ping you for review then @patrickvonplaten @sgugger 

I just pushed the TensorFlow implementation, and added several models: `MobileBertFor{MaskedLM, NextSentencePrediction, MultipleChoice, TokenClassification}` alongside their tests and documentation.

Will solve the two remaining tests on Monday, put the TensorFlow checkpoints on S3 and we'll be good to merge!

Thanks for your reviews @patrickvonplaten @sgugger!