Seadistage teksti kokkuvõtte projekt rakendusega Hugging Face Transformers: 1. osa

Allikasõlm: 1236281

Kui OpenAI avaldas 2020. aasta juulis oma masinõppe (ML) mudeli kolmanda põlvkonna, mis on spetsialiseerunud teksti genereerimisele, teadsin, et midagi on teisiti. See mudel mõjus närvidele nagu keegi, kes enne seda oli. Järsku kuulsin sellest rääkimas sõpru ja kolleege, kes võivad olla huvitatud tehnoloogiast, kuid tavaliselt ei hooli AI/ML ruumi viimastest edusammudest. Isegi Guardian kirjutas artikkel sellest. Või kui täpne olla, siis mudel kirjutas artikli ning The Guardian toimetas ja avaldas selle. Seda ei saanud eitada - GPT-3 oli mängu muutja.

Pärast mudeli ilmumist hakkasid inimesed selle jaoks kohe potentsiaalseid rakendusi välja mõtlema. Mõne nädala jooksul loodi palju muljetavaldavaid demosid, mis leiate veebisaidilt GPT-3 veebisait. Üks konkreetne rakendus, mis mulle silma jäi, oli teksti kokkuvõte – arvuti võime etteantud teksti lugeda ja selle sisu kokku võtta. See on arvuti jaoks üks raskemaid ülesandeid, kuna see ühendab loomuliku keele töötlemise (NLP) valdkonna kaks valdkonda: lugemise mõistmine ja teksti genereerimine. Seetõttu avaldasid mulle teksti kokkuvõtteks mõeldud GPT-3 demod nii suurt muljet.

Saate neile proovida Hugging Face Spacesi veebisait. Minu lemmik hetkel on an taotlus mis genereerib uudisteartiklite kokkuvõtteid, sisestades ainult artikli URL-i.

Selles kaheosalises sarjas pakun välja praktilise juhendi organisatsioonidele, et saaksite hinnata oma domeeni teksti kokkuvõtete mudelite kvaliteeti.

Õpetuse ülevaade

Paljudel organisatsioonidel, kellega ma töötan (heategevusorganisatsioonid, ettevõtted, valitsusvälised organisatsioonid), on tohutul hulgal tekste, mida neil on vaja lugeda ja kokkuvõtteid teha – finantsaruanded või uudisartiklid, teaduslikud uurimistööd, patenditaotlused, juriidilised lepingud ja palju muud. Loomulikult on need organisatsioonid huvitatud nende ülesannete automatiseerimisest NLP-tehnoloogia abil. Võimaliku kunsti demonstreerimiseks kasutan sageli tekstide kokkuvõtete demosid, mis peaaegu kunagi ei jäta muljet.

Aga mis nüüd?

Nende organisatsioonide väljakutse seisneb selles, et nad soovivad hinnata teksti kokkuvõtete mudeleid, mis põhinevad paljude ja paljude dokumentide kokkuvõtetel – mitte ükshaaval. Nad ei taha palgata praktikanti, kelle ainus ülesanne on avada rakendus, kleepida dokumenti, vajutada Tihe nuppu, oodake väljundit, hinnake, kas kokkuvõte on hea, ja tehke seda tuhandete dokumentide jaoks uuesti.

Kirjutasin selle õpetuse nelja nädala tagusele minevikule mõeldes – see on õpetus, mida soovisin toona omada, kui seda teekonda alustasin. Selles mõttes on selle õpetuse sihtrühmaks keegi, kes on AI/ML-iga tuttav ja Transformeri mudeleid varemgi kasutanud, kuid on oma teksti kokkuvõtte teekonna alguses ja soovib sellesse süveneda. Kuna selle on kirjutanud "algaja" ja see on mõeldud algajatele, tahan rõhutada tõsiasja, et see õpetus on a praktiline juhend – mitte the,en praktiline juhend. Palun kohelda seda nii, nagu oleks George EP Box oli öelnud:

Seoses sellega, kui palju tehnilisi teadmisi selles õpetuses nõutakse: see hõlmab küll Pythonis kodeerimist, kuid enamasti kasutame koodi lihtsalt API-de kutsumiseks, seega pole vaja ka sügavaid kodeerimisteadmisi. Kasulik on olla kursis teatud ML-i mõistetega, näiteks sellega, mida see tähendab rong ja juurutada mudel, kontseptsioonid koolitus, kinnitamineja testandmekogumid, ja nii edasi. Samuti on ta suhelnud Transformerite raamatukogu võib olla kasulik, sest me kasutame seda teeki selle õpetuse ajal laialdaselt. Lisan ka kasulikud lingid nende mõistete edasiseks lugemiseks.

