Hozzon létre egy szöveges összefoglaló projektet a Hugging Face Transformers segítségével: 1. rész

Forrás csomópont: 1236281

Amikor OpenAI 2020 júliusában kiadták gépi tanulási (ML) modelljük harmadik generációját, amely szöveggenerálásra specializálódott, tudtam, hogy valami más. Ez a modell olyan idegességet keltett, mint senki, aki előtte járt. Hirtelen hallottam, hogy barátok és kollégák beszélnek róla, akiket érdekelhet a technológia, de általában nem sokat törődnek az AI/ML tér legújabb fejlesztéseivel. Még a Guardian is írta egy cikket erről. Vagy, hogy pontos legyek, a modell írta a cikket, a Guardian pedig szerkesztette és közzétette. Nem lehetett tagadni – GPT-3 játékváltó volt.

A modell megjelenése után az emberek azonnal elkezdtek kitalálni a lehetséges alkalmazásokat. Heteken belül számos lenyűgöző demót készítettek, amelyek megtalálhatók a webhelyen GPT-3 webhely. Az egyik alkalmazás, amelyen megakadt a szemem az volt szöveges összefoglaló – a számítógép képessége egy adott szöveg elolvasására és annak tartalmának összegzésére. Ez az egyik legnehezebb feladat a számítógép számára, mert a természetes nyelvi feldolgozás (NLP) területén belül két területet egyesít: az olvasásértést és a szöveggenerálást. Ezért nyűgözött le annyira a GPT-3 demója a szöveges összefoglaláshoz.

Kipróbálhatod őket a Hugging Face Spaces weboldal. A kedvencem jelenleg egy alkalmazás amely összefoglalókat hoz létre a hírcikkekről, és csak a cikk URL-jét adja meg.

Ebben a kétrészes sorozatban egy gyakorlati útmutatót ajánlok szervezetek számára, amelyek segítségével felmérheti a szövegösszegzési modellek minőségét az Ön domainjében.

Oktatóanyag áttekintése

Sok szervezet, amellyel együtt dolgozom (jótékonysági szervezetek, cégek, civil szervezetek) hatalmas mennyiségű szöveggel rendelkezik, amelyet el kell olvasniuk és össze kell foglalniuk – pénzügyi jelentések vagy hírcikkek, tudományos kutatási dokumentumok, szabadalmi kérelmek, jogi szerződések stb. Természetesen ezek a szervezetek érdekeltek abban, hogy ezeket a feladatokat NLP technológiával automatizálják. A lehetséges művészetének bemutatására gyakran használom a szöveges összefoglaló demókat, amelyek szinte soha nem hagyják el a benyomást.

De most mi van?

E szervezetek számára az a kihívás, hogy sok-sok dokumentum összefoglalása alapján akarják értékelni a szövegösszegzési modelleket – nem egyenként. Nem akarnak olyan gyakornokot felvenni, akinek csak az a feladata, hogy megnyitja a jelentkezést, beilleszt egy dokumentumot, megüti a Foglalja össze gombot, várja meg a kimenetet, értékelje, hogy jó-e az összefoglaló, és tegye ezt újra több ezer dokumentummal.

Ezt az oktatóanyagot négy héttel ezelőtti énemre gondolva írtam – ez az az oktatóanyag, amelyet szerettem volna akkoriban, amikor elindultam ezen az úton. Ebben az értelemben ennek az oktatóanyagnak a célközönsége az, aki ismeri az AI/ML-t, és már használta a Transformer modelleket, de a szövegösszegzési út elején jár, és szeretne mélyebbre merülni benne. Mivel „kezdők” írták és kezdőknek készült, szeretném hangsúlyozni azt a tényt, hogy ez az oktatóanyag a gyakorlati útmutató – nem a gyakorlati útmutató. Kérem, kezelje úgy, mintha George EP Box mondta:

