bart-large-cnn ROUGE-L scores
Author: swethmandava
Pull request: no

## Environment info

### Who can help
BART + Summarization @sshleifer

## Information

Model I am using is BART.

The problem arises when:
verifying accuracy numbers of facebook/bart-large-cnn on CNN+Daily Mail. The paper reports R1, R2, RL of 44.16, 21.28, 40.90 but I can get only 44.05, 21.07, 30.62. I used [this](https://github.com/abisee/cnn-dailymail) to make my dataset. Is this expected? 

The tasks I am working on is:
* CNN-Dm summarization task

## To reproduce

Steps to reproduce the behavior:

1. Follow instructions to download dataset
2. Run with `python run_summarization.py --reference_path=data/cnn_dm/test.target data/cnn_dm/test.source results/test.log`

Comments:
Also noticed this! I have convinced myself that it's a scoring difference because the summaries generated are the same between this model and the fairseq implementation.


This might help:
https://github.com/google-research/google-research/issues/168
I used pyrogue and R1, R2, RL = 44.32, 21.15, 37.53


@yxyzzz  can you tell me how you're using it? I get similar scores with py-rogue

```
def calculate_rouge(output_lns: List[str], reference_lns: List[str], use_stemmer=True) -> Dict:
    scorer = rouge_scorer.RougeScorer(ROUGE_KEYS, use_stemmer=use_stemmer)
    aggregator = scoring.BootstrapAggregator()

    for reference_ln, output_ln in zip(reference_lns, output_lns):
        scores = scorer.score(reference_ln, output_ln)
        aggregator.add_scores(scores)

    result = aggregator.aggregate()


    import rouge
    import nltk
    nltk.download('punkt')

    evaluator = rouge.Rouge(metrics=['rouge-n', 'rouge-l'],
                               max_n=2,
                               limit_length=False,
                               apply_avg=True)
    scores = evaluator.get_scores(reference_lns, output_lns)
    print("py-rogue", scores)

    print("rogue_scorer", {k: round(v.mid.fmeasure * 100, 4) for k, v in result.items()})
```

Results in:

```
py-rogue {'rouge-1': {'f': 0.44335299665102107, 'p': 0.5174289830764615, 'r': 0.40466586165106366}, 'rouge-2': {'f': 0.21133693864752542, 'p': 0.2465209393822732, 'r': 0.19324181648769206}, 'rouge-l': {'f': 0.3073058732169781, 'p': 0.35988134598642835, 'r': 0.2798097075410874}}

rogue_scorer {'rouge1': 44.0698, 'rouge2': 21.0711, 'rougeLsum': 30.6233}
```

1. rouge_score split sentences by '\n'. You can add a '\n' to separate sentences in the summaries and evaluate. The summary level rougeL (rougeLsum) should be a lot higher and close to the one in the literature. 
'{'rouge1': 44.0536, 'rouge2': 21.0711, 'rougeL': 30.6157, 'rougeLsum': 40.9812}'
```
output_ln2 = []
for o in `output_ln:
    s = sent_tokenize(p)
    output_ln2.append('\n'.join(s))
```
2. Use pyrouge -> https://pypi.org/project/pyrouge/ 

replacing 
```
output_lns = [x.rstrip() for x in open(args.save_path).readlines()]
reference_lns = [x.rstrip() for x in open(args.reference_path).readlines()][: len(output_lns)]
```
with works for rouge_score

```
output_lns = [" . \n".join(x.rstrip().split('. ')) for x in open(args.save_path).readlines()]
reference_lns = [" . \n".join(x.rstrip().split(' . ')) for x in open(args.reference_path).readlines()][: len(output_lns)]
```

Thanks @yxyzzz !

should we change run_eval.py ?


Opened a PR at #7356 that fixes this issue @sshleifer