Kuna selle õpetuse on kirjutanud algaja, ei eelda ma, et NLP eksperdid ja edasijõudnud süvaõppe praktikud saavad sellest õpetusest suurt osa. Vähemalt mitte tehnilisest vaatenurgast – teile võib lugemine siiski meeldida, nii et ärge lahkuge veel! Kuid peate olema minu lihtsustustega kannatlik – püüdsin järgida põhimõtet, et kõik selles õpetuses olev oleks võimalikult lihtne, kuid mitte lihtsam.

Selle õpetuse ülesehitus

See seeria koosneb neljast osast, mis on jagatud kaheks postituseks, milles me läbime teksti kokkuvõtte projekti eri etappe. Esimeses postituses (jaotis 1) tutvustame alustuseks teksti kokkuvõtte ülesannete mõõdikut – tulemuslikkuse mõõdikut, mis võimaldab hinnata, kas kokkuvõte on hea või halb. Tutvustame ka andmestikku, mida tahame kokku võtta, ja loome baasjoone, kasutades no-ML mudelit – me kasutame lihtsat heuristikat, et luua antud tekstist kokkuvõte. Selle lähtetaseme loomine on igas ML-projektis ülimalt oluline samm, kuna see võimaldab meil kvantifitseerida, kui palju edusamme me tehisintellekti kasutades edaspidi saavutame. See võimaldab meil vastata küsimusele "Kas tõesti tasub AI-tehnoloogiasse investeerida?"

Teises postituses kasutame kokkuvõtete tegemiseks mudelit, mis on juba eelnevalt koolitatud (jaotis 2). See on võimalik kaasaegse lähenemisega ML-is nimega ülekandmisõpe. See on veel üks kasulik samm, sest põhimõtteliselt võtame valmis mudeli ja testime seda oma andmekogus. See võimaldab meil luua teise baasjoone, mis aitab meil näha, mis juhtub siis, kui mudelit oma andmekogus tegelikult treenime. Lähenemist nimetatakse null-shot kokkuvõte, sest mudelil pole meie andmestikuga kokkupuudet olnud.

Pärast seda on aeg kasutada eelkoolitatud mudelit ja koolitada seda meie enda andmestiku põhjal (jaotis 3). Seda nimetatakse ka peenhäälestus. See võimaldab mudelil õppida meie andmete mustritest ja eripäradest ning nendega aeglaselt kohaneda. Pärast mudeli väljaõpetamist kasutame seda kokkuvõtete tegemiseks (jaotis 4).

Kokkuvõttes:

  • Osa 1:
    • 1. jagu: kasutage lähtejoone loomiseks no-ML mudelit
  • Osa 2:
    • 2. jaotis: koostage kokkuvõtteid nullkaadri mudeliga
    • 3. jagu: kokkuvõtliku mudeli koolitamine
    • 4. jagu: hinnake koolitatud mudelit

Kogu selle õpetuse kood on saadaval järgmises GitHub repo.

Mida me selle õpetuse lõpuks saavutame?

Selle õpetuse lõpuks oleme mitte omama teksti kokkuvõtte mudelit, mida saab tootmises kasutada. Meil ei tule isegi a hea kokkuvõtte mudel (sisestage siia scream emoji)!

Selle asemel saame lähtepunktiks projekti järgmisele etapile, mis on katsetamise etapp. Siin tulebki sisse andmeteaduse “teadus”, sest nüüd on tegemist erinevate mudelite ja erinevate seadistustega katsetamisega, et mõista, kas olemasolevate treeningandmetega saab treenida piisavalt head kokkuvõttemudelit.

Ja et olla täiesti läbipaistev, siis on suur võimalus, et järeldus on, et tehnoloogia pole lihtsalt veel küps ja projekti ei viida ellu. Ja selleks võimaluseks peate oma ettevõtte sidusrühmad ette valmistama. Aga see on juba teise postituse teema.

1. jagu: kasutage lähtejoone loomiseks no-ML mudelit

See on meie õpetuse esimene osa teksti kokkuvõtte projekti seadistamise kohta. Selles jaotises loome lähtejoone väga lihtsa mudeli abil, ilma ML-i kasutamata. See on väga oluline samm igas ML-projektis, sest see võimaldab meil mõista, kui palju väärtust ML projekti aja jooksul lisab ja kas tasub sellesse investeerida.

Õpetuse koodi leiate järgmisest GitHub repo.

Andmed, andmed, andmed