Ami azt illeti, hogy mennyi technikai tudásra van szükség ebben az oktatóanyagban: Ez magában foglal némi kódolást Pythonban, de legtöbbször csak API-k hívására használjuk a kódot, így nincs szükség mély kódolási ismeretekre sem. Hasznos, ha ismeri az ML bizonyos fogalmait, például azt, hogy mit jelent vonat és a telepíteni egy modell, a fogalmak edzés, érvényesítésés teszt adatkészletek, stb. Szintén belekóstolt a Transformers könyvtár előtt hasznos lehet, mert ezt a könyvtárat széles körben használjuk ebben az oktatóanyagban. Ezen fogalmak további olvasásához hasznos linkeket is mellékelek.

Mivel ezt az oktatóanyagot kezdők írták, nem várom el, hogy az NLP-szakértők és a haladó mély tanulást gyakorló szakemberek sokat kapjanak ebből az oktatóanyagból. Technikai szempontból legalábbis nem – még mindig élvezheti az olvasást, ezért kérjük, még ne hagyja el! De türelmesnek kell lenned az egyszerűsítéseimmel kapcsolatban – próbáltam élni azzal az elképzeléssel, hogy ebben az oktatóanyagban mindent a lehető legegyszerűbbé teszek, de nem egyszerűbbé.

Az oktatóanyag felépítése

Ez a sorozat négy részből áll, két bejegyzésre bontva, amelyekben egy szövegösszefoglaló projekt különböző szakaszain megyünk keresztül. Az első bejegyzésben (1. szakasz) a szövegösszegzési feladatok mérőszámának bevezetésével kezdünk – ez egy olyan teljesítménymérő, amely lehetővé teszi annak felmérését, hogy egy összefoglaló jó vagy rossz. Bemutatjuk továbbá az összefoglalni kívánt adatkészletet, és alapvonalat hozunk létre egy no-ML modell segítségével – egy egyszerű heurisztikával összefoglalót állítunk elő egy adott szövegből. Ennek az alapvonalnak a létrehozása létfontosságú lépés minden ML projektben, mert lehetővé teszi számunkra, hogy számszerűsítsük, mekkora fejlődést érünk el a mesterséges intelligencia használatával. Ez lehetővé teszi számunkra, hogy megválaszoljuk a kérdést: „Valóban megéri beruházni az AI-technológiába?”

A második bejegyzésben egy már előzetesen betanított modellt használunk összefoglalók készítésére (2. szakasz). Ez lehetséges egy modern megközelítéssel az ML-ben, ún transzfer tanulás. Ez egy másik hasznos lépés, mert alapvetően egy kész modellt veszünk, és teszteljük az adatkészletünkön. Ez lehetővé teszi egy másik alapvonal létrehozását, amely segít meglátni, mi történik, amikor ténylegesen betanítjuk a modellt az adatkészletünkön. A megközelítés az ún nullapontos összefoglalás, mert a modell nulla expozícióval rendelkezik az adatkészletünkben.

Ezt követően itt az ideje, hogy egy előre betanított modellt használjunk, és saját adatkészletünkön betanítsuk (3. rész). Ezt is hívják finomhangolás. Lehetővé teszi a modell számára, hogy tanuljon az adataink mintáiból és sajátosságaiból, és lassan alkalmazkodjon hozzájuk. A modell betanítása után összefoglalók készítésére használjuk (4. rész).

Összefoglalva:

  • Rész 1:
    • 1. szakasz: Használjon no-ML modellt az alapvonal megállapításához
  • rész 2:
    • 2. szakasz: Összegzések generálása nulla-lövés modellel
    • 3. szakasz: Összefoglaló modell betanítása
    • 4. szakasz: Értékelje a betanított modellt

Az oktatóanyag teljes kódja az alábbiakban érhető el GitHub repo.

Mit fogunk elérni ennek az oktatóanyagnak a végére?

