chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# Fine-tuning BART on GLUE tasks
|
||||
|
||||
### 1) Download the data from GLUE website (https://gluebenchmark.com/tasks) using following commands:
|
||||
```bash
|
||||
wget https://gist.githubusercontent.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e/raw/17b8dd0d724281ed7c3b2aeeda662b92809aadd5/download_glue_data.py
|
||||
python download_glue_data.py --data_dir glue_data --tasks all
|
||||
```
|
||||
|
||||
### 2) Preprocess GLUE task data (same as RoBERTa):
|
||||
```bash
|
||||
./examples/roberta/preprocess_GLUE_tasks.sh glue_data <glue_task_name>
|
||||
```
|
||||
`glue_task_name` is one of the following:
|
||||
`{ALL, QQP, MNLI, QNLI, MRPC, RTE, STS-B, SST-2, CoLA}`
|
||||
Use `ALL` for preprocessing all the glue tasks.
|
||||
|
||||
### 3) Fine-tuning on GLUE task:
|
||||
Example fine-tuning cmd for `RTE` task
|
||||
```bash
|
||||
TOTAL_NUM_UPDATES=2036 # 10 epochs through RTE for bsz 16
|
||||
WARMUP_UPDATES=61 # 6 percent of the number of updates
|
||||
LR=1e-05 # Peak LR for polynomial LR scheduler.
|
||||
NUM_CLASSES=2
|
||||
MAX_SENTENCES=16 # Batch size.
|
||||
BART_PATH=/path/to/bart/model.pt
|
||||
|
||||
CUDA_VISIBLE_DEVICES=0,1 fairseq-train RTE-bin/ \
|
||||
--restore-file $BART_PATH \
|
||||
--batch-size $MAX_SENTENCES \
|
||||
--max-tokens 4400 \
|
||||
--task sentence_prediction \
|
||||
--add-prev-output-tokens \
|
||||
--layernorm-embedding \
|
||||
--share-all-embeddings \
|
||||
--share-decoder-input-output-embed \
|
||||
--reset-optimizer --reset-dataloader --reset-meters \
|
||||
--required-batch-size-multiple 1 \
|
||||
--init-token 0 \
|
||||
--arch bart_large \
|
||||
--criterion sentence_prediction \
|
||||
--num-classes $NUM_CLASSES \
|
||||
--dropout 0.1 --attention-dropout 0.1 \
|
||||
--weight-decay 0.01 --optimizer adam --adam-betas "(0.9, 0.98)" --adam-eps 1e-08 \
|
||||
--clip-norm 0.0 \
|
||||
--lr-scheduler polynomial_decay --lr $LR --total-num-update $TOTAL_NUM_UPDATES --warmup-updates $WARMUP_UPDATES \
|
||||
--fp16 --fp16-init-scale 4 --threshold-loss-scale 1 --fp16-scale-window 128 \
|
||||
--max-epoch 10 \
|
||||
--find-unused-parameters \
|
||||
--best-checkpoint-metric accuracy --maximize-best-checkpoint-metric;
|
||||
```
|
||||
|
||||
For each of the GLUE task, you will need to use following cmd-line arguments:
|
||||
|
||||
Model | MNLI | QNLI | QQP | RTE | SST-2 | MRPC | CoLA | STS-B
|
||||
---|---|---|---|---|---|---|---|---
|
||||
`--num-classes` | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 1
|
||||
`--lr` | 5e-6 | 1e-5 | 1e-5 | 1e-5 | 5e-6 | 2e-5 | 2e-5 | 2e-5
|
||||
`bsz` | 128 | 32 | 32 | 32 | 128 | 64 | 64 | 32
|
||||
`--total-num-update` | 30968 | 33112 | 113272 | 1018 | 5233 | 1148 | 1334 | 1799
|
||||
`--warmup-updates` | 1858 | 1986 | 6796 | 61 | 314 | 68 | 80 | 107
|
||||
|
||||
For `STS-B` additionally add `--regression-target --best-checkpoint-metric loss` and remove `--maximize-best-checkpoint-metric`.
|
||||
|
||||
**Note:**
|
||||
|
||||
a) `--total-num-updates` is used by `--polynomial_decay` scheduler and is calculated for `--max-epoch=10` and `--batch-size=32/64/128` depending on the task.
|
||||
|
||||
b) Above cmd-args and hyperparams are tested on Nvidia `V100` GPU with `32gb` of memory for each task. Depending on the GPU memory resources available to you, you can use increase `--update-freq` and reduce `--batch-size`.
|
||||
|
||||
### Inference on GLUE task
|
||||
After training the model as mentioned in previous step, you can perform inference with checkpoints in `checkpoints/` directory using following python code snippet:
|
||||
|
||||
```python
|
||||
from fairseq.models.bart import BARTModel
|
||||
|
||||
bart = BARTModel.from_pretrained(
|
||||
'checkpoints/',
|
||||
checkpoint_file='checkpoint_best.pt',
|
||||
data_name_or_path='RTE-bin'
|
||||
)
|
||||
|
||||
label_fn = lambda label: bart.task.label_dictionary.string(
|
||||
[label + bart.task.label_dictionary.nspecial]
|
||||
)
|
||||
ncorrect, nsamples = 0, 0
|
||||
bart.cuda()
|
||||
bart.eval()
|
||||
with open('glue_data/RTE/dev.tsv') as fin:
|
||||
fin.readline()
|
||||
for index, line in enumerate(fin):
|
||||
tokens = line.strip().split('\t')
|
||||
sent1, sent2, target = tokens[1], tokens[2], tokens[3]
|
||||
tokens = bart.encode(sent1, sent2)
|
||||
prediction = bart.predict('sentence_classification_head', tokens).argmax().item()
|
||||
prediction_label = label_fn(prediction)
|
||||
ncorrect += int(prediction_label == target)
|
||||
nsamples += 1
|
||||
print('| Accuracy: ', float(ncorrect)/float(nsamples))
|
||||
```
|
||||
@@ -0,0 +1,243 @@
|
||||
# BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
|
||||
|
||||
[https://arxiv.org/pdf/1910.13461.pdf]
|
||||
|
||||
## Introduction
|
||||
|
||||
BART is sequence-to-sequence model trained with denoising as pretraining objective. We show that this pretraining objective is more generic and show that we can match [RoBERTa](../roberta) results on SQuAD and GLUE and gain state-of-the-art results on summarization (XSum, CNN dataset), long form generative question answering (ELI5) and dialog response genration (ConvAI2). See the associated paper for more details.
|
||||
|
||||
## Pre-trained models
|
||||
|
||||
Model | Description | # params | Download
|
||||
---|---|---|---
|
||||
`bart.base` | BART model with 6 encoder and decoder layers | 140M | [bart.base.tar.gz](https://dl.fbaipublicfiles.com/fairseq/models/bart.base.tar.gz)
|
||||
`bart.large` | BART model with 12 encoder and decoder layers | 400M | [bart.large.tar.gz](https://dl.fbaipublicfiles.com/fairseq/models/bart.large.tar.gz)
|
||||
`bart.large.mnli` | `bart.large` finetuned on `MNLI` | 400M | [bart.large.mnli.tar.gz](https://dl.fbaipublicfiles.com/fairseq/models/bart.large.mnli.tar.gz)
|
||||
`bart.large.cnn` | `bart.large` finetuned on `CNN-DM` | 400M | [bart.large.cnn.tar.gz](https://dl.fbaipublicfiles.com/fairseq/models/bart.large.cnn.tar.gz)
|
||||
`bart.large.xsum` | `bart.large` finetuned on `Xsum` | 400M | [bart.large.xsum.tar.gz](https://dl.fbaipublicfiles.com/fairseq/models/bart.large.xsum.tar.gz)
|
||||
|
||||
## Results
|
||||
|
||||
**[GLUE (Wang et al., 2019)](https://gluebenchmark.com/)**
|
||||
_(dev set, single model, single-task finetuning)_
|
||||
|
||||
Model | MNLI | QNLI | QQP | RTE | SST-2 | MRPC | CoLA | STS-B
|
||||
---|---|---|---|---|---|---|---|---
|
||||
`roberta.large` | 90.2 | 94.7 | 92.2 | 86.6 | 96.4 | 90.9 | 68.0 | 92.4
|
||||
`bart.large` | 89.9 | 94.9 | 92.5 | 87.0 | 96.6 | 90.4 | 62.8 | 91.2
|
||||
|
||||
**[SQuAD (Rajpurkar et al., 2018)](https://rajpurkar.github.io/SQuAD-explorer/)**
|
||||
_(dev set, no additional data used)_
|
||||
|
||||
Model | SQuAD 1.1 EM/F1 | SQuAD 2.0 EM/F1
|
||||
---|---|---
|
||||
`roberta.large` | 88.9/94.6 | 86.5/89.4
|
||||
`bart.large` | 88.8/94.6 | 86.1/89.2
|
||||
|
||||
**[CNN/Daily Mail](http://nlpprogress.com/english/summarization.html)**
|
||||
_(test set, no additional data used)_
|
||||
|
||||
Model | R1 | R2 | RL
|
||||
---|---|---|---
|
||||
`BERTSUMEXTABS` | 42.13 | 19.60 | 39.18
|
||||
`bart.large` | 44.16 | 21.28 | 40.90
|
||||
|
||||
## Example usage
|
||||
|
||||
##### Load BART from torch.hub (PyTorch >= 1.1):
|
||||
```python
|
||||
import torch
|
||||
bart = torch.hub.load('pytorch/fairseq', 'bart.large')
|
||||
bart.eval() # disable dropout (or leave in train mode to finetune)
|
||||
```
|
||||
|
||||
##### Load BART (for PyTorch 1.0 or custom models):
|
||||
```python
|
||||
# Download bart.large model
|
||||
wget https://dl.fbaipublicfiles.com/fairseq/models/bart.large.tar.gz
|
||||
tar -xzvf bart.large.tar.gz
|
||||
|
||||
# Load the model in fairseq
|
||||
from fairseq.models.bart import BARTModel
|
||||
bart = BARTModel.from_pretrained('/path/to/bart.large', checkpoint_file='model.pt')
|
||||
bart.eval() # disable dropout (or leave in train mode to finetune)
|
||||
```
|
||||
|
||||
##### Apply Byte-Pair Encoding (BPE) to input text:
|
||||
```python
|
||||
tokens = bart.encode('Hello world!')
|
||||
assert tokens.tolist() == [0, 31414, 232, 328, 2]
|
||||
bart.decode(tokens) # 'Hello world!'
|
||||
```
|
||||
|
||||
##### Extract features from BART:
|
||||
```python
|
||||
# Extract the last layer's features
|
||||
last_layer_features = bart.extract_features(tokens)
|
||||
assert last_layer_features.size() == torch.Size([1, 5, 1024])
|
||||
|
||||
# Extract all layer's features from decoder (layer 0 is the embedding layer)
|
||||
all_layers = bart.extract_features(tokens, return_all_hiddens=True)
|
||||
assert len(all_layers) == 13
|
||||
assert torch.all(all_layers[-1] == last_layer_features)
|
||||
```
|
||||
|
||||
##### Use BART for sentence-pair classification tasks:
|
||||
```python
|
||||
# Download BART already finetuned for MNLI
|
||||
bart = torch.hub.load('pytorch/fairseq', 'bart.large.mnli')
|
||||
bart.eval() # disable dropout for evaluation
|
||||
|
||||
# Encode a pair of sentences and make a prediction
|
||||
tokens = bart.encode('BART is a seq2seq model.', 'BART is not sequence to sequence.')
|
||||
bart.predict('mnli', tokens).argmax() # 0: contradiction
|
||||
|
||||
# Encode another pair of sentences
|
||||
tokens = bart.encode('BART is denoising autoencoder.', 'BART is version of autoencoder.')
|
||||
bart.predict('mnli', tokens).argmax() # 2: entailment
|
||||
```
|
||||
|
||||
##### Register a new (randomly initialized) classification head:
|
||||
```python
|
||||
bart.register_classification_head('new_task', num_classes=3)
|
||||
logprobs = bart.predict('new_task', tokens)
|
||||
```
|
||||
|
||||
##### Batched prediction:
|
||||
```python
|
||||
import torch
|
||||
from fairseq.data.data_utils import collate_tokens
|
||||
|
||||
bart = torch.hub.load('pytorch/fairseq', 'bart.large.mnli')
|
||||
bart.eval()
|
||||
|
||||
batch_of_pairs = [
|
||||
['BART is a seq2seq model.', 'BART is not sequence to sequence.'],
|
||||
['BART is denoising autoencoder.', 'BART is version of autoencoder.'],
|
||||
]
|
||||
|
||||
batch = collate_tokens(
|
||||
[bart.encode(pair[0], pair[1]) for pair in batch_of_pairs], pad_idx=1
|
||||
)
|
||||
|
||||
logprobs = bart.predict('mnli', batch)
|
||||
print(logprobs.argmax(dim=1))
|
||||
# tensor([0, 2])
|
||||
```
|
||||
|
||||
##### Using the GPU:
|
||||
```python
|
||||
bart.cuda()
|
||||
bart.predict('new_task', tokens)
|
||||
```
|
||||
|
||||
#### Filling masks:
|
||||
|
||||
BART can be used to fill multiple `<mask>` tokens in the input.
|
||||
```python
|
||||
bart = torch.hub.load('pytorch/fairseq', 'bart.base')
|
||||
bart.eval()
|
||||
bart.fill_mask(['The cat <mask> on the <mask>.'], topk=3, beam=10)
|
||||
# [[('The cat was on the ground.', tensor(-0.6183)), ('The cat was on the floor.', tensor(-0.6798)), ('The cat sleeps on the couch.', tensor(-0.6830))]]
|
||||
```
|
||||
|
||||
Note that by default we enforce the output length to match the input length.
|
||||
This can be disabled by setting ``match_source_len=False``:
|
||||
```
|
||||
bart.fill_mask(['The cat <mask> on the <mask>.'], topk=3, beam=10, match_source_len=False)
|
||||
# [[('The cat was on the ground.', tensor(-0.6185)), ('The cat was asleep on the couch.', tensor(-0.6276)), ('The cat was on the floor.', tensor(-0.6800))]]
|
||||
```
|
||||
|
||||
Example code to fill masks for a batch of sentences using GPU
|
||||
```
|
||||
bart.cuda()
|
||||
bart.fill_mask(['The cat <mask> on the <mask>.', 'The dog <mask> on the <mask>.'], topk=3, beam=10)
|
||||
# [[('The cat was on the ground.', tensor(-0.6183)), ('The cat was on the floor.', tensor(-0.6798)), ('The cat sleeps on the couch.', tensor(-0.6830))], [('The dog was on the ground.', tensor(-0.6190)), ('The dog lay on the ground.', tensor(-0.6711)),
|
||||
('The dog was asleep on the couch', tensor(-0.6796))]]
|
||||
```
|
||||
|
||||
#### Evaluating the `bart.large.mnli` model:
|
||||
|
||||
Example python code snippet to evaluate accuracy on the MNLI `dev_matched` set.
|
||||
```python
|
||||
label_map = {0: 'contradiction', 1: 'neutral', 2: 'entailment'}
|
||||
ncorrect, nsamples = 0, 0
|
||||
bart.cuda()
|
||||
bart.eval()
|
||||
with open('glue_data/MNLI/dev_matched.tsv') as fin:
|
||||
fin.readline()
|
||||
for index, line in enumerate(fin):
|
||||
tokens = line.strip().split('\t')
|
||||
sent1, sent2, target = tokens[8], tokens[9], tokens[-1]
|
||||
tokens = bart.encode(sent1, sent2)
|
||||
prediction = bart.predict('mnli', tokens).argmax().item()
|
||||
prediction_label = label_map[prediction]
|
||||
ncorrect += int(prediction_label == target)
|
||||
nsamples += 1
|
||||
print('| Accuracy: ', float(ncorrect)/float(nsamples))
|
||||
# Expected output: 0.9010
|
||||
```
|
||||
|
||||
#### Evaluating the `bart.large.cnn` model:
|
||||
Follow instructions [here](https://github.com/abisee/cnn-dailymail) to download and process into data-files such that `test.source` and `test.target` has one line for each non-tokenized sample.
|
||||
|
||||
```python
|
||||
bart = torch.hub.load('pytorch/fairseq', 'bart.large.cnn')
|
||||
bart.cuda()
|
||||
bart.eval()
|
||||
bart.half()
|
||||
count = 1
|
||||
bsz = 32
|
||||
with open('test.source') as source, open('test.hypo', 'w') as fout:
|
||||
sline = source.readline().strip()
|
||||
slines = [sline]
|
||||
for sline in source:
|
||||
if count % bsz == 0:
|
||||
with torch.no_grad():
|
||||
hypotheses_batch = bart.sample(slines, beam=4, lenpen=2.0, max_len_b=140, min_len=55, no_repeat_ngram_size=3)
|
||||
|
||||
for hypothesis in hypotheses_batch:
|
||||
fout.write(hypothesis + '\n')
|
||||
fout.flush()
|
||||
slines = []
|
||||
|
||||
slines.append(sline.strip())
|
||||
count += 1
|
||||
if slines != []:
|
||||
hypotheses_batch = bart.sample(slines, beam=4, lenpen=2.0, max_len_b=140, min_len=55, no_repeat_ngram_size=3)
|
||||
for hypothesis in hypotheses_batch:
|
||||
fout.write(hypothesis + '\n')
|
||||
fout.flush()
|
||||
```
|
||||
|
||||
Install `files2rouge` from [here](https://github.com/pltrdy/files2rouge).
|
||||
|
||||
```bash
|
||||
export CLASSPATH=/path/to/stanford-corenlp-full-2016-10-31/stanford-corenlp-3.7.0.jar
|
||||
|
||||
# Tokenize hypothesis and target files.
|
||||
cat test.hypo | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.tokenized
|
||||
cat test.target | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.target
|
||||
files2rouge test.hypo.tokenized test.hypo.target
|
||||
# Expected output: (ROUGE-2 Average_F: 0.21238)
|
||||
```
|
||||
|
||||
|
||||
## Finetuning
|
||||
|
||||
- [Finetuning on GLUE](README.glue.md)
|
||||
- [Finetuning on CNN-DM](README.summarization.md)
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
@article{lewis2019bart,
|
||||
title = {BART: Denoising Sequence-to-Sequence Pre-training for Natural
|
||||
Language Generation, Translation, and Comprehension},
|
||||
author = {Mike Lewis and Yinhan Liu and Naman Goyal and Marjan Ghazvininejad and
|
||||
Abdelrahman Mohamed and Omer Levy and Veselin Stoyanov
|
||||
and Luke Zettlemoyer },
|
||||
journal={arXiv preprint arXiv:1910.13461},
|
||||
year = {2019},
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,121 @@
|
||||
# Fine-tuning BART on CNN-Dailymail summarization task
|
||||
|
||||
### 1) Download the CNN and Daily Mail data and preprocess it into data files with non-tokenized cased samples.
|
||||
|
||||
Follow the instructions [here](https://github.com/abisee/cnn-dailymail) to download the original CNN and Daily Mail datasets. To preprocess the data, refer to the pointers in [this issue](https://github.com/pytorch/fairseq/issues/1391) or check out the code [here](https://github.com/artmatsak/cnn-dailymail).
|
||||
|
||||
Follow the instructions [here](https://github.com/EdinburghNLP/XSum) to download the original Extreme Summarization datasets, or check out the code [here](https://github.com/EdinburghNLP/XSum/tree/master/XSum-Dataset), Please keep the raw dataset and make sure no tokenization nor BPE on the dataset.
|
||||
|
||||
### 2) BPE preprocess:
|
||||
|
||||
```bash
|
||||
wget -N 'https://dl.fbaipublicfiles.com/fairseq/gpt2_bpe/encoder.json'
|
||||
wget -N 'https://dl.fbaipublicfiles.com/fairseq/gpt2_bpe/vocab.bpe'
|
||||
wget -N 'https://dl.fbaipublicfiles.com/fairseq/gpt2_bpe/dict.txt'
|
||||
|
||||
TASK=cnn_dm
|
||||
for SPLIT in train val
|
||||
do
|
||||
for LANG in source target
|
||||
do
|
||||
python -m examples.roberta.multiprocessing_bpe_encoder \
|
||||
--encoder-json encoder.json \
|
||||
--vocab-bpe vocab.bpe \
|
||||
--inputs "$TASK/$SPLIT.$LANG" \
|
||||
--outputs "$TASK/$SPLIT.bpe.$LANG" \
|
||||
--workers 60 \
|
||||
--keep-empty;
|
||||
done
|
||||
done
|
||||
```
|
||||
|
||||
### 3) Binarize dataset:
|
||||
```bash
|
||||
fairseq-preprocess \
|
||||
--source-lang "source" \
|
||||
--target-lang "target" \
|
||||
--trainpref "${TASK}/train.bpe" \
|
||||
--validpref "${TASK}/val.bpe" \
|
||||
--destdir "${TASK}-bin/" \
|
||||
--workers 60 \
|
||||
--srcdict dict.txt \
|
||||
--tgtdict dict.txt;
|
||||
```
|
||||
|
||||
### 4) Fine-tuning on CNN-DM summarization task:
|
||||
Example fine-tuning CNN-DM
|
||||
```bash
|
||||
TOTAL_NUM_UPDATES=20000
|
||||
WARMUP_UPDATES=500
|
||||
LR=3e-05
|
||||
MAX_TOKENS=2048
|
||||
UPDATE_FREQ=4
|
||||
BART_PATH=/path/to/bart/model.pt
|
||||
|
||||
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 fairseq-train cnn_dm-bin \
|
||||
--restore-file $BART_PATH \
|
||||
--max-tokens $MAX_TOKENS \
|
||||
--task translation \
|
||||
--source-lang source --target-lang target \
|
||||
--truncate-source \
|
||||
--layernorm-embedding \
|
||||
--share-all-embeddings \
|
||||
--share-decoder-input-output-embed \
|
||||
--reset-optimizer --reset-dataloader --reset-meters \
|
||||
--required-batch-size-multiple 1 \
|
||||
--arch bart_large \
|
||||
--criterion label_smoothed_cross_entropy \
|
||||
--label-smoothing 0.1 \
|
||||
--dropout 0.1 --attention-dropout 0.1 \
|
||||
--weight-decay 0.01 --optimizer adam --adam-betas "(0.9, 0.999)" --adam-eps 1e-08 \
|
||||
--clip-norm 0.1 \
|
||||
--lr-scheduler polynomial_decay --lr $LR --total-num-update $TOTAL_NUM_UPDATES --warmup-updates $WARMUP_UPDATES \
|
||||
--fp16 --update-freq $UPDATE_FREQ \
|
||||
--skip-invalid-size-inputs-valid-test \
|
||||
--find-unused-parameters;
|
||||
```
|
||||
Above is expected to run on `1` node with `8 32gb-V100`.
|
||||
Expected training time is about `5 hours`. Training time can be reduced with distributed training on `4` nodes and `--update-freq 1`.
|
||||
|
||||
Use TOTAL_NUM_UPDATES=15000 UPDATE_FREQ=2 for Xsum task
|
||||
|
||||
### Inference for CNN-DM test data using above trained checkpoint.
|
||||
After training the model as mentioned in previous step, you can perform inference with checkpoints in `checkpoints/` directory using following python code snippet:
|
||||
|
||||
```python
|
||||
import torch
|
||||
from fairseq.models.bart import BARTModel
|
||||
|
||||
bart = BARTModel.from_pretrained(
|
||||
'checkpoints/',
|
||||
checkpoint_file='checkpoint_best.pt',
|
||||
data_name_or_path='cnn_dm-bin'
|
||||
)
|
||||
|
||||
bart.cuda()
|
||||
bart.eval()
|
||||
bart.half()
|
||||
count = 1
|
||||
bsz = 32
|
||||
with open('cnn_dm/test.source') as source, open('cnn_dm/test.hypo', 'w') as fout:
|
||||
sline = source.readline().strip()
|
||||
slines = [sline]
|
||||
for sline in source:
|
||||
if count % bsz == 0:
|
||||
with torch.no_grad():
|
||||
hypotheses_batch = bart.sample(slines, beam=4, lenpen=2.0, max_len_b=140, min_len=55, no_repeat_ngram_size=3)
|
||||
|
||||
for hypothesis in hypotheses_batch:
|
||||
fout.write(hypothesis + '\n')
|
||||
fout.flush()
|
||||
slines = []
|
||||
|
||||
slines.append(sline.strip())
|
||||
count += 1
|
||||
if slines != []:
|
||||
hypotheses_batch = bart.sample(slines, beam=4, lenpen=2.0, max_len_b=140, min_len=55, no_repeat_ngram_size=3)
|
||||
for hypothesis in hypotheses_batch:
|
||||
fout.write(hypothesis + '\n')
|
||||
fout.flush()
|
||||
```
|
||||
Use beam=6, lenpen=1.0, max_len_b=60, min_len=10 for Xsum Generation
|
||||
Reference in New Issue
Block a user