At identificere omskrevet tekst har forretningsværdi i mange tilfælde. For eksempel, ved at identificere sætningsomskrivninger, kunne et tekstresumésystem fjerne overflødig information. En anden applikation er at identificere plagierede dokumenter. I dette indlæg finjusterer vi a Knusende ansigt transformer på Amazon SageMaker at identificere parafraserede sætningspar i nogle få trin.
En virkelig robust model kan identificere parafraseret tekst, når det anvendte sprog kan være helt anderledes, og også identificere forskelle, når det anvendte sprog har høj leksikalsk overlapning. I dette indlæg fokuserer vi på det sidste aspekt. Konkret ser vi på, om vi kan træne en model, der kan identificere forskellen mellem to sætninger, der har højt leksikalsk overlap og meget forskellige eller modsatte betydninger. For eksempel har følgende sætninger nøjagtig de samme ord, men modsatte betydninger:
- Jeg tog et fly fra New York til Paris
- Jeg tog et fly fra Paris til New York
Løsningsoversigt
Vi leder dig gennem følgende trin på højt niveau:
- Indstil miljøet.
- Forbered dataene.
- Tokeniser datasættet.
- Finjuster modellen.
- Implementer modellen og udfør inferens.
- Evaluer modellens ydeevne.
Hvis du vil springe over opsætningen af miljøet, kan du bruge følgende notesbog på GitHub og kør koden i SageMaker.
Hugging Face og AWS annoncerede et partnerskab tidligere i 2022, der gør det endnu nemmere at træne Hugging Face-modeller på SageMaker. Denne funktionalitet er tilgængelig gennem udviklingen af Hugging Face AWS Deep Learning Containers (DLC'er). Disse beholdere omfatter Hugging Face Transformers, Tokenizers og Dataset-biblioteket, som giver os mulighed for at bruge disse ressourcer til træning og inferensjobs. For en liste over tilgængelige DLC-billeder, se Tilgængelige Deep Learning Containers-billeder. De vedligeholdes og opdateres regelmæssigt med sikkerhedsrettelser. Du kan finde mange eksempler på, hvordan du træner Hugging Face-modeller med disse DLC'er og Hugging Face Python SDK i det følgende GitHub repo.
PAWS-datasættet
Ved at indse manglen på effektive sætningspar-datasæt, der udviser høj leksikalsk overlapning uden at være omskrivninger, PAWS Datasæt udgivet i 2019 havde til formål at give NLP-fællesskabet (natural language processing) en ny ressource til træning og evaluering af parafrasedetektionsmodeller. PAWS sætningspar genereres i to trin vha Wikipedia og Quora-spørgsmålspar (QQP) datasæt. En sprogmodel bytter først ord i et sætningspar med den samme Bag of Words (BOW) for at generere et sætningspar. Et tilbageoversættelsestrin genererer derefter parafraser med høj BOW-overlap, men ved hjælp af en anden ordrækkefølge. Det endelige PAWS-datasæt indeholder i alt 108,000 menneskemærkede og 656,000 støjende mærkede par.
I dette indlæg bruger vi PAWS-Wiki-mærket (endelig) datasæt fra Hugging Face. Hugging Face har allerede udført dataopdelingen for os, hvilket resulterer i 49,000 sætningspar i træningsdatasættet og 8,000 sætningspar hver til validerings- og testdatasættene. To sætningspareksempler fra træningsdatasættet er vist i det følgende eksempel. Et mærke på 1 indikerer, at de to sætninger er omskrivninger af hinanden.
sætning 1 | sætning 2 | etiket |
Selvom de kan udskiftes, er karrosseristykkerne på de 2 biler ikke ens. | Selvom de ligner hinanden, er karrosseridelene ikke udskiftelige på de 2 biler. | 0 |
Katz blev født i Sverige i 1947 og flyttede til New York City i en alder af 1. | Katz blev født i 1947 i Sverige og flyttede til New York som etårig. | 1 |
Forudsætninger
Du skal opfylde følgende forudsætninger:
- Tilmeld dig en AWS-konto, hvis du ikke har en. For mere information, se Konfigurer Amazon SageMaker-forudsætninger.
- Kom i gang med at bruge SageMaker notebook-forekomster.
- Sæt højre op AWS identitets- og adgangsstyring (IAM) tilladelser. For mere information, se SageMaker roller.
Indstil miljøet
Før vi begynder at undersøge og forberede vores data til modelfinjustering, skal vi konfigurere vores miljø. Lad os starte med at lave en SageMaker notebook-instans. Vælg en AWS-region på din AWS-konto, og følg instruktionerne for at oprette en SageMaker notebook-instans. Notebook-forekomsten kan tage et par minutter at dreje op.
Når notebook-forekomsten kører, skal du vælge conda_pytorch_p38
som din kernetype. For at bruge datasættet Hugging Face skal vi først installere og importere Hugging Face-biblioteket:
Lad os derefter etablere en SageMaker-session. Vi bruger standarden Amazon Simple Storage Service (Amazon S3)-spand tilknyttet SageMaker-sessionen til lagring af PAWS-datasættet og modelartefakter:
Forbered dataene
Vi kan indlæse Hugging Face-versionen af PAWS-datasættet med dens load_dataset()
kommando. Dette kald downloader og importerer PAWS Python-behandlingsscriptet fra Hugging Face GitHub-lageret, som derefter downloader PAWS-datasættet fra den originale URL, der er gemt i scriptet, og cacher dataene som en piletabel på drevet. Se følgende kode:
Før vi begynder at finjustere vores fortrænede BERT-model, lad os se på vores målklassefordeling. Til vores brugssag har PAWS-datasættet binære etiketter (0 angiver, at sætningsparret ikke er en parafrase, og 1 angiver, at det er det). Lad os oprette et søjlediagram for at se klassefordelingen, som vist i følgende kode. Vi ser, at der er et lille problem med klasseubalance i vores træningssæt (56 % negative prøver vs. 44 % positive prøver). Ubalancen er dog lille nok til at undgå at bruge teknikker til afhjælpning af klasseubalance.
Tokeniser datasættet
Før vi kan begynde at finjustere, skal vi tokenisere vores datasæt. Lad os som udgangspunkt sige, at vi ønsker at finjustere og evaluere roberta-base
transformer. Vi valgte roberta-base
fordi det er en generel transformer, der er blevet fortrænet på et stort korpus af engelske data og ofte har vist høj ydeevne på en række NLP-opgaver. Modellen blev oprindeligt introduceret i avisen ROBERTa: En robust optimeret BERT-fortræningstilgang.
Vi udfører tokenisering på sætningerne med en roberta-base
tokenizer fra Hugging Face, som bruger Byte Pair Encoding på byteniveau til at opdele dokumentet i tokens. For flere detaljer om RobERTa tokenizer, se RobertaTokenizer. Fordi vores input er sætningspar, skal vi tokenisere begge sætninger samtidigt. Fordi de fleste BERT-modeller kræver, at inputtet har en fast tokeniseret inputlængde, indstiller vi følgende parametre: max_len=128
, truncation=True
. Se følgende kode:
Det sidste forbehandlingstrin til finjustering af vores BERT-model er at konvertere de tokeniserede tog- og valideringsdatasæt til PyTorch-tensorer og uploade dem til vores S3-spand:
Finjuster modellen
Nu hvor vi er færdige med dataforberedelse, er vi klar til at finjustere vores fortrænede roberta-base
model på parafrase-identifikationsopgaven. Vi kan bruge SageMaker Hugging Face Estimator-klassen til at starte finjusteringsprocessen i to trin. Det første trin er at specificere træningshyperparametrene og metriske definitioner. Variablen med metriske definitioner fortæller Hugging Face Estimator, hvilke typer metrics, der skal udtrækkes fra modellens træningslogfiler. Her er vi primært interesserede i at udtrække valideringssæt-metrikker for hver træningsepoke.
Det andet trin er at instansiere Hugging Face Estimator og starte finjusteringsprocessen med .fit()
metode:
Finjusteringsprocessen tager cirka 30 minutter ved at bruge de angivne hyperparametre.
Implementer modellen og udfør inferens
SageMaker tilbyder flere implementeringsmuligheder afhængigt af din brugssituation. For vedvarende, real-time slutpunkter, der laver én forudsigelse ad gangen, anbefaler vi at bruge SageMaker real-time hosting-tjenester. Hvis du har arbejdsbelastninger, der har inaktive perioder mellem trafikken og kan tolerere koldstart, anbefaler vi at bruge Serverløs slutning. Serverløse slutpunkter starter automatisk computerressourcer og skalerer dem ind og ud afhængigt af trafik, hvilket eliminerer behovet for at vælge instanstyper eller administrere skaleringspolitikker. Vi demonstrerer, hvordan man implementerer vores finjusterede Hugging Face-model til både et slutpunkt i realtid og et serverløst slutpunkt.
Implementer til et slutpunkt i realtid
Du kan implementere et træningsobjekt på real-time inferenshosting i SageMaker ved hjælp af .deploy()
metode. Se en komplet liste over de accepterede parametre Krammede ansigtsmodel. Lad os for at starte med at implementere modellen til én instans ved at indsætte følgende parametre: initial_instance_count
, instance_type
og endpoint_name
. Se følgende kode:
Modellen tager et par minutter at implementere. Efter at modellen er implementeret, kan vi indsende prøveregistreringer fra det usete testdatasæt til slutpunktet til slutning.
Implementer til et serverløst slutpunkt
For at implementere vores træningsobjekt på et serverløst slutpunkt skal vi først angive en serverløs konfigurationsfil med memory_size_in_mb
, max_concurrency
argumenter:
memory_size_in_mb
definerer den samlede RAM-størrelse for dit serverløse slutpunkt; den minimale RAM-størrelse er 1024 MB (1 GB), og den kan skaleres op til 6144 MB (6 GB). Generelt bør du tilstræbe at vælge en hukommelsesstørrelse, der er mindst lige så stor som din modelstørrelse. max_concurrency
definerer kvoten for, hvor mange samtidige opkald, der kan behandles på samme tid (op til 50 samtidige opkald) for et enkelt slutpunkt.
Vi skal også levere Hugging Face inference image URI, som du kan hente ved hjælp af følgende kode:
Nu hvor vi har den serverløse konfigurationsfil, kan vi oprette et serverløst slutpunkt på samme måde som vores realtids-slutpunkt ved hjælp af .deploy()
metode:
Slutpunktet bør oprettes om et par minutter.
Udfør modelslutning
For at lave forudsigelser skal vi oprette sætningsparret ved at tilføje [CLS]
, [SEP]
specielle tokens og efterfølgende indsende input til modellens endepunkter. Syntaksen for inferens i realtid og serverløs inferens er den samme:
I de følgende eksempler kan vi se, at modellen er i stand til korrekt at klassificere, om inputsætningsparret indeholder parafraserede sætninger.
Det følgende er et eksempel på en realtidsslutning.
Følgende er et eksempel på serverløs inferens.
Evaluer modellens ydeevne
For at evaluere modellen, lad os udvide den foregående kode og indsende alle 8,000 usete testposter til realtidsslutpunktet:
Dernæst kan vi oprette en klassifikationsrapport ved hjælp af de udtrukne forudsigelser:
Vi får følgende testresultater.
Det kan vi observere roberta-base
har en kombineret makrogennemsnitlig F1-score på 92 % og klarer sig lidt bedre til at opdage sætninger, der er omskrivninger. Det roberta-base
modellen fungerer godt, men det er god praksis at beregne modellens ydeevne ved hjælp af mindst én anden model.
Den følgende tabel sammenligner roberta-base
ydelsesresultater på det samme testsæt mod en anden finjusteret transformer kaldet paraphrase-mpnet-base-v2
, en sætningstransformer, der er foruddannet specifikt til parafrase-identifikationsopgaven. Begge modeller blev trænet på en ml.p3.8xlarge instans.
Det viser resultaterne roberta-base
har en 1 % højere F1-score med meget ens trænings- og slutningstider ved brug af slutningshosting i realtid på SageMaker. Ydelsesforskellen mellem modellerne er dog relativt lille, roberta-base
er i sidste ende vinderen, da den har marginalt bedre præstationsmålinger og næsten identiske trænings- og slutningstider.
Precision | Recall | F1-score | Træningstid (fakturerbar) | Inferenstid (fuldt testsæt) | |
roberta-base | 0.92 | 0.93 | 0.92 | 18 minutter | 2 minutter |
parafrase-mpnet- base-v2 |
0.92 | 0.91 | 0.91 | 17 minutter | 2 minutter |
Ryd op
Når du er færdig med at bruge modellens slutpunkter, kan du slette dem for at undgå fremtidige gebyrer:
Konklusion
I dette indlæg diskuterede vi, hvordan man hurtigt opbygger en parafrase-identifikationsmodel ved hjælp af Hugging Face-transformere på SageMaker. Vi finjusterede to fortrænede transformere, roberta-base
, paraphrase-mpnet-base-v2
, ved hjælp af PAWS-datasættet (som indeholder sætningspar med høj leksikalsk overlapning). Vi demonstrerede og diskuterede fordelene ved realtidsinferens vs. Serverless Inference-implementering, hvor sidstnævnte er en ny funktion, der er målrettet mod spidse arbejdsbelastninger og eliminerer behovet for at administrere skaleringspolitikker. På et uset testsæt med 8,000 rekorder viste vi, at begge modeller opnåede en F1-score på mere end 90 %.
For at udvide denne løsning skal du overveje følgende:
- Prøv at finjustere med dit eget brugerdefinerede datasæt. Hvis du ikke har tilstrækkelige træningsetiketter, kan du evaluere ydeevnen af en finjusteret model som den, der er demonstreret i dette indlæg på et brugerdefineret testdatasæt.
- Integrer denne finjusterede model i en downstream-applikation, der kræver information om, hvorvidt to sætninger (eller tekstblokke) er omskrivninger af hinanden.
Glad bygning!
Om forfatterne
Bala Krishnamoorthy er dataforsker hos AWS Professional Services, hvor han nyder at anvende maskinlæring til at løse kunders forretningsproblemer. Han har specialiseret sig i brugscases til behandling af naturligt sprog og har arbejdet med kunder i brancher som software, økonomi og sundhedsvæsen. I sin fritid nyder han at prøve ny mad, se komedier og dokumentarfilm, træne på Orange Theory og være ude på vandet (paddle-boarding, snorkling og forhåbentlig snart dykning).
Ivan Cui er Data Scientist hos AWS Professional Services, hvor han hjælper kunder med at bygge og implementere løsninger ved hjælp af machine learning på AWS. Han har arbejdet med kunder på tværs af forskellige brancher, herunder software, økonomi, medicinalindustrien og sundhedspleje. I sin fritid nyder han at læse, tilbringe tid med sin familie og maksimere sin aktieportefølje.
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Om
- adgang
- Konto
- opnået
- tværs
- Alle
- allerede
- Amazon
- annoncerede
- En anden
- Anvendelse
- Anvendelse
- cirka
- argumenter
- til rådighed
- AWS
- være
- fordele
- krop
- grænse
- bygge
- virksomhed
- ringe
- stand
- biler
- tilfælde
- afgifter
- Vælg
- By
- klasse
- klassificering
- kode
- Kolonne
- kombineret
- samfund
- fuldstændig
- Compute
- tillid
- Beholdere
- indeholder
- kunne
- skabe
- oprettet
- skik
- kunde
- Kunder
- data
- dataforsker
- demonstrere
- demonstreret
- Afhængigt
- indsætte
- indsat
- implementering
- detaljer
- Detektion
- Udvikling
- forskellige
- fordeling
- dokumentarfilm
- dokumenter
- downloads
- køre
- effektiv
- Endpoint
- Engelsk
- Miljø
- etablere
- evaluere
- eksempel
- udstille
- Udvid
- Ansigtet
- familie
- Feature
- finansiere
- Fornavn
- fly
- Fokus
- følger
- efter
- mad
- Gratis
- fuld
- funktion
- funktionalitet
- fremtiden
- generelle formål
- generelt
- generere
- GitHub
- godt
- større
- sundhedspleje
- højde
- hjælper
- link.
- Høj
- højere
- Hosting
- Hvordan
- How To
- HTTPS
- Identifikation
- identificere
- identificere
- Identity
- billede
- omfatter
- Herunder
- industrier
- oplysninger
- indgang
- installere
- interesseret
- spørgsmål
- IT
- Karriere
- Etiketter
- Sprog
- stor
- lancere
- læring
- Bibliotek
- Liste
- belastning
- maskine
- machine learning
- maerker
- administrere
- Hukommelse
- Metrics
- ML
- model
- modeller
- mere
- mest
- flere
- Natural
- negativ
- New York
- New York
- notesbog
- Tilbud
- optimeret
- Indstillinger
- ordrer
- Andet
- egen
- Papir
- Paris
- Partnerskab
- Passing
- Patches
- ydeevne
- perioder
- Pharmaceutical
- Punkt
- politikker
- portefølje
- positiv
- praksis
- forudsigelse
- Forudsigelser
- problemer
- behandle
- forarbejdning
- professionel
- give
- spørgsmål
- quora
- RAM
- rand
- Læsning
- realtid
- anbefaler
- optegnelser
- frigivet
- indberette
- Repository
- kræver
- ressource
- Ressourcer
- Resultater
- afkast
- Kør
- kører
- Scale
- skalering
- Videnskabsmand
- sikkerhed
- valgt
- Serverless
- Tjenester
- sæt
- indstilling
- lignende
- Simpelt
- Størrelse
- lille
- Software
- solid
- løsninger
- Løsninger
- SOLVE
- særligt
- specialiseret
- specifikt
- udgifterne
- Spin
- delt
- starte
- påbegyndt
- starter
- bestand
- opbevaring
- butik
- Efterfølgende
- forsyne
- Sverige
- systemet
- mål
- opgaver
- teknikker
- fortæller
- prøve
- Gennem
- tid
- tokenization
- tokeniseret
- Tokens
- top
- fakkel
- Trafik
- Kurser
- Oversættelse
- us
- brug
- validering
- værdi
- række
- Specifikation
- Vand
- Hvad
- hvorvidt
- Wikipedia
- inden for
- uden
- ord
- arbejdede
- arbejder
- træner