Az oktatóanyag végére mi nem fog termelésben használható szöveges összefoglaló modellel rendelkezzen. Nem is lesz egy összefoglaló modell (ide illessze be a scream emojit)!

Ehelyett a projekt következő szakaszának kiindulópontja lesz, amely a kísérletezés. Itt jön be a „tudomány” az adattudományban, mert most már csak arról van szó, hogy különböző modellekkel és különböző beállításokkal kísérletezzünk, hogy megértsük, vajon a rendelkezésre álló képzési adatokkal meg lehet-e képezni egy elég jó összegző modellt.

És hogy teljesen átlátható legyen, jó eséllyel az lesz a következtetés, hogy a technológia még nem érett, és a projektet nem fogják megvalósítani. És fel kell készítenie az üzleti érdekelt feleket erre a lehetőségre. De ez egy másik bejegyzés témája.

1. szakasz: Használjon no-ML modellt az alapvonal megállapításához

Ez a szövegösszegzési projekt beállításáról szóló oktatóanyagunk első része. Ebben a részben egy nagyon egyszerű modell segítségével állítunk fel egy alapvonalat, anélkül, hogy ténylegesen használnánk az ML-t. Ez egy nagyon fontos lépés minden ML projektben, mert lehetővé teszi számunkra, hogy megértsük, mennyi értéket ad az ML a projekt időtartama alatt, és megéri-e beruházni rá.

Az oktatóprogram kódja az alábbiakban található GitHub repo.

Adatok, adatok, adatok

Minden ML projekt adatokkal kezdődik! Ha lehetséges, mindig használjunk olyan adatokat, amelyek arra vonatkoznak, hogy mit szeretnénk elérni egy szöveges összefoglaló projekttel. Ha például a szabadalmi bejelentések összegzése a célunk, akkor szabadalmi bejelentéseket is használjunk a modell betanításához. Az ML projektek nagy figyelmeztetése, hogy a képzési adatokat általában címkézni kell. A szövegösszegzés keretében ez azt jelenti, hogy meg kell adnunk az összefoglalandó szöveget, valamint az összefoglalót (a címkét). Csak ha mindkettőt megadja, a modell megtanulhatja, hogyan néz ki egy jó összefoglaló.

Ebben az oktatóanyagban nyilvánosan elérhető adatkészletet használunk, de a lépések és a kód pontosan ugyanaz marad, ha egyéni vagy privát adatkészletet használunk. És ismételten, ha van egy célja a szöveges összegzési modellnek, és rendelkezik megfelelő adatokkal, használja inkább az adatait, hogy a legtöbbet hozza ki ebből.

Az általunk használt adatok a arXiv adatkészlet, amely az arXiv papírok absztraktjait, valamint azok címeit tartalmazza. Célunkból az absztraktot használjuk az összefoglalni kívánt szövegként, a címet pedig referenciaösszefoglalóként. Az adatok letöltésének és előfeldolgozásának minden lépése az alábbiakban elérhető jegyzetfüzet. Szükségünk van egy AWS Identity and Access Management (IAM) szerepkör, amely lehetővé teszi az adatok betöltését oda és onnan Amazon egyszerű tárolási szolgáltatás (Amazon S3) a notebook sikeres futtatásához. Az adatkészletet a dolgozat részeként fejlesztették ki Az ArXiv adatkészletként való használatáról alatt van engedélye Creative Commons CC0 1.0 Universal Public Domain Dedication.

Az adatok három adatkészletre vannak felosztva: képzési, érvényesítési és tesztadatok. Ha saját adatait szeretné használni, győződjön meg róla, hogy ez is így van. Az alábbi diagram bemutatja, hogyan használjuk a különböző adatkészleteket.

