mirror of
https://github.com/huggingface/transformers.git
synced 2025-07-22 14:00:33 +06:00

* First commit: adding all files from tapas_v3 * Fix multiple bugs including soft dependency and new structure of the library * Improve testing by adding torch_device to inputs and adding dependency on scatter * Use Python 3 inheritance rather than Python 2 * First draft model cards of base sized models * Remove model cards as they are already on the hub * Fix multiple bugs with integration tests * All model integration tests pass * Remove print statement * Add test for convert_logits_to_predictions method of TapasTokenizer * Incorporate suggestions by Google authors * Fix remaining tests * Change position embeddings sizes to 512 instead of 1024 * Comment out positional embedding sizes * Update PRETRAINED_VOCAB_FILES_MAP and PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES * Added more model names * Fix truncation when no max length is specified * Disable torchscript test * Make style & make quality * Quality * Address CI needs * Test the Masked LM model * Fix the masked LM model * Truncate when overflowing * More much needed docs improvements * Fix some URLs * Some more docs improvements * Test PyTorch scatter * Set to slow + minify * Calm flake8 down * First commit: adding all files from tapas_v3 * Fix multiple bugs including soft dependency and new structure of the library * Improve testing by adding torch_device to inputs and adding dependency on scatter * Use Python 3 inheritance rather than Python 2 * First draft model cards of base sized models * Remove model cards as they are already on the hub * Fix multiple bugs with integration tests * All model integration tests pass * Remove print statement * Add test for convert_logits_to_predictions method of TapasTokenizer * Incorporate suggestions by Google authors * Fix remaining tests * Change position embeddings sizes to 512 instead of 1024 * Comment out positional embedding sizes * Update PRETRAINED_VOCAB_FILES_MAP and PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES * Added more model names * Fix truncation when no max length is specified * Disable torchscript test * Make style & make quality * Quality * Address CI needs * Test the Masked LM model * Fix the masked LM model * Truncate when overflowing * More much needed docs improvements * Fix some URLs * Some more docs improvements * Add add_pooling_layer argument to TapasModel Fix comments by @sgugger and @patrickvonplaten * Fix issue in docs + fix style and quality * Clean up conversion script and add task parameter to TapasConfig * Revert the task parameter of TapasConfig Some minor fixes * Improve conversion script and add test for absolute position embeddings * Improve conversion script and add test for absolute position embeddings * Fix bug with reset_position_index_per_cell arg of the conversion cli * Add notebooks to the examples directory and fix style and quality * Apply suggestions from code review * Move from `nielsr/` to `google/` namespace * Apply Sylvain's comments Co-authored-by: sgugger <sylvain.gugger@gmail.com> Co-authored-by: Rogge Niels <niels.rogge@howest.be> Co-authored-by: LysandreJik <lysandre.debut@reseau.eseo.fr> Co-authored-by: Lysandre Debut <lysandre@huggingface.co> Co-authored-by: sgugger <sylvain.gugger@gmail.com>
123 lines
6.3 KiB
Markdown
123 lines
6.3 KiB
Markdown
---
|
|
language: en
|
|
tags:
|
|
- tapas
|
|
- masked-lm
|
|
license: apache-2.0
|
|
---
|
|
|
|
# TAPAS base model
|
|
|
|
This model corresponds to the `tapas_inter_masklm_base_reset` checkpoint of the [original Github repository](https://github.com/google-research/tapas).
|
|
|
|
Disclaimer: The team releasing TAPAS did not write a model card for this model so this model card has been written by
|
|
the Hugging Face team and contributors.
|
|
|
|
## Model description
|
|
|
|
TAPAS is a BERT-like transformers model pretrained on a large corpus of English data from Wikipedia in a self-supervised fashion.
|
|
This means it was pretrained on the raw tables and associated texts only, with no humans labelling them in any way (which is why it
|
|
can use lots of publicly available data) with an automatic process to generate inputs and labels from those texts. More precisely, it
|
|
was pretrained with two objectives:
|
|
|
|
- Masked language modeling (MLM): taking a (flattened) table and associated context, the model randomly masks 15% of the words in
|
|
the input, then runs the entire (partially masked) sequence through the model. The model then has to predict the masked words.
|
|
This is different from traditional recurrent neural networks (RNNs) that usually see the words one after the other,
|
|
or from autoregressive models like GPT which internally mask the future tokens. It allows the model to learn a bidirectional
|
|
representation of a table and associated text.
|
|
- Intermediate pre-training: to encourage numerical reasoning on tables, the authors additionally pre-trained the model by creating
|
|
a balanced dataset of millions of syntactically created training examples. Here, the model must predict (classify) whether a sentence
|
|
is supported or refuted by the contents of a table. The training examples are created based on synthetic as well as counterfactual statements.
|
|
|
|
This way, the model learns an inner representation of the English language used in tables and associated texts, which can then be used
|
|
to extract features useful for downstream tasks such as answering questions about a table, or determining whether a sentence is entailed
|
|
or refuted by the contents of a table. Fine-tuning is done by adding classification heads on top of the pre-trained model, and then jointly
|
|
train the randomly initialized classification heads with the base model on a labelled dataset.
|
|
|
|
## Intended uses & limitations
|
|
|
|
You can use the raw model for masked language modeling, but it's mostly intended to be fine-tuned on a downstream task.
|
|
See the [model hub](https://huggingface.co/models?filter=tapas) to look for fine-tuned versions on a task that interests you.
|
|
|
|
|
|
Here is how to use this model to get the features of a given table-text pair in PyTorch:
|
|
|
|
```python
|
|
from transformers import TapasTokenizer, TapasModel
|
|
import pandas as pd
|
|
tokenizer = TapasTokenizer.from_pretrained('tapase-base')
|
|
model = TapasModel.from_pretrained("tapas-base")
|
|
data = {'Actors': ["Brad Pitt", "Leonardo Di Caprio", "George Clooney"],
|
|
'Age': ["56", "45", "59"],
|
|
'Number of movies': ["87", "53", "69"]
|
|
}
|
|
table = pd.DataFrame.from_dict(data)
|
|
queries = ["How many movies has George Clooney played in?"]
|
|
text = "Replace me by any text you'd like."
|
|
encoded_input = tokenizer(table=table, queries=queries, return_tensors='pt')
|
|
output = model(**encoded_input)
|
|
```
|
|
|
|
## Training data
|
|
|
|
For masked language modeling (MLM), a collection of 6.2 million tables was extracted from English Wikipedia: 3.3M of class [Infobox](https://en.wikipedia.org/wiki/Help:Infobox)
|
|
and 2.9M of class WikiTable. The author only considered tables with at most 500 cells. As a proxy for questions that appear in the
|
|
downstream tasks, the authros extracted the table caption, article title, article description, segment title and text of the segment
|
|
the table occurs in as relevant text snippets. In this way, 21.3M snippets were created. For more info, see the original [TAPAS paper](https://www.aclweb.org/anthology/2020.acl-main.398.pdf).
|
|
|
|
For intermediate pre-training, 2 tasks are introduced: one based on synthetic and the other from counterfactual statements. The first one
|
|
generates a sentence by sampling from a set of logical expressions that filter, combine and compare the information on the table, which is
|
|
required in table entailment (e.g., knowing that Gerald Ford is taller than the average president requires summing
|
|
all presidents and dividing by the number of presidents). The second one corrupts sentences about tables appearing on Wikipedia by swapping
|
|
entities for plausible alternatives. Examples of the two tasks can be seen in Figure 1. The procedure is described in detail in section 3 of
|
|
the [TAPAS follow-up paper](https://www.aclweb.org/anthology/2020.findings-emnlp.27.pdf).
|
|
|
|
## Training procedure
|
|
|
|
### Preprocessing
|
|
|
|
The texts are lowercased and tokenized using WordPiece and a vocabulary size of 30,000. The inputs of the model are
|
|
then of the form:
|
|
|
|
```
|
|
[CLS] Context [SEP] Flattened table [SEP]
|
|
```
|
|
|
|
The details of the masking procedure for each sequence are the following:
|
|
- 15% of the tokens are masked.
|
|
- In 80% of the cases, the masked tokens are replaced by `[MASK]`.
|
|
- In 10% of the cases, the masked tokens are replaced by a random token (different) from the one they replace.
|
|
- In the 10% remaining cases, the masked tokens are left as is.
|
|
|
|
The details of the creation of the synthetic and counterfactual examples can be found in the [follow-up paper](https://arxiv.org/abs/2010.00571).
|
|
|
|
### Pretraining
|
|
|
|
The model was trained on 32 Cloud TPU v3 cores for one million steps with maximum sequence length 512 and batch size of 512.
|
|
In this setup, pre-training takes around 3 days. The optimizer used is Adam with a learning rate of 5e-5, and a warmup ratio
|
|
of 0.10.
|
|
|
|
|
|
### BibTeX entry and citation info
|
|
|
|
```bibtex
|
|
@misc{herzig2020tapas,
|
|
title={TAPAS: Weakly Supervised Table Parsing via Pre-training},
|
|
author={Jonathan Herzig and Paweł Krzysztof Nowak and Thomas Müller and Francesco Piccinno and Julian Martin Eisenschlos},
|
|
year={2020},
|
|
eprint={2004.02349},
|
|
archivePrefix={arXiv},
|
|
primaryClass={cs.IR}
|
|
}
|
|
```
|
|
|
|
```bibtex
|
|
@misc{eisenschlos2020understanding,
|
|
title={Understanding tables with intermediate pre-training},
|
|
author={Julian Martin Eisenschlos and Syrine Krichene and Thomas Müller},
|
|
year={2020},
|
|
eprint={2010.00571},
|
|
archivePrefix={arXiv},
|
|
primaryClass={cs.CL}
|
|
}
|
|
``` |