Iga ML-projekt algab andmetest! Võimaluse korral peaksime alati kasutama andmeid, mis on seotud sellega, mida soovime teksti kokkuvõtte projektiga saavutada. Näiteks kui meie eesmärk on teha kokkuvõtteid patenditaotlustest, peaksime mudeli koolitamiseks kasutama ka patenditaotlusi. ML-projekti puhul on suur hoiatus see, et koolitusandmed tuleb tavaliselt märgistada. Teksti kokkuvõtte kontekstis tähendab see, et peame esitama nii kokkuvõtva teksti kui ka kokkuvõtte (silt). Ainult mõlemat pakkudes saab mudel teada, milline hea kokkuvõte välja näeb.

Selles õpetuses kasutame avalikult kättesaadavat andmekogumit, kuid kohandatud või privaatset andmekogumit kasutades jäävad sammud ja kood täpselt samaks. Ja veel kord, kui teil on teksti kokkuvõtte mudeli jaoks eesmärk ja teil on vastavad andmed, kasutage selle asemel oma andmeid, et sellest maksimumi saada.

Andmed, mida me kasutame, on arXiv andmestik, mis sisaldab nii arXivi paberite kokkuvõtteid kui ka nende pealkirju. Oma eesmärkidel kasutame kokkuvõtet tekstina abstrakti ja võrdluskokkuvõttena pealkirja. Kõik andmete allalaadimise ja eeltöötluse etapid on saadaval allpool märkmik. Nõuame an AWS-i identiteedi- ja juurdepääsuhaldus (IAM) roll, mis võimaldab laadida andmeid sinna ja sealt Amazoni lihtne salvestusteenus (Amazon S3), et seda sülearvutit edukalt käitada. Andmekogum töötati välja töö osana ArXivi kasutamisest andmestikuna ja on litsentsitud Creative Commons CC0 1.0 Universal Domain Dedication.

Andmed on jagatud kolmeks andmekogumiks: koolitus-, valideerimis- ja katseandmed. Kui soovite kasutada oma andmeid, veenduge, et see oleks ka nii. Järgmine diagramm illustreerib, kuidas me erinevaid andmekogumeid kasutame.

Loomulikult on praegu tavaline küsimus: kui palju andmeid me vajame? Nagu ilmselt juba arvata võite, on vastus: see sõltub. See sõltub sellest, kui spetsialiseerunud domeen on (patenditaotluste kokkuvõtete tegemine erineb üsna palju uudisartiklite kokkuvõtete tegemisest), kui täpne mudel peab olema, et sellest kasu oleks, kui palju peaks maksma mudeli väljaõpe jne. Naaseme selle küsimuse juurde hiljem, kui mudelit tegelikult koolitame, kuid selle puuduseks on see, et projekti katsetamise faasis peame proovima erinevaid andmekogude suurusi.

Mis teeb hea mudeli?

Paljudes ML-projektides on mudeli jõudluse mõõtmine üsna lihtne. Selle põhjuseks on asjaolu, et mudeli tulemuse õigsuses on tavaliselt vähe ebaselgust. Andmestiku sildid on sageli binaarsed (tõene/vale, jah/ei) või kategoorilised. Igal juhul on selle stsenaariumi puhul lihtne võrrelda mudeli väljundit sildiga ja märkida see õigeks või ebaõigeks.

Teksti loomisel muutub see keerulisemaks. Meie andmekogus pakutavad kokkuvõtted (sildid) on vaid üks viis teksti kokkuvõtmiseks. Kuid antud teksti kokkuvõtte tegemiseks on palju võimalusi. Seega, isegi kui mudel ei vasta meie sildile 1:1, võib väljund siiski olla kehtiv ja kasulik kokkuvõte. Kuidas võrrelda mudeli kokkuvõtet meie pakutavaga? Mudeli kvaliteedi mõõtmiseks teksti kokkuvõtete tegemisel kõige sagedamini kasutatav mõõdik on ROUGE skoor. Selle mõõdiku mehaanika mõistmiseks vaadake NLP ülima jõudluse mõõdik. Kokkuvõttes mõõdab ROUGE skoor kattuvust n-grammi (külgnev jada n üksused) mudeli kokkuvõtte (kandidaatide kokkuvõte) ja võrdluskokkuvõtte (silt, mille esitame oma andmekogus) vahel. Kuid loomulikult pole see täiuslik meede. Selle piirangute mõistmiseks vaadake ROUGE'ile või mitte ROUGE'ile?

Niisiis, kuidas me arvutame ROUGE skoori? Selle mõõdiku arvutamiseks on väljas üsna palju Pythoni pakette. Järjepidevuse tagamiseks peaksime kogu projekti vältel kasutama sama meetodit. Kuna me kasutame selle õpetuse hilisemas punktis enda kirjutamise asemel koolitusskripti Transformersi teegist, saame lihtsalt piiluda lähtekoodi skriptist ja kopeerige kood, mis arvutab ROUGE skoori:

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

