TableQuestionAnsweringPipeline
Author: LysandreJik
Pull request: yes

## TableQuestionAnsweringPipeline

Introduces the `TableQuestionAnsweringPipeline` which will be used for the `TableQuestionAnswering` widget:

<p align="center">
    <img src="https://user-images.githubusercontent.com/30755778/102266591-a9606880-3ee6-11eb-9f16-7173a9a85b58.gif" width="500">
</p>

There are examples of usage within the documentation, but here are some others if you want to give it a spin:

### WTQ and aggregators

```py
tqa_pipeline = pipeline("table-question-answering")

data = {
    "Repository": ["Transformers", "Datasets", "Tokenizers"],
    "Stars": ["36542", "4512", "3934"],
    "Contributors": ["651", "77", "34"],
    "Programming language": ["Python", "Python", "Rust, Python and NodeJS"],
}
table = pd.DataFrame.from_dict(data)
queries = [
    "What repository has the largest number of stars?",
    "Given that the numbers of stars defines if a repository is active, what repository is the most active?",
    "What is the number of repositories?",
    "What is the average number of stars?",
    "What is the total amount of stars?"
]

outputs = tqa_pipeline(table, queries)
print(outputs)
```
This outputs the following (given that the aggregator setup is respected in the model configuration, which won't be the case until the configuration changes as proposed here are accepted):
```
[
    {'answer': 'Transformers', 'coordinates': [(0, 0)], 'cells': ['Transformers'], 'aggregator': 'NONE'}, 
    {'answer': 'Transformers', 'coordinates': [(0, 0)], 'cells': ['Transformers'], 'aggregator': 'NONE'}, 
    {'answer': 'COUNT > Transformers, Datasets, Tokenizers', 'coordinates': [(0, 0), (1, 0), (2, 0)], 'cells': ['Transformers', 'Datasets', 'Tokenizers'], 'aggregator': 'COUNT'}, 
    {'answer': 'AVERAGE > 36542, 4512, 3934', 'coordinates': [(0, 1), (1, 1), (2, 1)], 'cells': ['36542', '4512', '3934'], 'aggregator': 'AVERAGE'}, 
    {'answer': 'SUM > 36542, 4512, 3934', 'coordinates': [(0, 1), (1, 1), (2, 1)], 'cells': ['36542', '4512', '3934'], 'aggregator': 'SUM'}
]

```

Please note the aggregators, their presence in the answer when they exist, and their absence when they do not.

### SQA and sequential inference

```py
data = {'Actors': ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
        'Age': ["56", "45", "59"],
        'Number of movies': ["87", "53", "69"],
        'Date of birth': ["7 february 1967", "10 june 1996", "28 november 1967"]}
queries = ["How many movies has George Clooney played in?", "How old is he?", "What's his date of birth?"]
table = pd.DataFrame.from_dict(data)

tqa_pipeline = pipeline("table-question-answering", model="nielsr/tapas-base-finetuned-sqa", tokenizer="nielsr/tapas-base-finetuned-sqa")

outputs = tqa_pipeline(table, queries, sequential=True)
print(outputs)
```
This outputs the following:
```
[
    {'answer': '69', 'coordinates': [(2, 2)], 'cells': ['69']}, 
    {'answer': '59', 'coordinates': [(2, 1)], 'cells': ['59']}, 
    {'answer': '28 november 1967', 'coordinates': [(2, 3)], 'cells': ['28 november 1967']}
]
```
Please note the relationship between questions ("how old is he", who is "he"?) and the correct answers given by the model. One can try passing `sequential=False` and obtain vastly different results.

Here is the [documentation page](https://138478-155220641-gh.circle-artifacts.com/0/docs/_build/html/main_classes/pipelines.html#transformers.TableQuestionAnsweringPipeline).

Comments:
@NielsRogge I can't ping you for review but I would love your input on this!

Thanks for your comments @patrickvonplaten @sgugger, applied your changes. This PR includes the `AutoModelForTableQuestionAnswering` defined [here](https://github.com/huggingface/transformers/pull/9154), adds a check on `pandas` which will raise an error with how to install it if necessary, and will raise an error if the `tf` framework was specified.

Instantiating a pipeline with the following:
```py
tqa_pipeline = pipeline("table-question-answering", framework="tf")
```
yields:
```
ValueError: Pipeline using tf framework, but this framework is not supported by this pipeline.
```

Instantiating the pipeline without having pandas installed:
```py
tqa_pipeline = pipeline("table-question-answering")
```
yields:
```
ImportError: Pandas is required for the TAPAS tokenizer.
```