Issues with translating inputs containing repeated phrases

While porting fairseq wmt19 I discovered it doesn’t handle correctly inputs containing repeated phrases - it truncates big parts of the sentence.

So, obviously, the ported model with the same pre-trained weights has the same issues.

I wonder how transformers translation models handle such inputs.

Here is a script demonstrating the issue:

import torch

text = [
    """This is good. This is bad. This is good. This is bad. What do you think?""",
    """Here's a little song I wrote. You might want to sing it note for note. Don't worry, be happy. In every life we have some trouble. But when you worry you make it double. Don't worry, be happy. Don't worry, be happy now."""
]

src, tgt = "en", "ru"
fs_mname = f"transformer.wmt19.{src}-{tgt}"
checkpoint_file = 'model1.pt'
#checkpoint_file = 'model1.pt:model2.pt:model3.pt:model4.pt'
fs_model = torch.hub.load('pytorch/fairseq', fs_mname, checkpoint_file=checkpoint_file, tokenizer='moses', bpe='fastbpe')

for s in text:
    print(s)
    fs_input_ids = fs_model.encode(s)
    fs_outputs = fs_model.generate(fs_input_ids, beam=5, verbose=True)
    for i, output in enumerate(fs_outputs):
        fs_decoded = fs_model.decode(output['tokens'])
        print(f"{i}: {fs_decoded}")
    print("--------")

For the first, contrived, input we get:

This is good. This is bad. This is good. This is bad. What do you think?
0: Это хорошо. Это плохо. Это хорошо. Это плохо.
1: Это хорошо. Это плохо. Это хорошо. Это плохо. Что вы думаете?
2: Это хорошо, это плохо, это хорошо, это плохо.
3: Это хорошо. Это плохо. Это хорошо. Это плохо. Как вы думаете?
4: Это хорошо. Это плохо. Это хорошо.

So hypos 1 and 3 are correct, the rest have the last 1-2 sentences chopped off. Yet, it chose the truncated version as the best.

For the second input we get:

Original:
(1) Here's a little song I wrote. 
(2) You might want to sing it note for note. 
(3) Don't worry, be happy. 
(4) In every life we have some trouble. 
(5) But when you worry you make it double. 
(6) Don't worry, be happy. 
(7) Don't worry, be happy now.

Hypo 0:
(1) 
(2)
(3) Не волнуйтесь, будьте счастливы. 
(4) В каждой жизни у нас есть некоторые проблемы. 
(5) Но когда вы волнуетесь, вы делаете это дважды. 
(6) Не волнуйтесь, будьте счастливы. 
(7) Не волнуйтесь, будьте счастливы сейчас.

Hypo 1: 
(1) 
(2)
(3) Не волнуйтесь, будьте счастливы. 
(4) В каждой жизни у нас есть некоторые проблемы. 
(5) Но когда вы волнуетесь, вы делаете это дважды. 
(6) Не волнуйтесь, будьте счастливы. 
(7) Не беспокойтесь, будьте счастливы сейчас.

Hypo 2: 
(1) Вот маленькая песня, которую я написал. 
(2) Вы, возможно, захотите спеть ее на заметку. 
(3) Не волнуйтесь, будьте счастливы.
(4) 
(5) 
(6) 
(7) 

Hypo 3: 
(1) Вот маленькая песня, которую я написал. 
(2) Вы могли бы захотеть спеть ее на заметку. 
(3) Не волнуйтесь, будьте счастливы.
(4) 
(5) 
(6) 
(7) 

Hypo 4: 
(1) 
(2)
(3) Не волнуйтесь, будьте счастливы. 
(4) В каждой жизни у нас есть некоторые проблемы. 
(5) Но когда вы волнуетесь, вы делаете это дважды. 
(6) Не волнуйтесь, будьте счастливы.
(7) 

I rewrapped and annotated it to show what’s missing, so you don’t need to understand Russian to see that there is a problem. the empty “slots” are the corresponding missing sentences in the translation’s output.

Here we have hypos 0, 1, 4 chopping off the first 2 sentences. and 2,3 chopping off the last 3 sentences.

If use their en-de model, the first input it has the same problem - truncating the last sentence. With the second input the first result is perfect, but the same truncation is observed in the following hypos.

p.s. it behaves the same with the model ensemble (fairseq uses 4 checkpoints in their wmt19 submission).

Hmm, found another odd ball:

“NOOOOOOOOOOO ANOTHER BLACK PERSON,” wrote Mrs Plasco-Flaxman to her husband in a text.

fairseq translates this as:

"НОООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООО
"НОООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООООО

(this is an entry from wmt19 test dataset)