Hogyan foglaljuk össze a szöveget Python és a gépi tanulás segítségével?

Az összegzés egy nagyon gyakori feladat, amelyet sok fejlesztő szeretne automatizálni. Nem lenne például jó, ha automatikusan létrehozhatnánk egy összefoglalót minden egyes blogcikkről, amit írunk? Vagy automatikusan összefoglalni a dokumentumokat az alkalmazottai számára? Rengeteg jó alkalmazás létezik.

A Bart Large CNN-hez hasonló transzformátor-alapú modellekkel könnyen összefoglalható a szöveg Pythonban. Ezek a gépi tanulási modellek könnyen használhatóak, de nehezen skálázhatóak. Lássuk, hogyan használjuk a Bart Large CNN-t, és hogyan optimalizálhatjuk a teljesítményét.

Összefoglaló írás

Transformers és Bart Large CNN

A Transformers egy fejlett Python keretrendszer, amely a közelmúltban lehetővé tette, hogy nagyon fejlett természetes nyelvi feldolgozási felhasználási eseteket, például szövegösszegzést valósítsunk meg.

A Transformers és a neurális hálózatok előtt több lehetőség is rendelkezésre állt, de egyik sem volt igazán kielégítő.

Az elmúlt években számos jó, előre betanított természetes nyelvi feldolgozó modellt hoztak létre a Transformers alapján, különböző felhasználási esetekre. A Bart Large CNN-t a Facebook adta ki, és kiváló eredményeket ad a szöveges összefoglalásokhoz.

Íme, hogyan használhatod a Bart Large CNN-t a Python kódodban.

Szövegek összefoglalása Pythonban

A Bart Large CNN használatának legegyszerűbb módja, ha letölti a Hugging Face tárolóból, és a Transformers könyvtárból származó szövegösszefoglaló csővezetéket használja:

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))

Kimenet:

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.

Mint láthatod, ez mindössze 4 sor Python kód, és az összefoglaló minősége nagyon jó! De talán észrevetted, hogy a modell nagy, így első alkalommal időbe telik a letöltése.

A min_length és max_length paraméterek az összefoglaló minimális és maximális méretét adják meg. Ezek tokenek számát jelentik, nem szavakat. Alapvetően egy token lehet szó, de írásjelek vagy részszavak is. Általánosságban elmondható, hogy 100 token nagyjából 75 szónak felel meg.

Fontos megjegyzés: a bemeneti szöveg nem lehet nagyobb 1024 tokennél (ami nagyjából 800 szónak felel meg), mivel ez a modell belső korlátozása. Ha nagyobb szövegdarabokat szeretne összefoglalni, jó stratégia, ha a szöveg több részét egymástól függetlenül foglalja össze, majd az eredményeket újra összeállítja. Akár az összegzések összegzését is elvégezheti!

Teljesítménybeli megfontolások

Ezzel a Bart Large CNN modellel azonban 2 fő probléma van.

Először is, mint sok más mélytanulási modell, ez is jelentős mennyiségű lemezterületet és RAM-ot igényel (körülbelül 1,5 GB!). És ez még mindig kis mélytanulási modellnek tekinthető az olyan hatalmas modellekhez képest, mint a GPT-3, GPT-J, T5 11B stb.

Ami még ennél is fontosabb, hogy elég lassú. Ez a modell valójában szöveggenerálást végez a motorháztető alatt, és a szöveggenerálás eleve lassú. Ha egy 800 szóból álló szöveget próbálsz összefoglalni, az egy jó CPU-n körülbelül 20 másodpercig tart...

A megoldás az, hogy Bart nagy CNN-t telepítünk egy GPU-ra. Egy NVIDIA Tesla T4-en például x10-es gyorsulásra számíthatunk, és a 800 szavas szöveg körülbelül 2 másodperc alatt összefoglalható.

A GPU-k természetesen nagyon drágák, így csak rajtad múlik, hogy kiszámolod, és eldöntöd, megéri-e a befektetés!

Külső API felhasználása a termeléshez

A szövegösszegzés a Bart Large CNN-nel nagyon könnyen használható egy egyszerű szkriptben, de mi van akkor, ha nagy mennyiségű kérés esetén a termelésben szeretné használni?

Ahogy fentebb említettük, az első megoldás az lenne, ha gondoskodnánk a saját hardver GPU-val való ellátásáról, és dolgoznánk néhány termelési optimalizáláson annak érdekében, hogy az összegzés gyorsabb legyen.

A második megoldás az lenne, ha ezt a feladatot egy dedikált szolgáltatásra, például az NLP Cloudra bízná, amely egy API-n keresztül kiszolgálja a Bart Large CNN modellt. Tesztelje összefoglaló API végpontunkat itt!

Következtetés

2022-ben a Transformers és a Bart Large CNN segítségével Pythonban nagyon kis erőfeszítéssel lehet fejlett szövegösszefoglalást végezni.

A szövegösszefoglaló egy nagyon hasznos feladat, amelyet egyre több vállalat automatizál az alkalmazásában. Mint látható, a komplexitás a teljesítmény oldaláról érkezik. Létezik néhány technika annak érdekében, hogy a Bart Large CNN segítségével felgyorsítsuk a szövegösszegzést, de ez egy másik cikk témája lesz!

Remélem, hogy ez a cikk segít időt spórolni a következő projektednél! Próbáld ki bátran a szövegösszefoglalást az NLP Cloudon!

Julien Salinas
CTO az NLP Cloud-nál