|
<! |
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
|
the License. You may obtain a copy of the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
|
specific language governing permissions and limitations under the License. |
|
|
|
|
|
# BART |
|
|
|
<div class="flex flex-wrap space-x-1"> |
|
<a href="https://huggingface.co/models?filter=bart"> |
|
<img alt="Models" src="https://img.shields.io/badge/All_model_pages-bart-blueviolet"> |
|
</a> |
|
<a href="https://huggingface.co/spaces/docs-demos/bart-large-mnli"> |
|
<img alt="Spaces" src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue"> |
|
</a> |
|
</div> |
|
|
|
**DISCLAIMER:** If you see something strange, file a [Github Issue](https://github.com/huggingface/transformers/issues/new?assignees=&labels=&template=bug-report.md&title) and assign |
|
@patrickvonplaten |
|
|
|
## Overview |
|
|
|
The Bart model was proposed in [BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, |
|
Translation, and Comprehension](https://arxiv.org/abs/1910.13461) by Mike Lewis, Yinhan Liu, Naman Goyal, Marjan |
|
Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov and Luke Zettlemoyer on 29 Oct, 2019. |
|
|
|
According to the abstract, |
|
|
|
- Bart uses a standard seq2seq/machine translation architecture with a bidirectional encoder (like BERT) and a |
|
left-to-right decoder (like GPT). |
|
- The pretraining task involves randomly shuffling the order of the original sentences and a novel in-filling scheme, |
|
where spans of text are replaced with a single mask token. |
|
- BART is particularly effective when fine tuned for text generation but also works well for comprehension tasks. It |
|
matches the performance of RoBERTa with comparable training resources on GLUE and SQuAD, achieves new |
|
state-of-the-art results on a range of abstractive dialogue, question answering, and summarization tasks, with gains |
|
of up to 6 ROUGE. |
|
|
|
Tips: |
|
|
|
- BART is a model with absolute position embeddings so it's usually advised to pad the inputs on the right rather than |
|
the left. |
|
- Sequence-to-sequence model with an encoder and a decoder. Encoder is fed a corrupted version of the tokens, decoder is fed the original tokens (but has a mask to hide the future words like a regular transformers decoder). A composition of the following transformations are applied on the pretraining tasks for the encoder: |
|
|
|
* mask random tokens (like in BERT) |
|
* delete random tokens |
|
* mask a span of k tokens with a single mask token (a span of 0 tokens is an insertion of a mask token) |
|
* permute sentences |
|
* rotate the document to make it start at a specific token |
|
|
|
This model was contributed by [sshleifer](https://huggingface.co/sshleifer). The Authors' code can be found [here](https://github.com/pytorch/fairseq/tree/master/examples/bart). |
|
|
|
|
|
### Examples |
|
|
|
- Examples and scripts for fine-tuning BART and other models for sequence to sequence tasks can be found in |
|
[examples/pytorch/summarization/](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization/README.md). |
|
- An example of how to train [`BartForConditionalGeneration`] with a Hugging Face `datasets` |
|
object can be found in this [forum discussion](https://discuss.huggingface.co/t/train-bart-for-conditional-generation-e-g-summarization/1904). |
|
- [Distilled checkpoints](https://huggingface.co/models?search=distilbart) are described in this [paper](https://arxiv.org/abs/2010.13002). |
|
|
|
|
|
## Implementation Notes |
|
|
|
- Bart doesn't use `token_type_ids` for sequence classification. Use [`BartTokenizer`] or |
|
[`~BartTokenizer.encode`] to get the proper splitting. |
|
- The forward pass of [`BartModel`] will create the `decoder_input_ids` if they are not passed. |
|
This is different than some other modeling APIs. A typical use case of this feature is mask filling. |
|
- Model predictions are intended to be identical to the original implementation when |
|
`forced_bos_token_id=0`. This only works, however, if the string you pass to |
|
[`fairseq.encode`] starts with a space. |
|
- [`~generation.GenerationMixin.generate`] should be used for conditional generation tasks like |
|
summarization, see the example in that docstrings. |
|
- Models that load the *facebook/bart-large-cnn* weights will not have a `mask_token_id`, or be able to perform |
|
mask-filling tasks. |
|
|
|
## Mask Filling |
|
|
|
The `facebook/bart-base` and `facebook/bart-large` checkpoints can be used to fill multi-token masks. |
|
|
|
```python |
|
from transformers import BartForConditionalGeneration, BartTokenizer |
|
|
|
model = BartForConditionalGeneration.from_pretrained("facebook/bart-large", forced_bos_token_id=0) |
|
tok = BartTokenizer.from_pretrained("facebook/bart-large") |
|
example_english_phrase = "UN Chief Says There Is No <mask> in Syria" |
|
batch = tok(example_english_phrase, return_tensors="pt") |
|
generated_ids = model.generate(batch["input_ids"]) |
|
assert tok.batch_decode(generated_ids, skip_special_tokens=True) == [ |
|
"UN Chief Says There Is No Plan to Stop Chemical Weapons in Syria" |
|
] |
|
``` |
|
|
|
## Resources |
|
|
|
A list of official Hugging Face and community (indicated by π) resources to help you get started with BART. If you're interested in submitting a resource to be included here, please feel free to open a Pull Request and we'll review it! The resource should ideally demonstrate something new instead of duplicating an existing resource. |
|
|
|
<PipelineTag pipeline="summarization"/> |
|
|
|
- A blog post on [Distributed Training: Train BART/T5 for Summarization using π€ Transformers and Amazon SageMaker](https://huggingface.co/blog/sagemaker-distributed-training-seq2seq). |
|
- A notebook on how to [finetune BART for summarization with fastai using blurr](https://colab.research.google.com/github/ohmeow/ohmeow_website/blob/master/posts/2021-05-25-mbart-sequence-classification-with-blurr.ipynb). π |
|
- A notebook on how to [finetune BART for summarization in two languages with Trainer class](https://colab.research.google.com/github/elsanns/xai-nlp-notebooks/blob/master/fine_tune_bart_summarization_two_langs.ipynb). π |
|
- [`BartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization.ipynb). |
|
- [`TFBartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/summarization) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/summarization-tf.ipynb). |
|
- [`FlaxBartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/flax/summarization). |
|
- [Summarization](https://huggingface.co/course/chapter7/5?fw=pt#summarization) chapter of the π€ Hugging Face course. |
|
- [Summarization task guide](../tasks/summarization) |
|
|
|
<PipelineTag pipeline="fill-mask"/> |
|
|
|
- [`BartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language-modeling#robertabertdistilbert-and-masked-language-modeling) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling.ipynb). |
|
- [`TFBartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/language-modeling#run_mlmpy) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/language_modeling-tf.ipynb). |
|
- [`FlaxBartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/flax/language-modeling#masked-language-modeling) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/masked_language_modeling_flax.ipynb). |
|
- [Masked language modeling](https://huggingface.co/course/chapter7/3?fw=pt) chapter of the π€ Hugging Face Course. |
|
- [Masked language modeling task guide](../tasks/masked_language_modeling) |
|
|
|
<PipelineTag pipeline="translation"/> |
|
|
|
- A notebook on how to [finetune mBART using Seq2SeqTrainer for Hindi to English translation](https://colab.research.google.com/github/vasudevgupta7/huggingface-tutorials/blob/main/translation_training.ipynb). π |
|
- [`BartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/translation) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation.ipynb). |
|
- [`TFBartForConditionalGeneration`] is supported by this [example script](https://github.com/huggingface/transformers/tree/main/examples/tensorflow/translation) and [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/translation-tf.ipynb). |
|
- [Translation task guide](../tasks/translation) |
|
|
|
See also: |
|
- [Text classification task guide](../tasks/sequence_classification) |
|
- [Question answering task guide](../tasks/question_answering) |
|
- [Causal language modeling task guide](../tasks/language_modeling) |
|
|
|
## BartConfig |
|
|
|
[[autodoc]] BartConfig |
|
- all |
|
|
|
## BartTokenizer |
|
|
|
[[autodoc]] BartTokenizer |
|
- all |
|
|
|
## BartTokenizerFast |
|
|
|
[[autodoc]] BartTokenizerFast |
|
- all |
|
|
|
## BartModel |
|
|
|
[[autodoc]] BartModel |
|
- forward |
|
|
|
## BartForConditionalGeneration |
|
|
|
[[autodoc]] BartForConditionalGeneration |
|
- forward |
|
|
|
## BartForSequenceClassification |
|
|
|
[[autodoc]] BartForSequenceClassification |
|
- forward |
|
|
|
## BartForQuestionAnswering |
|
|
|
[[autodoc]] BartForQuestionAnswering |
|
- forward |
|
|
|
## BartForCausalLM |
|
|
|
[[autodoc]] BartForCausalLM |
|
- forward |
|
|
|
## TFBartModel |
|
|
|
[[autodoc]] TFBartModel |
|
- call |
|
|
|
## TFBartForConditionalGeneration |
|
|
|
[[autodoc]] TFBartForConditionalGeneration |
|
- call |
|
|
|
## TFBartForSequenceClassification |
|
|
|
[[autodoc]] TFBartForSequenceClassification |
|
- call |
|
|
|
## FlaxBartModel |
|
|
|
[[autodoc]] FlaxBartModel |
|
- __call__ |
|
- encode |
|
- decode |
|
|
|
## FlaxBartForConditionalGeneration |
|
|
|
[[autodoc]] FlaxBartForConditionalGeneration |
|
- __call__ |
|
- encode |
|
- decode |
|
|
|
## FlaxBartForSequenceClassification |
|
|
|
[[autodoc]] FlaxBartForSequenceClassification |
|
- __call__ |
|
- encode |
|
- decode |
|
|
|
## FlaxBartForQuestionAnswering |
|
|
|
[[autodoc]] FlaxBartForQuestionAnswering |
|
- __call__ |
|
- encode |
|
- decode |
|
|
|
## FlaxBartForCausalLM |
|
|
|
[[autodoc]] FlaxBartForCausalLM |
|
- __call__ |
|
|