Å identifisere omskrevet tekst har forretningsverdi i mange brukstilfeller. For eksempel, ved å identifisere setningsomskrivninger, kan et tekstoppsummeringssystem fjerne overflødig informasjon. En annen applikasjon er å identifisere plagierte dokumenter. I dette innlegget finjusterer vi a Klemme ansiktet transformator på Amazon SageMaker for å identifisere parafraserte setningspar i noen få trinn.
En virkelig robust modell kan identifisere parafrasert tekst når språket som brukes kan være helt annerledes, og også identifisere forskjeller når språket som brukes har høy leksikalsk overlapping. I dette innlegget fokuserer vi på det siste aspektet. Konkret ser vi på om vi kan trene en modell som kan identifisere forskjellen mellom to setninger som har høy leksikalsk overlapping og svært ulike eller motsatte betydninger. For eksempel har følgende setninger nøyaktig samme ord, men motsatte betydninger:
- Jeg tok et fly fra New York til Paris
- Jeg tok et fly fra Paris til New York
Løsningsoversikt
Vi går gjennom følgende trinn på høyt nivå:
- Sett opp miljøet.
- Forbered dataene.
- Tokeniser datasettet.
- Finjuster modellen.
- Distribuer modellen og utfør slutning.
- Evaluer modellens ytelse.
Hvis du vil hoppe over å sette opp miljøet, kan du bruke følgende notatbok på GitHub og kjør koden i SageMaker.
Hugging Face og AWS annonserte et partnerskap tidligere i 2022 som gjør det enda enklere å trene Hugging Face-modeller på SageMaker. Denne funksjonaliteten er tilgjengelig gjennom utviklingen av Hugging Face AWS Deep Learning Containers (DLC-er). Disse beholderne inkluderer Hugging Face Transformers, Tokenizers og Dataset-biblioteket, som lar oss bruke disse ressursene til trening og slutningsjobber. For en liste over tilgjengelige DLC-bilder, se Tilgjengelige bilder av Deep Learning Containers. De vedlikeholdes og oppdateres jevnlig med sikkerhetsoppdateringer. Du kan finne mange eksempler på hvordan du trener Hugging Face-modeller med disse DLC-ene og Hugging Face Python SDK i de neste GitHub repo.
PAWS-datasettet
Innser mangelen på effektive setningspar-datasett som viser høy leksikalsk overlapping uten å være parafraser, PAWS datasettet utgitt i 2019 hadde som mål å gi NLP-fellesskapet (natural language processing) en ny ressurs for opplæring og evaluering av parafrasedeteksjonsmodeller. PAWS setningspar genereres i to trinn ved hjelp av Wikipedia og Quora-spørsmålspar (QQP) datasett. En språkmodell bytter først ord i et setningspar med den samme Bag of Words (BOW) for å generere et setningspar. Et tilbakeoversettelsestrinn genererer deretter parafraser med høy BOW-overlapping, men med en annen ordrekkefølge. Det endelige PAWS-datasettet inneholder totalt 108,000 656,000 menneskemerkede og XNUMX XNUMX støyende merkede par.
I dette innlegget bruker vi PAWS-Wiki-merket (endelig) datasett fra Hugging Face. Hugging Face har allerede utført datadelingen for oss, som resulterer i 49,000 8,000 setningspar i treningsdatasettet, og 1 XNUMX setningspar hver for validerings- og testdatasettene. To setningspareksempler fra treningsdatasettet er vist i følgende eksempel. En etikett på XNUMX indikerer at de to setningene er omskrivninger av hverandre.
Setning 1 | Setning 2 | Etiketten |
Selv om de er utskiftbare, er ikke karosseridelene på de 2 bilene like. | Selv om de er like, er ikke karosseridelene utskiftbare på de 2 bilene. | 0 |
Katz ble født i Sverige i 1947 og flyttet til New York City i en alder av 1. | Katz ble født i 1947 i Sverige og flyttet til New York i en alder av ett år. | 1 |
Forutsetninger
Du må fullføre følgende forutsetninger:
- Registrer deg for en AWS-konto hvis du ikke har en. For mer informasjon, se Sett opp Amazon SageMaker-forutsetninger.
- Kom i gang med å bruke SageMaker notatbokforekomster.
- Sett opp høyre AWS identitets- og tilgangsadministrasjon (IAM) tillatelser. For mer informasjon, se SageMaker-roller.
Sett opp miljøet
Før vi begynner å undersøke og forberede dataene våre for modellfinjustering, må vi sette opp miljøet vårt. La oss starte med å spinne opp en SageMaker notatbokforekomst. Velg en AWS-region i AWS-kontoen din og følg instruksjonene for å opprette en SageMaker notatbokforekomst. Det kan ta noen minutter å snurre opp forekomsten av den bærbare datamaskinen.
Når den bærbare forekomsten kjører, velger du conda_pytorch_p38
som din kjernetype. For å bruke datasettet Hugging Face må vi først installere og importere Hugging Face-biblioteket:
Deretter, la oss etablere en SageMaker-økt. Vi bruker standard Amazon enkel lagringstjeneste (Amazon S3) bøtte tilknyttet SageMaker-økten for å lagre PAWS-datasettet og modellartefakter:
Forbered dataene
Vi kan laste Hugging Face-versjonen av PAWS-datasettet med sin load_dataset()
kommando. Denne samtalen laster ned og importerer PAWS Python-behandlingsskriptet fra Hugging Face GitHub-depotet, som deretter laster ned PAWS-datasettet fra den opprinnelige URL-adressen som er lagret i skriptet og hurtigbufrer dataene som en piltabell på stasjonen. Se følgende kode:
Før vi begynner å finjustere vår ferdigtrente BERT-modell, la oss se på målklassefordelingen vår. For vårt bruksområde har PAWS-datasettet binære etiketter (0 indikerer at setningsparet ikke er en parafrase, og 1 indikerer at det er det). La oss lage et kolonnediagram for å se klassefordelingen, som vist i følgende kode. Vi ser at det er en liten klasseubalanse i treningssettet vårt (56 % negative prøver vs. 44 % positive prøver). Ubalansen er imidlertid liten nok til å unngå bruk av klasseubalansebegrensningsteknikker.
Tokeniser datasettet
Før vi kan begynne å finjustere, må vi tokenisere datasettet vårt. Som et utgangspunkt, la oss si at vi ønsker å finjustere og evaluere roberta-base
transformator. Vi valgte roberta-base
fordi det er en generell transformator som ble forhåndsopplært på et stort korpus av engelske data og ofte har vist høy ytelse på en rekke NLP-oppgaver. Modellen ble opprinnelig introdusert i avisen RoBERTa: En Robust Optimized BERT Pretraining Approach.
Vi utfører tokenisering på setningene med en roberta-base
tokenizer fra Hugging Face, som bruker byte-par-koding på bytenivå for å dele opp dokumentet i tokens. For mer informasjon om RobERTa tokenizer, se RobertaTokenizer. Fordi inndataene våre er setningspar, må vi tokenisere begge setningene samtidig. Fordi de fleste BERT-modeller krever at inngangen har en fast tokenisert inngangslengde, angir vi følgende parametere: max_len=128
og truncation=True
. Se følgende kode:
Det siste forbehandlingstrinnet for å finjustere BERT-modellen vår er å konvertere tokeniserte tog- og valideringsdatasett til PyTorch-tensorer og laste dem opp til S3-bøtten vår:
Finjuster modellen
Nå som vi er ferdige med dataforberedelse, er vi klare til å finjustere våre forhåndstrente roberta-base
modell på parafraseidentifikasjonsoppgaven. Vi kan bruke SageMaker Hugging Face Estimator-klassen for å starte finjusteringsprosessen i to trinn. Det første trinnet er å spesifisere treningshyperparametrene og metriske definisjoner. Variabelen for metriske definisjoner forteller Hugging Face Estimator hvilke typer beregninger som skal trekkes ut fra modellens treningslogger. Her er vi først og fremst interessert i å trekke ut beregninger for valideringssett for hver treningsepoke.
Det andre trinnet er å instansiere Hugging Face Estimator og starte finjusteringsprosessen med .fit()
metode:
Finjusteringsprosessen tar omtrent 30 minutter ved å bruke de spesifiserte hyperparametrene.
Distribuer modellen og utfør slutning
SageMaker tilbyr flere distribusjonsalternativer avhengig av din brukssituasjon. For vedvarende endepunkter i sanntid som gir én prediksjon om gangen, anbefaler vi å bruke SageMaker sanntids hostingtjenester. Hvis du har arbeidsmengder som har inaktive perioder mellom trafikksprutene og som tåler kaldstart, anbefaler vi å bruke Serverløs slutning. Serverløse endepunkter starter automatisk dataressurser og skalerer dem inn og ut avhengig av trafikk, noe som eliminerer behovet for å velge forekomsttyper eller administrere skaleringspolicyer. Vi demonstrerer hvordan du distribuerer vår finjusterte Hugging Face-modell til både et sanntidsslutningsendepunkt og et serverløst inferensendepunkt.
Distribuer til et endepunkt for sanntidsslutning
Du kan distribuere et opplæringsobjekt på sanntidsslutningshosting i SageMaker ved å bruke .deploy()
metode. For en fullstendig liste over aksepterte parametere, se Klemende ansiktsmodell. For å starte, la oss distribuere modellen til én forekomst ved å sende inn følgende parametere: initial_instance_count
, instance_type
og endpoint_name
. Se følgende kode:
Modellen tar noen minutter å distribuere. Etter at modellen er distribuert, kan vi sende inn prøveposter fra det usynlige testdatasettet til endepunktet for slutning.
Distribuer til et serverløst sluttpunkt
For å distribuere opplæringsobjektet vårt på et serverløst endepunkt, må vi først spesifisere en serverløs konfigurasjonsfil med memory_size_in_mb
og max_concurrency
argumenter:
memory_size_in_mb
definerer den totale RAM-størrelsen til ditt serverløse endepunkt; den minimale RAM-størrelsen er 1024 MB (1 GB) og den kan skaleres opp til 6144 MB (6 GB). Generelt bør du ta sikte på å velge en minnestørrelse som er minst like stor som modellstørrelsen din. max_concurrency
definerer kvoten for hvor mange samtidige påkallinger som kan behandles på samme tid (opptil 50 samtidige påkallinger) for et enkelt endepunkt.
Vi må også levere Hugging Face-inferensbilde-URI, som du kan hente ved å bruke følgende kode:
Nå som vi har den serverløse konfigurasjonsfilen, kan vi opprette et serverløst endepunkt på samme måte som vårt sanntidsslutningsendepunkt, ved å bruke .deploy()
metode:
Endepunktet bør opprettes i løpet av noen få minutter.
Utfør modellslutning
For å lage spådommer må vi lage setningsparet ved å legge til [CLS]
og [SEP]
spesielle tokens og deretter sende inn input til modellens endepunkter. Syntaksen for sanntidsslutning og serverløs inferens er den samme:
I de følgende eksemplene kan vi se at modellen er i stand til å klassifisere korrekt om inndatasetningsparet inneholder parafraserte setninger.
Følgende er et sanntidseksempel.
Følgende er et eksempel på serverløs inferens.
Evaluer modellens ytelse
For å evaluere modellen, la oss utvide den foregående koden og sende inn alle 8,000 usynlige testposter til sanntidsendepunktet:
Deretter kan vi lage en klassifiseringsrapport ved å bruke de utpakkede spådommene:
Vi får følgende testresultater.
Det kan vi observere roberta-base
har en kombinert makrogjennomsnittlig F1-score på 92 % og presterer litt bedre til å oppdage setninger som er parafraser. De roberta-base
modellen gir gode resultater, men det er god praksis å beregne modellytelsen ved å bruke minst én annen modell.
Følgende tabell sammenligner roberta-base
ytelsesresultater på samme testsett mot en annen finjustert transformator kalt paraphrase-mpnet-base-v2
, en setningstransformator som er forhåndstrent spesielt for parafrase-identifikasjonsoppgaven. Begge modellene ble trent på en ml.p3.8xlarge instans.
Resultatene viser det roberta-base
har 1 % høyere F1-poengsum med svært like trenings- og slutningstider ved bruk av slutningshosting i sanntid på SageMaker. Ytelsesforskjellen mellom modellene er imidlertid relativt liten, roberta-base
er til syvende og sist vinneren siden den har marginalt bedre ytelsesmålinger og nesten identiske trenings- og slutningstider.
Precision | Husker | F1-stillingen | Treningstid (fakturerbar) | Inferenstid (fullt testsett) | |
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 |
Rydd opp
Når du er ferdig med å bruke modellendepunktene, kan du slette dem for å unngå fremtidige kostnader:
konklusjonen
I dette innlegget diskuterte vi hvordan du raskt kan bygge en parafrase-identifikasjonsmodell ved å bruke Hugging Face-transformatorer på SageMaker. Vi finjusterte to ferdigtrente transformatorer, roberta-base
og paraphrase-mpnet-base-v2
, ved å bruke PAWS-datasettet (som inneholder setningspar med høy leksikalsk overlapping). Vi demonstrerte og diskuterte fordelene med sanntidsslutning vs. serverløs inferens-distribusjon, sistnevnte er en ny funksjon som retter seg mot piggete arbeidsbelastninger og eliminerer behovet for å administrere skaleringspolicyer. På et usett testsett med 8,000 rekorder, demonstrerte vi at begge modellene oppnådde en F1-score på over 90 %.
For å utvide denne løsningen, vurder følgende:
- Prøv å finjustere med ditt eget tilpassede datasett. Hvis du ikke har tilstrekkelige opplæringsetiketter, kan du evaluere ytelsen til en finjustert modell som den som er demonstrert i dette innlegget på et tilpasset testdatasett.
- Integrer denne finjusterte modellen i en nedstrømsapplikasjon som krever informasjon om hvorvidt to setninger (eller tekstblokker) er omskrivninger av hverandre.
Glad bygning!
Om forfatterne
Bala Krishnamoorthy er en dataforsker med AWS Professional Services, hvor han liker å bruke maskinlæring for å løse kundeproblemer. Han har spesialisert seg på brukstilfeller for behandling av naturlig språk og har jobbet med kunder i bransjer som programvare, finans og helsevesen. På fritiden liker han å prøve ny mat, se komedier og dokumentarer, trene på Orange Theory og være ute på vannet (padle-boarding, snorkling og forhåpentligvis dykking snart).
Ivan Cui er en dataforsker med AWS Professional Services, hvor han hjelper kunder med å bygge og distribuere løsninger ved hjelp av maskinlæring på AWS. Han har jobbet med kunder på tvers av ulike bransjer, inkludert programvare, finans, farmasøytisk og helsevesen. På fritiden liker han å lese, tilbringe tid med familien og maksimere aksjeporteføljen.
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Om oss
- adgang
- Logg inn
- oppnådd
- tvers
- Alle
- allerede
- Amazon
- annonsert
- En annen
- Søknad
- påføring
- ca
- argumenter
- tilgjengelig
- AWS
- være
- Fordeler
- kroppen
- grensen
- bygge
- virksomhet
- ring
- stand
- biler
- saker
- avgifter
- Velg
- City
- klasse
- klassifisering
- kode
- Kolonne
- kombinert
- samfunnet
- helt
- Beregn
- selvtillit
- Containere
- inneholder
- kunne
- skape
- opprettet
- skikk
- kunde
- Kunder
- dato
- dataforsker
- demonstrere
- demonstrert
- avhengig
- utplassere
- utplassert
- distribusjon
- detaljer
- Gjenkjenning
- Utvikling
- forskjellig
- distribusjon
- dokumentarer
- dokumenter
- nedlastinger
- stasjonen
- effektiv
- Endpoint
- Engelsk
- Miljø
- etablere
- evaluere
- eksempel
- viser
- Expand
- Face
- familie
- Trekk
- finansiere
- Først
- flytur
- Fokus
- følge
- etter
- mat
- Gratis
- fullt
- funksjon
- funksjonalitet
- framtid
- generell
- generelt
- generere
- GitHub
- god
- større
- helsetjenester
- høyde
- hjelper
- her.
- Høy
- høyere
- Hosting
- Hvordan
- Hvordan
- HTTPS
- Identifikasjon
- identifisere
- identifisering
- Identitet
- bilde
- inkludere
- Inkludert
- bransjer
- informasjon
- inngang
- installere
- interessert
- utstedelse
- IT
- Jobb
- etiketter
- Språk
- stor
- lansere
- læring
- Bibliotek
- Liste
- laste
- maskin
- maskinlæring
- GJØR AT
- administrer
- Minne
- Metrics
- ML
- modell
- modeller
- mer
- mest
- flere
- Naturlig
- negativ
- New York
- New York City
- bærbare
- Tilbud
- optimalisert
- alternativer
- rekkefølge
- Annen
- egen
- Papir
- paris
- Partnerskap
- Passerer
- Patches
- ytelse
- perioder
- Pharmaceutical
- Point
- Politikk
- portefølje
- positiv
- praksis
- prediksjon
- Spådommer
- problemer
- prosess
- prosessering
- profesjonell
- gi
- spørsmål
- quora
- RAM
- alle
- Lesning
- sanntids
- anbefaler
- poster
- utgitt
- rapporterer
- Repository
- krever
- ressurs
- Ressurser
- Resultater
- retur
- Kjør
- rennende
- Skala
- skalering
- Forsker
- sikkerhet
- valgt
- server~~POS=TRUNC
- Tjenester
- sett
- innstilling
- lignende
- Enkelt
- Størrelse
- liten
- Software
- solid
- løsning
- Solutions
- LØSE
- spesiell
- spesialisert
- spesielt
- utgifter
- Snurre rundt
- splittet
- Begynn
- startet
- starter
- lager
- lagring
- oppbevare
- I ettertid
- levere
- Sverige
- system
- Target
- oppgaver
- teknikker
- forteller
- test
- Gjennom
- tid
- tokenization
- symbolbaserte
- tokens
- topp
- lommelykt
- trafikk
- Kurs
- Oversettelse
- us
- bruke
- validering
- verdi
- variasjon
- Se
- Vann
- Hva
- om
- Wikipedia
- innenfor
- uten
- ord
- arbeidet
- arbeid
- trene