Kasutades seda skoori arvutamise meetodit, tagame, et võrdleme alati kogu projekti vältel õunu õuntega.

See funktsioon arvutab mitu ROUGE skoori: rouge1, rouge2, rougeLja rougeLsum. "Summa" sisse rougeLsum viitab asjaolule, et see mõõdik arvutatakse üle terve kokkuvõtte, samas kui rougeL arvutatakse üksikute lausete keskmisena. Niisiis, millist ROUGE skoori peaksime oma projekti jaoks kasutama? Jällegi peame katsetamisetapis proovima erinevaid lähenemisviise. Selle eest, mida see väärt on, originaal ROUGE paber märgib, et "ROUGE-2 ja ROUGE-L töötasid hästi ühe dokumendi kokkuvõtete tegemise ülesannetes", samas kui "ROUGE-1 ja ROUGE-L toimivad hästi lühikeste kokkuvõtete hindamisel."

Loo baasjoon

Järgmisena tahame luua baasjoone, kasutades lihtsat no-ML mudelit. Mida see tähendab? Teksti kokkuvõtete valdkonnas kasutatakse paljudes uuringutes väga lihtsat lähenemist: nad võtavad esimesena n teksti lauseid ja kuulutada see kandidaadi kokkuvõtteks. Seejärel võrdlevad nad kandidaadi kokkuvõtet võrdluskokkuvõttega ja arvutavad ROUGE skoori. See on lihtne, kuid võimas lähenemine, mida saame rakendada mõne koodireal (kogu selle osa kood on järgmises märkmik):

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

Selle hindamise jaoks kasutame testandmestikku. See on mõttekas, sest pärast mudeli koolitamist kasutame sama testiandmestikku ka lõplikuks hindamiseks. Proovime ka erinevaid numbreid n: alustame kandidaadi kokkuvõttena ainult esimesest lausest, seejärel kahest esimesest lausest ja lõpuks esimesest kolmest lausest.

Järgmine ekraanipilt näitab meie esimese mudeli tulemusi.

ROUGE hinded on kõrgeimad, ainult esimene lause on kandidaadi kokkuvõte. See tähendab, et rohkem kui ühe lause võtmine muudab kokkuvõtte liiga paljusõnaliseks ja toob kaasa madalama hinde. See tähendab, et me kasutame ühelauseliste kokkuvõtete hindeid lähteväärtusena.

Oluline on märkida, et sellise lihtsa lähenemisviisi puhul on need numbrid tegelikult üsna head, eriti rouge1 skoor. Nende numbrite konteksti asetamiseks võime viidata Pegasuse mudelid, mis näitab tipptasemel mudeli hindeid erinevate andmekogumite jaoks.

Järeldus ja mis edasi

Oma seeria 1. osas tutvustasime andmestikku, mida kasutame kogu kokkuvõteprojektis, ja mõõdikut kokkuvõtete hindamiseks. Seejärel lõime lihtsa, no-ML mudeliga järgmise lähtejoone.

aasta Järgmine postitus, kasutame nullkaadri mudelit – täpsemalt mudelit, mis on spetsiaalselt koolitatud avalike uudiste artiklite teksti kokkuvõtete tegemiseks. Kuid seda mudelit ei õpetata meie andmekogumis üldse (sellest ka nimi "nullpilt").

Jätan teie teha kodutööks, kuidas see nullkaadri mudel meie väga lihtsa lähtetasemega võrreldes toimib. Ühest küljest on see palju keerukam mudel (tegelikult on see närvivõrk). Teisest küljest kasutatakse seda ainult uudisteartiklite kokkuvõtete tegemiseks, nii et sellel võib olla probleeme arXivi andmestikule omaste mustritega.


Teave Autor

Heiko Hotz on tehisintellekti ja masinõppe lahenduste vanemarhitekt ning juhib AWS-i loomuliku keele töötlemise (NLP) kogukonda. Enne seda rolli oli ta Amazoni EL-i klienditeeninduse andmeteaduse juht. Heiko aitab meie klientidel olla edukas AI/ML teekonnal AWS-is ning on töötanud organisatsioonidega paljudes tööstusharudes, sealhulgas kindlustus, finantsteenused, meedia ja meelelahutus, tervishoid, kommunaalteenused ja tootmine. Vabal ajal reisib Heiko nii palju kui võimalik.

Ajatempel:

Veel alates AWS-i masinõpe