T5 pretrained model truncate translation "large" text

Hello,

I just started to work with transformers and transformer pre trained models.
And I’m facing a strange behaviour with t5-base pre trained model.
I want to translate a text from english to french and everything works fine until my truncation issue.

Here is my current code sample :

def translate_text_t5(text: str) -> None:
    tokenizer = T5Tokenizer.from_pretrained("t5-base")
    model = T5ForConditionalGeneration.from_pretrained("t5-base")
    input_ids = tokenizer("translate English to French: " + text, max_length=512, truncation=True, return_tensors="pt").input_ids
    outputs = model.generate(input_ids, max_length=512)
    print(tokenizer.decode(outputs[0]))

And here is my input english text :

The advent of the Internet has generated a massive flow of information, which makes retrieval more challenging. Most scientific information is found in scientific articles, and with the expansion of research domains,it can be quite difficult for scholars to find documents relevant to their interests. Even query-based searches for some specific fields return a large number of relevant articles that far exceed human processing capabilities. Automatic summarization of these articles would be useful for reducing the time needed to review them in full and obtain the gist of the information contained within. Mainly, summaries could be generated in two ways; single-document summaries in which the task is to generate a summary from a single source and multi-document summaries in which different but related documents are summarized by comprises only the essential materials or main ideas in a document in less space.

I’m expecting somthing like this :

L'avènement de l'Internet a généré un flux massif d'informations, ce qui rend la recherche plus difficile. La plupart des informations scientifiques se trouvent dans des articles scientifiques, et avec l'expansion des domaines de recherche, il peut être assez difficile pour les chercheurs de trouver des documents pertinents pour leurs intérêts. Même les recherches basées sur des requêtes pour certains domaines spécifiques renvoient un grand nombre d'articles pertinents qui dépassent de loin les capacités de traitement humain. Le résumé automatique de ces articles serait utile pour réduire le temps nécessaire pour les examiner dans leur intégralité et obtenir l'essentiel des informations qu'ils contiennent. Principalement, les résumés peuvent être générés de deux manières : les résumés de documents uniques, dans lesquels la tâche consiste à générer un résumé à partir d'une source unique, et les résumés de documents multiples, dans lesquels des documents différents mais liés sont résumés en ne comprenant que les éléments essentiels ou les idées principales d'un document dans un espace réduit.

but I have this instead :

<pad> L'avènement d'Internet a créé un flux massif d'informations, ce qui rend la recherche plus difficile. La plupart des informations scientifiques se trouvent dans des articles scientifiques et, avec l'expansion des domaines de recherche, il peut être très difficile pour les chercheurs de trouver des documents pertinents à leurs intérêts. Même des recherches basées sur des requêtes pour certains domaines précis renvoient un grand nombre</s>

The translation is good but the output text is truncate (sometimes in middle of a word).
I look at my generated tokens and I found that there is a lot of token missing, but I don’t know why.
I allready look on github for similar issues, but the most of t5 translation usages are for small sentences or for words, but never for “large” text.
There is probably something I misunderstood but after play with all parameters of tokenizer and generate method without significant changes I decided to expose my situation here.

Thank you for any help

1 Like

Hey! Did you find a solution to this?
Pls let me know, I’m facing the exact same problem!

Hey! I found the solution to this. Pls check out : Solution for Graph to Multiple sentences / Paragraph generation - #2 by sheoran95

I think you need skip_special_tokens=True

tokenizer.decode(output, skip_special_tokens=True)