Természetesen ezen a ponton gyakori kérdés: Mennyi adatra van szükségünk? Amint valószínűleg már sejti, a válasz: attól függ. Ez attól függ, hogy mennyire specializálódott a tartomány (a szabadalmi bejelentések összegzése merőben különbözik a hírcikkek összefoglalásától), mennyire kell pontosnak lennie a modellnek, hogy hasznos legyen, mennyibe kerüljön a modell betanítása stb. Erre a kérdésre egy későbbi ponton visszatérünk, amikor ténylegesen betanítjuk a modellt, de a lényeg az, hogy a projekt kísérleti szakaszában különböző adatkészlet-méreteket kell kipróbálnunk.

Mitől jó egy modell?

Sok ML projektben meglehetősen egyszerű a modell teljesítményének mérése. Ennek az az oka, hogy általában kevés a kétértelműség a körül, hogy a modell eredménye helyes-e. Az adatkészlet címkéi gyakran binárisak (igaz/hamis, igen/nem) vagy kategorikusak. Mindenesetre ebben a forgatókönyvben könnyű összehasonlítani a modell kimenetét a címkével, és helyesnek vagy helytelennek jelölni.

Szöveg generálásakor ez nagyobb kihívást jelent. Az adatkészletünkben található összefoglalók (címkék) csak az egyik módja a szöveg összegzésének. De sok lehetőség van egy adott szöveg összefoglalására. Tehát még ha a modell nem is egyezik 1:1 arányban a címkénkkel, a kimenet akkor is érvényes és hasznos összefoglalás lehet. Tehát hogyan hasonlítsuk össze a modell összefoglalóját az általunk megadottal? A szöveges összegzésben leggyakrabban használt mérőszám a modell minőségének mérésére a ROUGE pontszám. A mérőszám mechanikájának megértéséhez lásd: A végső teljesítmény mérőszáma az NLP-ben. Összefoglalva, a ROUGE pontszám az átfedést méri n-gramm (összefüggő sorozata n tételek) a modell összefoglalója (jelölt összegzés) és a referenciaösszefoglaló (az adatkészletünkben megadott címke) között. De természetesen ez nem tökéletes mérték. A korlátok megértéséhez nézze meg ROUGE-hoz vagy nem ROUGE-hoz?

Tehát hogyan számítjuk ki a ROUGE pontszámot? Jó néhány Python-csomag létezik ennek a mutatónak a kiszámítására. A következetesség érdekében ugyanazt a módszert kell alkalmaznunk a projektünk során. Mivel ennek az oktatóanyagnak egy későbbi pontjában a Transformers könyvtárból származó képzési szkriptet fogunk használni, ahelyett, hogy saját magunkat írnánk, csak belekukkanthatunk a forráskód a szkriptet, és másolja ki a ROUGE pontszámot kiszámító kódot:

from datasets import load_metric
metric = load_metric("rouge") def calc_rouge_scores(candidates, references): result = metric.compute(predictions=candidates, references=references, use_stemmer=True) result = {key: round(value.mid.fmeasure * 100, 1) for key, value in result.items()} return result

Ezzel a módszerrel a pontszám kiszámításához biztosítjuk, hogy a projekt során mindig összehasonlítsuk az almát az almával.

Ez a függvény több ROUGE pontszámot számít ki: rouge1, rouge2, rougeLés rougeLsum. Az „összeg” benne rougeLsum arra a tényre utal, hogy ezt a mérőszámot egy teljes összegzés alapján számítják ki, míg rougeL az egyes mondatok átlagaként kerül kiszámításra. Tehát melyik ROUGE pontszámot használjuk a projektünkhöz? A kísérleti szakaszban ismét különböző megközelítéseket kell kipróbálnunk. Amiért megéri, a eredeti ROUGE papír kijelenti, hogy „A ROUGE-2 és a ROUGE-L jól működött az egydokumentum-összegzési feladatokban”, míg a „ROUGE-1 és ROUGE-L kiválóan teljesít a rövid összefoglalók értékelésében”.

Hozza létre az alapvonalat

