Multiple copies of the translation on output...

#4
by bubbalizard - opened

ollama gives the expected output:

Translate from English to Spanish: English: We now have 4-month-old mice that are non-diabetic that used to be diabetic," he added. Spanish:

Ahora tenemos ratones de cuatro meses que no son diabéticos pero lo fueron", agregó.

However using Transformers pipeline as described gives multiple translations:

user content: 'Translate from English to Spanish. English: "We now have 4-month-old mice that are non-diabetic that used to be diabetic," he added.
Spanish:'

Output: <|im_start|>user
Translate from English to Spanish. English: "We now have 4-month-old mice that are non-diabetic that used to be diabetic," he added.
Spanish:<|im_end|>
<|im_start|>assistant
“Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”, añadió.

Ahora tenemos ratones de 4 meses que no son diabéticos, que antes sí lo eran”,

Unbabel org

That's interesting. Have you made sure the stop sequences are correctly set?
As a brute force option, you can set "\n" as a stop sequence.

I also ran into this problem. I believe the pipeline does not have all terminators set. This seems to fix it:

terminators = [
    pipe.tokenizer.eos_token_id,
    pipe.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
    outputs = pipe(
        prompt,
        max_new_tokens=256,
        num_beams = 5,
        eos_token_id=terminators,
        do_sample = False,
    )

Sign up or log in to comment