Comment résumer un texte avec Python et l'apprentissage automatique ?

Le résumé est une tâche très courante que de nombreux développeurs aimeraient automatiser. Par exemple, ne serait-il pas agréable de créer automatiquement un résumé de chaque article de blog que vous écrivez ? Ou de résumer automatiquement des documents pour vos employés ? Des tonnes de bonnes applications existent.

Les modèles basés sur des transformateurs comme Bart Large CNN permettent de résumer facilement du texte en Python. Ces modèles d'apprentissage automatique sont faciles à utiliser mais difficiles à mettre à l'échelle. Voyons comment utiliser Bart Large CNN et comment optimiser ses performances.

Rédaction de résumés

Transformers et Bart Grand CNN

Transformers est un framework Python avancé qui a récemment permis de réaliser des cas d'utilisation très avancés du traitement du langage naturel, comme le résumé de texte.

Avant les Transformers et les réseaux neuronaux, quelques options étaient disponibles, mais aucune n'était vraiment satisfaisante.

De nombreux modèles de traitement du langage naturel pré-entraînés ont été créés ces dernières années, basés sur des transformateurs, pour divers cas d'utilisation. Bart Large CNN a été publié par Facebook et donne d'excellents résultats pour le résumé de texte.

Voici comment utiliser Bart Large CNN dans votre code Python.

Résumer un texte en Python

La façon la plus simple d'utiliser Bart Large CNN est de le télécharger depuis le dépôt Hugging Face, et d'utiliser le pipeline de résumé de texte de la bibliothèque Transformers :

from transformers import pipeline

summarizer = pipeline("summarization", model="facebook/bart-large-cnn")

article = """New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared "I do" five more times, sometimes only within two weeks of each other.
In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her "first and only" marriage.
Barrientos, now 39, is facing two criminal counts of "offering a false instrument for filing in the first degree," referring to her false statements on the
2010 marriage license application, according to court documents.
Prosecutors said the marriages were part of an immigration scam.
On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
The case was referred to the Bronx District Attorney\'s Office by Immigration and Customs Enforcement and the Department of Homeland Security\'s
Investigation Division. Seven of the men are from so-called "red-flagged" countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
If convicted, Barrientos faces up to four years in prison.  Her next court appearance is scheduled for May 18."""

summary = summarizer(article, max_length=130, min_length=30))

Sortie :

Liana Barrientos, 39, is charged with two counts of "offering a false instrument for filing in the first degree" In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. She is believed to still be married to four men.

Comme vous pouvez le constater, il ne s'agit que de 4 lignes de code Python, et la qualité du résumé est très bonne ! Mais vous avez peut-être remarqué que le modèle est gros et qu'il faut du temps pour le télécharger la première fois.

Les paramètres min_length et max_length indiquent les tailles minimale et maximale de votre résumé. Ils représentent un nombre de tokens, et non de mots. En principe, un token peut être un mot, mais aussi une ponctuation ou des sous-mots. En général, vous pouvez considérer que 100 tokens sont à peu près égaux à 75 mots.

Note importante : votre texte d'entrée ne peut pas être plus grand que 1024 tokens (plus ou moins égal à 800 mots) car il s'agit d'une limitation interne de ce modèle. Si vous souhaitez résumer de plus gros morceaux de texte, une bonne stratégie consiste à résumer plusieurs parties du texte indépendamment, puis à réassembler les résultats. Vous pouvez même effectuer des résumés de résumés !

Considérations sur les performances

Il y a cependant deux problèmes principaux avec ce modèle Bart Large CNN.

Tout d'abord, comme de nombreux modèles d'apprentissage profond, il nécessite une quantité importante d'espace disque et de RAM (environ 1,5 Go !). Et cela peut encore être considéré comme un petit modèle d'apprentissage profond comparé à d'énormes modèles comme GPT-3, GPT-J, T5 11B, etc.

Plus important encore, il est assez lent. Ce modèle effectue en fait une génération de texte sous le capot, et la génération de texte est intrinsèquement lente. Si vous essayez de résumer un texte de 800 mots, cela prendra environ 20 secondes avec un bon processeur...

La solution consiste à déployer Bart large CNN sur un GPU. Par exemple, sur un NVIDIA Tesla T4, vous pouvez espérer une accélération de x10 et votre texte de 800 mots sera résumé en 2 secondes environ.

Les GPU sont bien sûr très chers, c'est donc à vous de faire le calcul et de décider si l'investissement en vaut la peine !

Tirer parti d'une API externe pour la production

Le résumé de texte avec Bart Large CNN est très facile à utiliser dans un simple script, mais que faire si vous voulez l'utiliser en production pour un grand volume de requêtes ?

Comme mentionné ci-dessus, une première solution serait de s'occuper du provisionnement de votre propre matériel avec un GPU, et de travailler sur certaines optimisations de production afin de rendre la compression plus rapide.

Une deuxième solution serait de déléguer cette tâche à un service dédié comme NLP Cloud qui vous servira le modèle Bart Large CNN par le biais d'une API. Testez notre endpoint API de résumé ici !

Conclusion

En 2022, il est possible d'effectuer un résumé de texte avancé en Python avec très peu d'effort, grâce aux Transformers et à Bart Large CNN.

Le résumé de texte est une tâche très utile que de plus en plus d'entreprises automatisent désormais dans leurs applications. Comme vous pouvez le constater, la complexité vient du côté des performances. Certaines techniques existent afin d'accélérer votre résumé de texte avec Bart Large CNN, mais ceci sera un sujet pour un autre article !

J'espère que cet article vous aidera à gagner du temps pour votre prochain projet ! N'hésitez pas à essayer le résumé de texte sur NLP Cloud !

Julien Salinas
Directeur technique de NLP Cloud