Att identifiera omskriven text har affärsvärde i många användningsfall. Till exempel, genom att identifiera meningsomskrivningar, kan ett textsammanfattningssystem ta bort överflödig information. En annan applikation är att identifiera plagierade dokument. I det här inlägget finjusterar vi a Kramande ansikte transformator på Amazon SageMaker för att identifiera parafraserade meningspar i några få steg.
En verkligt robust modell kan identifiera parafraserad text när språket som används kan vara helt annorlunda, och även identifiera skillnader när språket som används har hög lexikal överlappning. I det här inlägget fokuserar vi på den senare aspekten. Specifikt tittar vi på om vi kan träna en modell som kan identifiera skillnaden mellan två meningar som har hög lexikal överlappning och väldigt olika eller motsatta betydelser. Till exempel har följande meningar exakt samma ord men motsatta betydelser:
- Jag tog ett flyg från New York till Paris
- Jag tog ett flyg från Paris till New York
Lösningsöversikt
Vi går igenom följande steg på hög nivå:
- Ställ in miljön.
- Förbered data.
- Tokenisera datasetet.
- Finjustera modellen.
- Distribuera modellen och utför slutledning.
- Utvärdera modellens prestanda.
Om du vill hoppa över att ställa in miljön kan du använda följande anteckningsbok på GitHub och kör koden i SageMaker.
Hugging Face och AWS tillkännagav ett partnerskap tidigare under 2022 som gör det ännu enklare att träna Hugging Face-modeller på SageMaker. Denna funktion är tillgänglig genom utvecklingen av Hugging Face AWS Deep Learning Containers (DLC). Dessa behållare inkluderar Hugging Face Transformers, Tokenizers och Dataset-biblioteket, vilket gör att vi kan använda dessa resurser för utbildning och slutledningsjobb. För en lista över tillgängliga DLC-bilder, se Tillgängliga bilder för Deep Learning Containers. De underhålls och uppdateras regelbundet med säkerhetskorrigeringar. Du kan hitta många exempel på hur man tränar Hugging Face-modeller med dessa DLC:er och Hugging Face Python SDK i följande GitHub repo.
PAWS-datauppsättningen
Inser bristen på effektiva meningspar datamängder som uppvisar hög lexikal överlappning utan att vara parafraser, TAFSAR datauppsättning som släpptes 2019 syftade till att ge NLP-gemenskapen (natural language processing) en ny resurs för utbildning och utvärdering av parafrasdetekteringsmodeller. PAWS meningspar genereras i två steg med hjälp av wikipedia och Quora Frågepar (QQP) dataset. En språkmodell byter först ord i ett meningspar med samma Bag of Words (BOW) för att generera ett meningspar. Ett bakåtöversättningssteg genererar sedan parafraser med hög BOW-överlappning men med en annan ordordning. Den slutliga PAWS-datauppsättningen innehåller totalt 108,000 656,000 människomärkta och XNUMX XNUMX bullrigt märkta par.
I det här inlägget använder vi PAWS-Wiki märkt (final) dataset från Hugging Face. Hugging Face har redan utfört datauppdelningen åt oss, vilket resulterar i 49,000 8,000 meningspar i träningsdatauppsättningen och 1 XNUMX meningspar vardera för validerings- och testdatauppsättningarna. Två exempel på meningspar från träningsdatauppsättningen visas i följande exempel. En etikett på XNUMX indikerar att de två meningarna är omskrivningar av varandra.
mening 1 | mening 2 | etikett |
Även om de är utbytbara, är karossdelarna på de två bilarna inte lika. | Även om de liknar varandra är karossdelarna inte utbytbara på de två bilarna. | 0 |
Katz föddes i Sverige 1947 och flyttade till New York City vid 1 års ålder. | Katz föddes 1947 i Sverige och flyttade till New York vid ett års ålder. | 1 |
Förutsättningar
Du måste uppfylla följande förutsättningar:
- Registrera dig för ett AWS-konto om du inte har ett. För mer information, se Ställ in Amazon SageMaker-förutsättningar.
- Börja använda SageMaker notebook-instanser.
- Ställ in höger AWS identitets- och åtkomsthantering (IAM) behörigheter. För mer information, se SageMaker roller.
Ställ in miljön
Innan vi börjar undersöka och förbereda vår data för modellfinjustering måste vi ställa in vår miljö. Låt oss börja med att snurra upp en SageMaker-anteckningsbok-instans. Välj en AWS-region i ditt AWS-konto och följ instruktionerna för att skapa en SageMaker anteckningsbok-instans. Notebook-instansen kan ta några minuter att snurra upp.
När notebook-instansen körs väljer du conda_pytorch_p38
som din kärntyp. För att använda datauppsättningen Hugging Face måste vi först installera och importera Hugging Face-biblioteket:
Låt oss sedan upprätta en SageMaker-session. Vi använder standard Amazon enkel lagringstjänst (Amazon S3) hink associerad med SageMaker-sessionen för att lagra PAWS-datauppsättningen och modellartefakter:
Förbered data
Vi kan ladda Hugging Face-versionen av PAWS-datauppsättningen med dess load_dataset()
kommando. Det här anropet laddar ner och importerar PAWS Python-bearbetningsskriptet från Hugging Face GitHub-förvaret, som sedan laddar ner PAWS-dataset från den ursprungliga URL:en lagrad i skriptet och cachar data som en piltabell på enheten. Se följande kod:
Innan vi börjar finjustera vår förutbildade BERT-modell, låt oss titta på vår målklassfördelning. För vårt användningsfall har PAWS-datauppsättningen binära etiketter (0 anger att meningsparet inte är en omskrivning och 1 anger att det är det). Låt oss skapa ett kolumndiagram för att se klassfördelningen, som visas i följande kod. Vi ser att det finns ett litet klassobalansproblem i vår träningsuppsättning (56 % negativa prover mot 44 % positiva prover). Obalansen är dock tillräckligt liten för att undvika att använda tekniker för att lindra klassobalanser.
Tokenisera datasetet
Innan vi kan börja finjustera måste vi tokenisera vår datauppsättning. Som en utgångspunkt, låt oss säga att vi vill finjustera och utvärdera roberta-base
transformator. Vi valde roberta-base
eftersom det är en transformator för allmänt bruk som var förutbildad på en stor mängd engelska data och som ofta har visat hög prestanda på en mängd olika NLP-uppgifter. Modellen introducerades ursprungligen i tidningen RoBERTa: En robust optimerad BERT-förutbildningsstrategi.
Vi utför tokenisering på meningarna med a roberta-base
tokenizer från Hugging Face, som använder byte-parkodning på bytenivå för att dela upp dokumentet i tokens. För mer information om RobERTa tokenizer, se RobertaTokenizer. Eftersom våra indata är meningspar måste vi tokenisera båda meningarna samtidigt. Eftersom de flesta BERT-modeller kräver att ingången har en fast tokeniserad ingångslängd, ställer vi in följande parametrar: max_len=128
och truncation=True
. Se följande kod:
Det sista förbearbetningssteget för att finjustera vår BERT-modell är att konvertera de tokeniserade tåg- och valideringsdatauppsättningarna till PyTorch-tensorer och ladda upp dem till vår S3-hink:
Finjustera modellen
Nu när vi är klara med dataförberedelser är vi redo att finjustera våra förtränade roberta-base
modell på parafrasidentifieringsuppgiften. Vi kan använda SageMaker Hugging Face Estimator-klassen för att initiera finjusteringsprocessen i två steg. Det första steget är att specificera träningshyperparametrarna och metriska definitioner. Variabeln för metriska definitioner talar om för Hugging Face Estimator vilka typer av mätvärden som ska extraheras från modellens träningsloggar. Här är vi främst intresserade av att extrahera mätvärden för valideringsuppsättningar vid varje träningsepok.
Det andra steget är att instansiera Hugging Face Estimator och starta finjusteringsprocessen med .fit()
metod:
Finjusteringsprocessen tar cirka 30 minuter med de angivna hyperparametrarna.
Distribuera modellen och utför slutledning
SageMaker erbjuder flera distributionsalternativ beroende på ditt användningsfall. För ihållande, realtidsslutpunkter som gör en förutsägelse i taget rekommenderar vi att du använder SageMaker värdtjänster i realtid. Om du har arbetsbelastningar som har tomgångsperioder mellan trafiksprutorna och som tål kallstarter rekommenderar vi att du använder Serverlös slutledning. Serverlösa slutpunkter startar automatiskt beräkningsresurser och skalar in och ut dem beroende på trafik, vilket eliminerar behovet av att välja instanstyper eller hantera skalningspolicyer. Vi visar hur man distribuerar vår finjusterade Hugging Face-modell till både en slutpunkt i realtid och en slutpunkt för serverlös slutpunkt.
Distribuera till en slutpunkt i realtid
Du kan distribuera ett träningsobjekt på realtidsvärd för slutledning inom SageMaker med hjälp av .deploy()
metod. För en fullständig lista över accepterade parametrar, se Kramande ansiktsmodell. Till att börja med, låt oss distribuera modellen till en instans genom att skicka in följande parametrar: initial_instance_count
, instance_type
och endpoint_name
. Se följande kod:
Modellen tar några minuter att distribuera. Efter att modellen har distribuerats kan vi skicka in exempelposter från den osynliga testdatauppsättningen till slutpunkten för slutledning.
Distribuera till en serverlös slutpunkt
För att distribuera vårt träningsobjekt på en serverlös slutpunkt måste vi först ange en serverlös konfigurationsfil med memory_size_in_mb
och max_concurrency
argument:
memory_size_in_mb
definierar den totala RAM-storleken för din serverlösa slutpunkt; den minimala RAM-storleken är 1024 MB (1 GB) och den kan skalas upp till 6144 MB (6 GB). Generellt bör du sträva efter att välja en minnesstorlek som är minst lika stor som din modellstorlek. max_concurrency
definierar kvoten för hur många samtidiga anrop som kan behandlas samtidigt (upp till 50 samtidiga anrop) för en enda slutpunkt.
Vi måste också tillhandahålla Hugging Face inferensbild-URI, som du kan hämta med följande kod:
Nu när vi har den serverlösa konfigurationsfilen kan vi skapa en serverlös slutpunkt på samma sätt som vår slutpunkt i realtid, med hjälp av .deploy()
metod:
Slutpunkten bör skapas inom några minuter.
Utför modellinferens
För att göra förutsägelser måste vi skapa meningsparet genom att lägga till [CLS]
och [SEP]
speciella tokens och sedan skicka in input till modellens slutpunkter. Syntaxen för realtidsinferens och serverlös slutledning är densamma:
I följande exempel kan vi se att modellen är kapabel att korrekt klassificera om det inmatade meningsparet innehåller omskrivna meningar.
Följande är ett realtidsexempel.
Följande är ett exempel på serverlös slutledning.
Utvärdera modellens prestanda
För att utvärdera modellen, låt oss utöka den föregående koden och skicka alla 8,000 XNUMX osynliga testposter till realtidsslutpunkten:
Därefter kan vi skapa en klassificeringsrapport med hjälp av de extraherade förutsägelserna:
Vi får följande provresultat.
Det kan vi observera roberta-base
har ett kombinerat makrogenomsnittligt F1-poäng på 92 % och presterar något bättre på att upptäcka meningar som är omskrivningar. De roberta-base
Modellen fungerar bra, men det är god praxis att beräkna modellens prestanda med minst en annan modell.
Följande tabell jämförs roberta-base
prestandaresultat på samma testuppsättning mot en annan finjusterad transformator som anropas paraphrase-mpnet-base-v2
, en meningstransformator som är förutbildad specifikt för parafrasidentifieringsuppgiften. Båda modellerna tränades på en ml.p3.8xlarge instans.
Resultaten visar det roberta-base
har 1 % högre F1-poäng med mycket liknande tränings- och slutledningstider med hjälp av realtidsvärdskap för slutledning på SageMaker. Prestandaskillnaden mellan modellerna är dock relativt liten, roberta-base
är i slutändan vinnaren eftersom den har marginellt bättre prestationsmått och nästan identiska tränings- och slutledningstider.
Precision | Recall | F1-poäng | Utbildningstid (fakturerbar) | Slutledningstid (full testuppsättning) | |
roberta-bas | 0.92 | 0.93 | 0.92 | 18 minuter | 2 minuter |
parafrasera-mpnet- bas-v2 |
0.92 | 0.91 | 0.91 | 17 minuter | 2 minuter |
Städa upp
När du är klar med att använda modellens slutpunkter kan du ta bort dem för att undvika framtida avgifter:
Slutsats
I det här inlägget diskuterade vi hur man snabbt bygger en parafrasidentifieringsmodell med Hugging Face-transformatorer på SageMaker. Vi finjusterade två förtränade transformatorer, roberta-base
och paraphrase-mpnet-base-v2
, med hjälp av PAWS-datauppsättningen (som innehåller meningspar med hög lexikal överlappning). Vi demonstrerade och diskuterade fördelarna med realtidsinferens vs Serverless Inference-distribution, den senare är en ny funktion som riktar sig mot taggiga arbetsbelastningar och eliminerar behovet av att hantera skalningspolicyer. På ett osynligt testset med 8,000 1 rekord visade vi att båda modellerna uppnådde en F90-poäng på över XNUMX %.
För att utöka den här lösningen, överväg följande:
- Prova att finjustera med din egen anpassade datauppsättning. Om du inte har tillräckliga utbildningsetiketter kan du utvärdera prestandan för en finjusterad modell som den som visas i det här inlägget på en anpassad testdatauppsättning.
- Integrera denna finjusterade modell i en nedströmsapplikation som kräver information om huruvida två meningar (eller textblock) är omskrivningar av varandra.
Lycklig byggnad!
Om författarna
Bala Krishnamoorthy är en dataforskare med AWS Professional Services, där han tycker om att tillämpa maskininlärning för att lösa kunders affärsproblem. Han är specialiserad på användningsfall för behandling av naturligt språk och har arbetat med kunder inom branscher som mjukvara, finans och sjukvård. På fritiden tycker han om att prova ny mat, titta på komedier och dokumentärer, träna på Orange Theory och vara ute på vattnet (paddle-boarding, snorkling och förhoppningsvis dykning snart).
Ivan Cui är en dataforskare med AWS Professional Services, där han hjälper kunder att bygga och distribuera lösningar med hjälp av maskininlärning på AWS. Han har arbetat med kunder i olika branscher, inklusive mjukvara, finans, läkemedel och hälsovård. På fritiden tycker han om att läsa, umgås med sin familj och maximera sin aktieportfölj.
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Om oss
- tillgång
- Konto
- uppnås
- tvärs
- Alla
- redan
- amason
- meddelade
- Annan
- Ansökan
- Tillämpa
- cirka
- argument
- tillgänglig
- AWS
- Där vi får lov att vara utan att konstant prestera,
- Fördelarna
- kropp
- gränsen
- SLUTRESULTAT
- företag
- Ring
- kapabel
- bilar
- fall
- avgifter
- Välja
- Stad
- klass
- klassificering
- koda
- Kolumn
- kombinerad
- samfundet
- fullständigt
- Compute
- förtroende
- Behållare
- innehåller
- kunde
- skapa
- skapas
- beställnings
- kund
- Kunder
- datum
- datavetare
- demonstrera
- demonstreras
- beroende
- distribuera
- utplacerade
- utplacering
- detaljer
- Detektering
- Utveckling
- olika
- fördelning
- dokumentärer
- dokument
- Nedladdningar
- driv
- effektiv
- Slutpunkt
- Engelska
- Miljö
- etablera
- utvärdera
- exempel
- uppvisar
- Bygga ut
- Ansikte
- familj
- Leverans
- finansiering
- Förnamn
- flyg
- Fokus
- följer
- efter
- livsmedelsproduktion
- Fri
- full
- fungera
- funktionalitet
- framtida
- generell mening
- allmänhet
- generera
- GitHub
- god
- större
- hälso-och sjukvård
- höjd
- hjälper
- här.
- Hög
- högre
- värd
- Hur ser din drömresa ut
- How To
- HTTPS
- Identifiering
- identifiera
- identifiera
- Identitet
- bild
- innefattar
- Inklusive
- industrier
- informationen
- ingång
- installera
- intresserad
- fråga
- IT
- Lediga jobb
- Etiketter
- språk
- Large
- lansera
- inlärning
- Bibliotek
- Lista
- läsa in
- Maskinen
- maskininlärning
- GÖR
- hantera
- Minne
- Metrics
- ML
- modell
- modeller
- mer
- mest
- multipel
- Natural
- negativ
- New York
- new york city
- anteckningsbok
- Erbjudanden
- optimerad
- Tillbehör
- beställa
- Övriga
- egen
- Papper
- paris
- Partnerskap
- Förbi
- Plåster
- prestanda
- perioder
- Läkemedelsindustrin
- Punkt
- Strategier
- portfölj
- positiv
- praktiken
- förutsägelse
- Förutsägelser
- problem
- process
- bearbetning
- professionell
- ge
- fråga
- quora
- RAM
- rand
- Läsning
- realtid
- rekommenderar
- register
- frigörs
- rapport
- Repository
- kräver
- resurs
- Resurser
- Resultat
- avkastning
- Körning
- rinnande
- Skala
- skalning
- Forskare
- säkerhet
- vald
- Server
- Tjänster
- in
- inställning
- liknande
- Enkelt
- Storlek
- Small
- Mjukvara
- fast
- lösning
- Lösningar
- LÖSA
- speciell
- specialiserat
- specifikt
- Spendera
- Snurra
- delas
- starta
- igång
- startar
- lager
- förvaring
- lagra
- Senare
- leverera
- Sverige
- system
- Målet
- uppgifter
- tekniker
- berättar
- testa
- Genom
- tid
- tokenization
- befogenhetsbeskrivas
- tokens
- topp
- brännaren
- trafik
- Utbildning
- Översättning
- us
- användning
- godkännande
- värde
- mängd
- utsikt
- Vatten
- Vad
- om
- wikipedia
- inom
- utan
- ord
- arbetade
- arbetssätt
- tränar