Cómo resumir un texto con Python y el aprendizaje automático

La resumida es una tarea muy común que a muchos desarrolladores les gustaría automatizar. Por ejemplo, ¿no sería bueno crear automáticamente un resumen de cada artículo del blog que estás escribiendo? ¿O resumir automáticamente los documentos para tus empleados? Existen toneladas de buenas aplicaciones.

Los modelos basados en transformadores como Bart Large CNN facilitan el resumen de textos en Python. Estos modelos de aprendizaje automático son fáciles de usar pero difíciles de escalar. Veamos cómo utilizar Bart Large CNN y cómo optimizar sus prestaciones.

Redacción del resumen

Transformers y Bart Large CNN

Transformers es un marco de trabajo avanzado de Python que recientemente ha hecho posible lograr casos de uso muy avanzados de procesamiento del lenguaje natural, como el resumen de textos.

Antes de Transformers y las redes neuronales, había un par de opciones, pero ninguna de ellas era realmente satisfactoria.

Estos últimos años se han creado muchos buenos modelos de procesamiento del lenguaje natural preentrenados, basados en Transformers, para diversos casos de uso. Bart Large CNN ha sido lanzado por Facebook y da excelentes resultados para el resumen de textos.

Aquí se explica cómo utilizar Bart Large CNN en su código Python.

Resumir texto en Python

La forma más sencilla de utilizar Bart Large CNN es descargarlo del repositorio Hugging Face, y utilizar el pipeline de resumen de texto de la biblioteca 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))

La salida:

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.

Como puedes ver, son sólo 4 líneas de código Python, y la calidad del resumen es muy buena. Pero te habrás dado cuenta de que el modelo es grande, por lo que tarda en descargarse la primera vez.

Los parámetros min_length y max_length indican el tamaño mínimo y máximo de su resumen. Representan un número de tokens, no de palabras. Básicamente, un token puede ser una palabra, pero también signos de puntuación o subpalabras. En general, puede considerar que 100 tokens equivalen aproximadamente a 75 palabras.

Nota importante: su texto de entrada no puede ser mayor de 1024 tokens (más o menos igual a 800 palabras) ya que es una limitación interna de este modelo. Si quiere resumir trozos de texto más grandes, una buena estrategia es resumir varias partes del texto de forma independiente y luego volver a ensamblar los resultados. ¡Incluso puede realizar resúmenes de resúmenes!

Consideraciones sobre el rendimiento

Sin embargo, este modelo Bart Large CNN presenta dos problemas principales.

En primer lugar, al igual que muchos modelos de aprendizaje profundo, requiere una cantidad importante de espacio en disco y RAM (¡alrededor de 1,5 GB!). Y esto todavía puede considerarse como un modelo de aprendizaje profundo pequeño en comparación con otros enormes como GPT-3, GPT-J, T5 11B, etc.

Y lo que es más importante, es bastante lento. Este modelo está realizando la generación de texto bajo el capó, y la generación de texto es inherentemente lenta. Si intentas resumir un texto de 800 palabras, tardarás unos 20 segundos en una buena CPU...

La solución es implementar una CNN de gran tamaño en una GPU. Por ejemplo, en una NVIDIA Tesla T4, puedes esperar un aumento de velocidad de x10 y tu texto de 800 palabras se resumirá en unos 2 segundos.

Las GPU son, por supuesto, muy caras, así que depende de ti hacer los cálculos y decidir si la inversión merece la pena.

Aprovechamiento de una API externa para la producción

El resumen de textos con Bart Large CNN es muy fácil de utilizar en un simple script, pero ¿qué pasa si quieres utilizarlo en producción para un gran volumen de peticiones?

Como se mencionó anteriormente, una primera solución sería encargarse de aprovisionar su propio hardware con una GPU, y trabajar en algunas optimizaciones de producción con el fin de hacer más rápida la integración.

Una segunda solución sería delegar esta tarea a un servicio dedicado como NLP Cloud que le servirá el modelo Bart Large CNN a través de una API. Pruebe aquí nuestro punto final de la API de resumen.

Conclusión

En 2022, es posible realizar un resumen de texto avanzado en Python con muy poco esfuerzo, gracias a Transformers y Bart Large CNN.

El resumen de textos es una tarea muy útil que cada vez más empresas automatizan en su aplicación. Como puedes ver, la complejidad viene del lado del rendimiento. Existen algunas técnicas para acelerar su resumen de texto con Bart Large CNN, pero esto será un tema para otro artículo.

Espero que este artículo te ayude a ahorrar tiempo en tu próximo proyecto. No dude en probar el resumen de textos en NLP Cloud.

Julien Salinas
CTO en NLP Cloud