add targets arg to fill-mask pipeline
Author: joeddav
Pull request: yes

Proposal to add a `targets` arg when calling `FillMaskPipeline`, allowing a user to compare different target tokens in addition to getting the top k predictions. This could be useful in a number of areas, such as in probing model behavior:

```python
nlp = pipeline('fill-mask', topk=2)
nlp("<mask> should be at home and take care of their children.")
> [{'sequence': '
Parents should be at home and take care of their children.
',
    'score': 0.32749035954475403,
    'token': 35835,
    'token_str': 'Parents'},
   {'sequence': '
 parents should be at home and take care of their children.
',
    'score': 0.12840420007705688,
    'token': 1041,
    'token_str': 'Ġparents'}]

nlp("<mask> should be at home and take care of their children.", targets=["Men", "Women"])
> [{'sequence': '
Women should be at home and take care of their children.
',
    'score': 0.04439367726445198,
    'token': 19814,
    'token_str': 'Women'},
   {'sequence': '
Men should be at home and take care of their children.
',
    'score': 0.01326736994087696,
    'token': 17762,
    'token_str': 'Men'}]
```

This could also prove useful in the setting of using MLMs for cloze tasks and few/zero-shot prediction:

```python
nlp("The acting was believable and the action was outstanding. The sentiment of this review is <mask>.")
> [{'sequence': '
The acting was believable and the action was outstanding. The sentiment of this review is clear.
',
    'score': 0.10008594393730164,
    'token': 699,
    'token_str': 'Ġclear'},
   {'sequence': '
The acting was believable and the action was outstanding. The sentiment of this review is undeniable.
',
    'score': 0.05471134930849075,
    'token': 29941,
    'token_str': 'Ġundeniable'}]

nlp("The acting was believable and the action was outstanding. The sentiment of this review is <mask>.",
    targets=[' positive', ' negative'])
> [{'sequence': '
The acting was believable and the action was outstanding. The sentiment of this review is positive.
',
    'score': 0.04867269843816757,
    'token': 1313,
    'token_str': 'Ġpositive'},
   {'sequence': '
The acting was believable and the action was outstanding. The sentiment of this review is negative.
',
    'score': 0.0009897189447656274,
    'token': 2430,
    'token_str': 'Ġnegative'}]
```

Notes:
- Passed targets must be in model vocab. If they're not, the target word is tokenized and the first token is used (with a user warning)
- Could possibly also be done with text-generation, but that might go against the spirit of that pipeline
- Current implem. can't do multi-input with different targets for each instance. Adding this would be a little less clean because you'd have to handle different output shapes for each instance, but I can add it in if that is important.

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

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

```diff
@@            Coverage Diff             @@
##           master    #6239      +/-   ##
==========================================
+ Coverage   79.61%   79.64%   +0.03%     
==========================================
  Files         146      146              
  Lines       26597    26618      +21     
==========================================
+ Hits        21175    21200      +25     
+ Misses       5422     5418       -4     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/6239?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/pipelines.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9waXBlbGluZXMucHk=) | `79.94% <96.00%> (+0.15%)` | :arrow_up: |
| [src/transformers/tokenization\_marian.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fbWFyaWFuLnB5) | `68.14% <0.00%> (-25.67%)` | :arrow_down: |
| [src/transformers/tokenization\_xlm\_roberta.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25feGxtX3JvYmVydGEucHk=) | `84.52% <0.00%> (-10.72%)` | :arrow_down: |
| [src/transformers/file\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9maWxlX3V0aWxzLnB5) | `80.30% <0.00%> (+0.25%)` | :arrow_up: |
| [src/transformers/generation\_tf\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9nZW5lcmF0aW9uX3RmX3V0aWxzLnB5) | `86.46% <0.00%> (+4.76%)` | :arrow_up: |
| [src/transformers/tokenization\_bart.py](https://codecov.io/gh/huggingface/transformers/pull/6239/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy90b2tlbml6YXRpb25fYmFydC5weQ==) | `95.77% <0.00%> (+35.21%)` | :arrow_up: |

------

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


> We should look at handling multi-input in the fill-mask pipeline as a whole

The fill-mask pipeline does, at least if we mean the same thing by "multi-input". It can take an arbitrarily long list of strings and return the top-k predictions for each.

Awesome. @LysandreJik am I set to merge?