LongformerForSequenceClassification
Author: patil-suraj
Pull request: yes

This PR adds `LongformerForSequenceClassification`

@patrickvonplaten @ibeltagy 
All the changes here are as per we discussed  in `LongformerForQuestionAnswering`.
`forward` method automatically sets global attention on cls token.

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

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

```diff
@@            Coverage Diff             @@
##           master    #4580      +/-   ##
==========================================
+ Coverage   78.03%   78.05%   +0.02%     
==========================================
  Files         124      124              
  Lines       20647    20688      +41     
==========================================
+ Hits        16111    16148      +37     
- Misses       4536     4540       +4     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/4580?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/\_\_init\_\_.py](https://codecov.io/gh/huggingface/transformers/pull/4580/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9fX2luaXRfXy5weQ==) | `99.13% <ø> (ø)` | |
| [src/transformers/modeling\_auto.py](https://codecov.io/gh/huggingface/transformers/pull/4580/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19hdXRvLnB5) | `78.57% <ø> (ø)` | |
| [src/transformers/modeling\_longformer.py](https://codecov.io/gh/huggingface/transformers/pull/4580/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19sb25nZm9ybWVyLnB5) | `96.85% <92.85%> (-0.56%)` | :arrow_down: |
| [src/transformers/modeling\_tf\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/4580/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ190Zl91dGlscy5weQ==) | `88.50% <0.00%> (-0.17%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/4580?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/4580?src=pr&el=footer). Last update [8cc6807...a9afa7b](https://codecov.io/gh/huggingface/transformers/pull/4580?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


This is great. Thanks, @patil-suraj

Is it better to use pooled output for sequence classification like in BertForSequenceClassification? @ibeltagy @patil-suraj 

```
pooled_output = outputs[1]
pooled_output = self.dropout(pooled_output)
logits = self.classifier(pooled_output)
```

@leslyarun 
`LongformerClassificationHead` does the pooling 

> @leslyarun
> `LongformerClassificationHead` does the pooling

That's great. Fine then 👍 

Awesome thanks @patil-suraj! 

Merging

@patil-suraj Thanks for this! I'm working on a multi-task version of `LongformerForSequenceClassification`. For my context, why did you decide to implement pooling separately from the [pooling done in `LongformerModel`](https://github.com/huggingface/transformers/blob/main/src/transformers/models/longformer/modeling_longformer.py#L1377-L1383)? It seems like the key differences between the pooling done in `LongformerClassificationHead` vs. `LongformerPooler` are:

1. a dropout layer before the dense layer ([source](https://github.com/huggingface/transformers/blob/9ade58f0555430cec851e307c83c3a56c4a77d0b/src/transformers/models/longformer/modeling_longformer.py#L2004))
2. additional dropout and dense layers ([source](https://github.com/huggingface/transformers/blob/9ade58f0555430cec851e307c83c3a56c4a77d0b/src/transformers/models/longformer/modeling_longformer.py#L2007-L2008))

I see that this mimics the [`RobertaForSequenceClassification` implementation](https://github.com/huggingface/transformers/blob/main/src/transformers/models/roberta/modeling_roberta.py#L1449-L1468). Is the goal to avoid the pooler parameters learned during pre-training a `LongformerModel`? I see that this topic has been discussed in general (https://github.com/huggingface/transformers/issues/1328), but I am curious to learn more specifically for Longformer!