Következő lépésként egy egyszerű, no-ML modell segítségével szeretnénk létrehozni az alapvonalat. Az mit jelent? A szövegösszegzés terén sok tanulmány nagyon egyszerű megközelítést alkalmaz: az elsőt veszik n mondatokat a szövegből, és nyilvánítsa azt jelölt összefoglalónak. Ezután összehasonlítják a jelölt összefoglalóját a referenciaösszefoglalóval, és kiszámítják a ROUGE pontszámot. Ez egy egyszerű, de hatékony megközelítés, amelyet néhány sornyi kóddal megvalósíthatunk (a rész teljes kódja a következőben található jegyzetfüzet):

import re ref_summaries = list(df_test['summary']) for i in range (3): candidate_summaries = list(df_test['text'].apply(lambda x: ' '.join(re.split(r'(?<=[.:;])s', x)[:i+1]))) print(f"First {i+1} senctences: Scores {calc_rouge_scores(candidate_summaries, ref_summaries)}")

Ehhez az értékeléshez a tesztadatkészletet használjuk. Ennek azért van értelme, mert a modell betanítása után ugyanazt a tesztadatkészletet használjuk a végső értékeléshez is. Különböző számokkal is próbálkozunk n: csak az első mondattal kezdjük a jelölt összefoglalójaként, majd az első két mondattal, végül az első három mondattal.

A következő képernyőkép az első modellünk eredményeit mutatja.

A ROUGE pontszámok a legmagasabbak, csak az első mondat a jelölt összefoglalója. Ez azt jelenti, hogy egynél több mondat vétele túl bőbeszédűvé teszi az összefoglalót, és alacsonyabb pontszámot eredményez. Tehát ez azt jelenti, hogy az egymondatos összefoglalók pontszámait fogjuk alapul venni.

Fontos megjegyezni, hogy egy ilyen egyszerű megközelítéshez ezek a számok valójában nagyon jók, különösen a rouge1 pontszám. Hogy ezeket a számokat kontextusba helyezzük, hivatkozhatunk a Pegasus modellek, amely egy korszerű modell pontszámait mutatja különböző adatkészletekre.

Következtetés és a következő lépés

Sorozatunk 1. részében bemutattuk azt az adatkészletet, amelyet az összesítési projekt során használunk, valamint egy mérőszámot az összefoglalók értékelésére. Ezután létrehoztuk a következő alapvonalat egy egyszerű, nem-ML modellel.

A következő post, nullás modellt használunk – konkrétan egy olyan modellt, amelyet kifejezetten nyilvános hírcikkek szöveges összefoglalására képeztek ki. Ez a modell azonban egyáltalán nem lesz betanítva az adatkészletünkön (innen ered a „nullalövés” elnevezés).

Hazai feladatként rád bízom, hogy kitaláld, hogyan fog teljesíteni ez a zero-shot modell a mi nagyon egyszerű alapállapotunkhoz képest. Egyrészt sokkal kifinomultabb modell lesz (ez tulajdonképpen egy neurális hálózat). Másrészt csak a hírcikkek összefoglalására használják, így előfordulhat, hogy küzd az arXiv adatkészletben rejlő mintákkal.


A szerzőről

Heiko Hotz az AI és a gépi tanulás vezető megoldástervezője, és az AWS-en belül a Natural Language Processing (NLP) közösséget vezeti. Ezt megelőzően az Amazon EU-s ügyfélszolgálatának adattudományi vezetője volt. A Heiko segít ügyfeleinknek abban, hogy sikeresek legyenek az AI/ML-útjukon az AWS-ben, és számos iparágban dolgozott együtt szervezetekkel, beleértve a biztosítást, a pénzügyi szolgáltatásokat, a médiát és a szórakoztatást, az egészségügyet, a közműveket és a gyártást. Szabadidejében Heiko minél többet utazik.

Időbélyeg:

Még több AWS gépi tanulás