De afgelopen jaren heeft het begrijpen van natuurlijke talen (NLU) steeds meer bedrijfswaarde gekregen, aangewakkerd door modelverbeteringen en de schaalbaarheid en kostenefficiëntie van cloudgebaseerde infrastructuur. In het bijzonder de Transformator deep learning-architectuur, vaak geïmplementeerd in de vorm van BERT modellen is zeer succesvol geweest, maar het trainen, verfijnen en optimaliseren van deze modellen is een uitdagend probleem gebleken. Dankzij de Samenwerking tussen AWS en Hugging Face, is het nu eenvoudiger om NLU-modellen te trainen en te optimaliseren Amazon Sage Maker met behulp van de SageMaker Python SDK, maar het verkrijgen van gelabelde gegevens voor deze modellen is nog steeds moeilijk en tijdrovend.
Een NLU-probleem dat van bijzonder zakelijk belang is, is het beantwoorden van vragen. In dit bericht laten we zien hoe u een aangepaste gegevensset voor het beantwoorden van vragen kunt bouwen met behulp van Amazon SageMaker Grondwaarheid om een knuffelgezichtsvraag te trainen die het NLU-model beantwoordt.
Vraag beantwoorden van uitdagingen
Het beantwoorden van vragen houdt in dat een model automatisch een antwoord produceert op een vraag, op basis van een stuk tekst dat het antwoord al dan niet bevat. Gegeven de volgende vraag bijvoorbeeld: "Welke workflows ondersteunt SageMaker Ground Truth?" een model zou in de volgende paragraaf het segment “annotatieconsolidatie en audit” moeten kunnen identificeren:
SageMaker Ground Truth helpt de kwaliteit van labels te verbeteren door middel van annotatieconsolidatie en auditworkflows. Annotatieconsolidatie is het proces waarbij labelinvoer van twee of meer gegevenslabelers wordt verzameld en deze worden gecombineerd om één gegevenslabel voor uw machine learning-model te maken. Met ingebouwde audit- en beoordelingsworkflows kunnen werknemers etiketverificatie uitvoeren en aanpassingen maken om de nauwkeurigheid te verbeteren.
Dit probleem is een uitdaging omdat er een model voor nodig is om de betekenis van een vraag te begrijpen, in plaats van eenvoudigweg op trefwoord te zoeken. Nauwkeurige modellen op dit gebied kunnen de kosten voor klantenondersteuning verlagen door het aandrijven van intelligente chatbots, het leveren van hoogwaardige stemassistentproducten en het verhogen van de omzet van online winkels door het gepersonaliseerde beantwoorden van productvragen. Een grote dataset op dit gebied is de Stanford-gegevensset voor het beantwoorden van vragen (SQuAD), een gevarieerde dataset voor het beantwoorden van vragen die een model presenteert met korte tekstpassages en vereist dat het model de locatie van de antwoordtekstreeks in de passage voorspelt. SQuAD is een dataset voor begrijpend lezen, bestaande uit vragen die door crowdworkers worden gesteld over een reeks Wikipedia-artikelen, waarbij het antwoord op elke vraag ofwel een stuk tekst uit de overeenkomstige passage is, ofwel op een andere manier gemarkeerd is als onmogelijk om te beantwoorden.
Een uitdaging bij het aanpassen van SQuAD voor zakelijk gebruik is het genereren van domeinspecifieke aangepaste datasets. Dit proces van het creëren van nieuwe vraag- en antwoorddatasets vereist een gespecialiseerde gebruikersinterface waarmee annotators reeksen kunnen markeren en vragen aan die reeksen kunnen toevoegen. Het moet ook de toevoeging van onmogelijke vragen kunnen ondersteunen ter ondersteuning van het SQuAD 2.0-formaat, inclusief niet-beantwoordbare vragen. Deze onmogelijke vragen helpen modellen meer inzicht te krijgen in welke vragen niet kunnen worden beantwoord met behulp van de gegeven passage. De aangepaste werknemerssjablonen in Ground Truth vereenvoudigt het genereren van deze datasets door werknemers een op maat gemaakte annotatie-ervaring te bieden voor het maken van vraag- en antwoorddatasets.
Overzicht oplossingen
Deze oplossing maakt en beheert Ground Truth-labeltaken om een domeinspecifieke aangepaste vraag-antwoord-dataset te labelen met behulp van een aangepaste annotatie-gebruikersinterface. We gebruiken SageMaker om een Hugging Face
BERT-model gebouwd met PyTorch op een aangepaste dataset voor het beantwoorden van vragen.
U kunt de oplossing implementeren door het meegeleverde AWS CloudFormatie sjabloon in uw AWS-account. AWS CloudFormation zorgt voor de implementatie van de AWS Lambda functies die pre-annotatie en annotatieconsolidatie ondersteunen voor de annotatiegebruikersinterface. Het creëert ook een Amazon eenvoudige opslagservice (Amazon S3) emmer en de AWS Identiteits- en toegangsbeheer (IAM)-rollen die u kunt gebruiken bij het maken van een labeltaak.
In dit bericht wordt uitgelegd hoe u het volgende kunt doen:
- Creëer uw eigen dataset voor het beantwoorden van vragen, of breid een bestaande uit met Ground Truth
- Gebruik Hugging Face-gegevenssets om tekst te combineren en te tokeniseren
- Verfijn een BERT-model op basis van uw vraag-antwoordgegevens met behulp van SageMaker-training
- Implementeer uw model op een SageMaker-eindpunt en visualiseer uw resultaten
Annotatie gebruikersinterface
Wij gebruiken een nieuwe aangepaste taaksjabloon voor werknemers met Ground Truth om nieuwe annotaties toe te voegen aan de bestaande SQuAD-dataset. Deze oplossing biedt een taaksjabloon voor werknemers, evenals een Lambda-functie vóór de annotatie (die het plaatsen van gegevens in de gebruikersinterface afhandelt) en een Lambda-functie na de annotatie (die resultaten uit de gebruikersinterface haalt nadat het labelen is voltooid).
Deze aangepaste werknemerstaaksjabloon geeft u de mogelijkheid om tekst in het rechterdeelvenster te markeren en vervolgens een overeenkomstige vraag in het linkerdeelvenster toe te voegen die betrekking heeft op de gemarkeerde tekst. Gemarkeerde tekst in het rechterdeelvenster kan ook worden toegevoegd aan eerder gemaakte vragen. Bovendien kunt u onmogelijke vragen toevoegen volgens Ploeg 2.0 formaat. Met onmogelijke vragen kunnen modellen het aantal onbetrouwbare fout-positieve gissingen verminderen wanneer de passage een vraag niet kan beantwoorden.
Deze gebruikersinterface gebruikt hetzelfde JSON-schema als de SQuAD 2.0-dataset, wat betekent dat deze over meerdere artikelen en alinea's kan werken, waarbij één alinea tegelijk wordt weergegeven met behulp van de Vorige en Volgende toetsen. De gebruikersinterface maakt het gemakkelijk om het labelwerk dat elke annotator moet voltooien tijdens de taakverzendingsstap te controleren en te bepalen.
Omdat de annotatie-UI zich in één bevindt Vloeistof HTML-bestand kunt u de labelervaring aanpassen met kennis van standaard JavaScript. U kunt ook wijzigen Vloeibare tags om aanvullende informatie door te geven aan de etiketteringsinterface, en u kunt de sjabloon zelf aanpassen om gedetailleerdere werknemersinstructies op te nemen.
Geschatte kosten
Het implementeren van deze oplossing kan een maximale kostprijs van ongeveer $ 20 met zich meebrengen, afgezien van de menselijke etiketteringskosten. Amazon S3, Lambda, SageMaker en Ground Truth bieden allemaal de AWS-vrije laag, met kosten voor extra gebruik. Voor meer informatie, zie de volgende prijspagina's:
- Amazon S3-prijzen
- AWS Lambda-prijzen
- Amazon SageMaker-prijzen
- Amazon SageMaker Data Labeling Prijzen – Deze vergoeding is afhankelijk van het type personeel dat u inzet. Als u een nieuwe gebruiker van Ground Truth bent, raden we u aan een eigen personeelsbestand te gebruiken en uzelf als werknemer op te nemen om uw labeltaakconfiguratie te testen.
Voorwaarden
Om deze oplossing te implementeren, moet u aan de volgende vereisten voldoen:
- An AWS-account.
- Bekendheid met Ground Truth. Voor meer informatie, zie Gebruik Amazon SageMaker Ground Truth om gegevens te labelen.
- Bekendheid met AWS CloudFormation. Voor meer informatie, zie de AWS CloudFormation-gebruikershandleiding.
- Een SageMaker personeelsbestand. Voor deze demonstratie maken wij gebruik van eigen arbeidskrachten. U kunt een personeelsbestand maken op de SageMaker-console.
De volgende GIF laat zien hoe u een privépersoneelsbestand kunt creëren. Voor instructies, zie Maak een Amazon Cognito Workforce met behulp van de Labelling Workforces-pagina.
Start de CloudFormation-stack
Nu u de structuur van de oplossing heeft gezien, implementeert u deze in uw account, zodat u een voorbeeldworkflow kunt uitvoeren. Alle implementatiestappen met betrekking tot de labelpijplijn worden beheerd door AWS CloudFormation. Dit betekent dat AWS CloudFormation uw pre-annotatie- en annotatieconsolidatie Lambda-functies creëert, evenals een S3-bucket om invoer- en uitvoergegevens op te slaan.
U kunt de stapel starten in AWS-regio us-east-1
op de AWS CloudFormation-console met behulp van de Start Stack knop. Om de stapel in een andere regio te starten, gebruikt u de instructies in de README van de GitHub-repository.
Bedien het notitieboekje
Nadat de oplossing in uw account is geïmplementeerd, wordt een notebookinstantie met de naam gt-hf-squad-notebook
is beschikbaar in uw account. Om de notebook te gaan gebruiken, voert u de volgende stappen uit:
- Navigeer op de Amazon SageMaker-console naar de notebook-instantiepagina.
- Kies JupyterLab openen om de instantie te openen.
- Blader binnen de instantie naar de repository
hf-gt-custom-qa
en open het notitieboekjehf_squad_finetuning.ipynb
. - Kies
conda_pytorch_p38
als je kernel.
Nu u een notebookinstantie hebt gemaakt en de notebook hebt geopend, kunt u cellen in de notebook uitvoeren om de oplossing te gebruiken. In de rest van dit bericht vindt u gaandeweg aanvullende details over elke sectie in het notitieblok.
Download en controleer de gegevens
De SQuAD-gegevensset bevat een trainingsdataset en test- en ontwikkelingsdatasets. Het notebook downloadt de SQuAD2.0-dataset voor u, maar u kunt kiezen welke versie van SQuAD u wilt gebruiken door de notebookcel aan te passen onder Download en controleer de gegevens.
SQuAD is gemaakt door Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev en Percy Liang. Voor meer informatie, zie de origineel papier en dataset. SQuAD is door de auteurs gelicentieerd onder de Creative Commons Attribution-ShareAlike 4.0 Internationale publieke licentie.
Laten we eens kijken naar een voorbeeld van een vraag-en-antwoordpaar van SQuAD:
Paragraaftitel: Immuunsysteem
Het immuunsysteem is een systeem van vele biologische structuren en processen binnen een organisme dat beschermt tegen ziekten. Om goed te kunnen functioneren moet een immuunsysteem een grote verscheidenheid aan ziekteverwekkers detecteren, van virussen tot parasitaire wormen, en deze onderscheiden van het gezonde weefsel van het organisme zelf. Bij veel soorten kan het immuunsysteem worden ingedeeld in subsystemen, zoals het aangeboren immuunsysteem versus het adaptieve immuunsysteem, of humorale immuniteit versus celgemedieerde immuniteit. Bij mensen scheiden de bloed-hersenbarrière, de bloed-hersenvochtbarrière en soortgelijke vloeistof-hersenbarrières het perifere immuunsysteem van het neuro-immuunsysteem dat de hersenen beschermt.
Vraag: Waartegen beschermt het immuunsysteem organismen?
Antwoord: ziekte
Laad model
Nu je een voorbeeld van een vraag-en-antwoordpaar in SQuAD hebt bekeken, kun je een model downloaden dat je kunt verfijnen voor het beantwoorden van vragen. Met Hugging Face kunt u eenvoudig een basismodel downloaden dat een grootschalige voortraining heeft ondergaan, en dit opnieuw initialiseren voor een andere downstream-taak. In dit geval downloadt u de distilbert-base-uncased
model en hergebruik het voor het beantwoorden van vragen met behulp van de AutoModelForQuestionAnswering
les van Knuffelgezicht. Je maakt ook gebruik van de AutoTokenizer
klasse om de vooraf getrainde tokenizer van het model op te halen. We duiken dieper in het model dat we later in de post gebruiken.
Bekijk BERT-invoer
BERT vereist dat u tekstgegevens omzet in een numerieke representatie die bekend staat als penningen. Er zijn verschillende tokenizers beschikbaar; de volgende tokens zijn gemaakt door een tokenizer die speciaal voor BERT is ontworpen en die u instantiseert met een vaste woordenschat. Elk token verwijst naar een woord in de woordenschat. Laten we eens kijken naar de vraag over het getransformeerde immuunsysteem en de context die u BERT ter gevolgtrekking verstrekt.
Modelinferentie
Nu u hebt gezien wat BERT als invoer gebruikt, gaan we kijken hoe u gevolgtrekkingsresultaten uit het model kunt halen. De volgende code laat zien hoe u de eerder gegenereerde tokenized invoer kunt gebruiken en gevolgtrekkingsresultaten uit het model kunt retourneren. Net zoals BERT geen onbewerkte tekst als invoer kan accepteren, genereert het ook geen onbewerkte tekst als uitvoer. Je vertaalt de output van BERT door het begin- en eindpunt te identificeren in de paragraaf die BERT als antwoord heeft geïdentificeerd. Vervolgens koppelt u die uitvoer aan onze tokens en terug aan de Engelse tekst.
De vertaalde resultaten zijn als volgt:
Vraag: Waartegen beschermt het immuunsysteem organismen?
Antwoord: ziekte
Vergroot SQuAD
Om vervolgens aanvullende gelabelde gegevens te verkrijgen, gebruiken we a aangepaste taaksjabloon voor werknemers in Grondwaarheid. We kunnen eerst een nieuw artikel maken in SQuAD-formaat. De notebook kopieert dit bestand van de repository naar Amazon S3, maar u kunt gerust wijzigingen aanbrengen voordat u het Vergroot SQuAD cel. Het formaat van SQuAD wordt weergegeven in de volgende code. Elk SQuAD JSON-bestand bevat meerdere artikelen die zijn opgeslagen in de data
sleutel. Elk artikel heeft een title
veld en een of meer alinea's. Deze paragrafen bevatten tekstgedeelten die worden genoemd context
en eventuele bijbehorende vragen in de qas
lijst. Omdat we helemaal opnieuw aantekeningen maken, kunnen we de qas
lijst leeg en geef alleen context. De gebruikersinterface kan zowel alinea's als artikelen doorlopen, zodat u elke werknemerstaak zo groot of klein kunt maken als u wilt.
Nadat we een voorbeeld van een SQuAD-gegevensbestand hebben gegenereerd, moeten we een Ground Truth maken uitgebreid manifestbestand dat verwijst naar onze invoergegevens. We doen dit door een JSON-bestand met lijnenopmaak te genereren met de tekst “source
' sleutel die overeenkomt met de locatie in Amazon S3 waar we onze invoer SQuAD-gegevens hebben opgeslagen:
Toegang tot het labelportaal
Nadat u de taak naar Ground Truth heeft verzonden, kunt u de gegenereerde labeltaak bekijken op de Ground Truth-console.
Om het labelen uit te voeren, moet u inloggen op het werknemersportalaccount dat u hebt gemaakt als onderdeel van de vereiste stappen. Na een paar minuten voorverwerking is uw vacature beschikbaar in het medewerkersportaal. Nadat u de taak hebt geopend, krijgt u de aangepaste werknemerssjabloon voor vraag- en antwoordannotaties te zien. U kunt vragen toevoegen door delen van de tekst in de context te markeren en vervolgens te kiezen Voeg vraag toe.
Controleer de status van de labeltaak
Na indiening kunt u de Controleer de status van de labeltaak cel om te zien of uw labeltaak voltooid is. Wacht op voltooiing voordat u doorgaat naar verdere cellen.
Gelabelde gegevens laden
Na het labelen bevat het uitvoermanifest een vermelding met uw labelkenmerknaam (in dit geval squad-1626282229
) met een S3 URI naar SQuAD-geformatteerde gegevens die u tijdens de training kunt gebruiken. Zie de volgende inhoud van het uitvoermanifest:
Elke regel in het manifest komt overeen met één werkertaak.
SQuAD-treinset laden
Knuffelgezicht heeft een dataset-pakket dat geeft je de mogelijkheid om SQuAD te downloaden en voor te verwerken, maar om onze aangepaste vragen en antwoorden toe te voegen, moeten we wat verwerking doen. SQuAD is gestructureerd rond reeksen onderwerpen. Elk onderwerp heeft een verscheidenheid aan verschillende contextverklaringen en elke contextverklaring heeft vraag- en antwoordparen. Omdat we onze eigen vragen voor training willen creëren, moeten we onze vragen combineren met SQuAD. Gelukkig voor ons zijn onze annotaties al in SQuAD-formaat, dus we kunnen onze voorbeeldlabels nemen en deze als een nieuw onderwerp toevoegen aan de bestaande SQuAD-gegevens.
Maak een Hugging Face Dataset-object
Om onze gegevens in het datasetformaat van Hugging Face te krijgen, hebben we verschillende opties. Wij kunnen gebruik maken van de laad_gegevensset optie, in welk geval wij een CSV-, JSON- of tekstbestand kunnen aanleveren dat als datasetobject wordt geladen. U kunt ook leveren load_dataset
met een verwerkingsscript om uw bestand naar het gewenste formaat te converteren. Voor dit bericht gebruiken we in plaats daarvan de Dataset.from_dict()
methode, waarmee we een woordenboek in het geheugen kunnen leveren om een datasetobject te maken. We definiëren ook onze datasetfuncties. We kunnen de functies bekijken door gebruik te maken van De datasetviewer van Hugging Face, zoals weergegeven in de volgende schermafbeelding.
Onze kenmerken zijn als volgt:
- ID – De ID van de tekst
- titel – De bijbehorende titel voor het onderwerp
- verband – De contextverklaring waarin het model moet zoeken om een antwoord te vinden
- vraag – De vraag die aan het model wordt gesteld
- beantwoorden – De geaccepteerde antwoordtekst en locatie in de contextverklaring
Met Hugging Face-gegevenssets kunnen we dit schema eenvoudig definiëren:
Nadat we ons datasetobject hebben gemaakt, moeten we dit doen tokenize de tekst. Omdat modellen geen ruwe tekst als invoer kunnen accepteren, moeten we onze tekst omzetten in een numerieke invoer die deze kan begrijpen, ook wel bekend als tokenization. Tokenisatie is modelspecifiek, dus laten we het model begrijpen dat we gaan verfijnen. Wij gebruiken een distillbert-base-uncased model. Het lijkt erg op BERT: het maakt gebruik van invoerinbedding en aandacht voor meerdere hoofden (voor meer informatie over deze bewerking raadpleegt u De geïllustreerde transformator), en feed-forward-lagen, maar heeft de helft van de parameters van het originele BERT-basismodel. Zie de volgende initiële modellagen:
Laten we elk onderdeel van de titel van het model opsplitsen. De naam distilbert
geeft aan dat dit een gedestilleerde versie is van het BERT-basismodel, dat wordt verkregen via een proces dat wordt genoemd kennis distillatie. Door kennisdistillatie kunnen we een kleiner leerlingmodel trainen op niet alleen de trainingsgegevens, maar ook op de reacties op dezelfde trainingsset vanuit een groter, vooraf opgeleid lerarenmodel. base
verwijst naar de grootte van het model, in dit geval is het model gedestilleerd uit een BERT-basismodel (in tegenstelling tot een BERT groot model). uncased
verwijst naar de tekst waarop het is getraind. In dit geval hield de tekst geen rekening met hoofdlettergebruik; alle tekst waarop het was getraind, was in kleine letters. De uncased
Dit aspect heeft rechtstreeks invloed op de manier waarop we onze tekst tokeniseren. Gelukkig biedt Hugging Face niet alleen gemakkelijke toegang tot het downloaden van transformatormodellen, maar ook de bijbehorende tokenizer van het model. We hebben ook een aangepaste tokenizer voor onze gedownload distilbert-base-uncased model
die we nu gebruiken om onze tekst te transformeren:
Een ander kenmerk van de datasetklasse is dat het ons in staat stelt voorbewerking en tokenisatie parallel met de kaartfunctie uit te voeren. We definiëren een verwerkingsfunctie en geven deze vervolgens door aan de kaartmethode.
Voor het beantwoorden van vragen heeft Knuffelgezicht verschillende componenten nodig (die ook zijn gedefinieerd in de woordenlijst):
- aandacht masker – Een masker dat aan het model aangeeft op welke tokens aandacht moet worden besteed, voornamelijk gebruikt om onderscheid te maken tussen daadwerkelijke tekst en opvultokens
- start_posities – De startpositie van het antwoord in de tekst
- eindposities – De eindpositie van het antwoord in de tekst
- invoer_id's – De tokenindexen die de tokens aan het vocabulaire toewijzen
Onze tokenizer tokeniseert de tekst, maar we moeten de begin- en eindposities van ons antwoord expliciet vastleggen. Daarom hebben we een aangepaste voorverwerkingsfunctie gedefinieerd. Nu we onze input klaar hebben, gaan we beginnen met trainen!
Trainingstaak starten
We kunnen training in onze notebook uitvoeren, maar de typen instances die we nodig hebben om ons vraag- en antwoordmodel in een redelijke tijd te trainen, p3- en p4-instances, zijn behoorlijk krachtig. Deze exemplaren zijn vaak overdreven voor het uitvoeren van een notebook of als persistent Amazon Elastic Compute-cloud (Amazon EC2) exemplaar. Dit is waar SageMaker-training van pas komt. Met SageMaker-training kunt u een trainingstaak starten op een specifiek exemplaar of op exemplaren die alleen beschikbaar zijn voor de duur van de trainingstaak. Hierdoor kunnen we op grotere instances draaien, zoals de p4d.24xlarge, met 8 NVIDIA A100 GPU's, maar zonder dat we ons zorgen hoeven te maken over een hoge rekening voor het geval we vergeten deze uit te schakelen. Het geeft ons ook eenvoudig toegang tot andere SageMaker-functionaliteiten, zoals SageMaker-experimenten voor het bijhouden van uw ML-trainingsruns en SageMaker-foutopsporing voor het begrijpen en profileren van uw opleidingstaken.
Lokale training
Laten we beginnen met begrijpen hoe het trainen van een model in Hugging Face lokaal werkt, en vervolgens de aanpassingen doornemen die we maken om het in SageMaker uit te voeren.
Hugging Face maakt trainen eenvoudig door het gebruik van hun trainerklasse. Met de trainerklasse kunnen we ons model, onze trein- en validatiedatasets, onze hyperparameters en zelfs onze tokenizer doorgeven. Omdat we ons model en onze trainings- en validatiesets al hebben, hoeven we alleen onze hyperparameters te definiëren. Dit kunnen wij doen via de TrainingArguments
klas. Hierdoor kunnen we zaken specificeren zoals de leersnelheid, de batchgrootte, het aantal tijdperken en meer diepgaande parameters zoals gewichtsverval of een strategie voor het plannen van de leersnelheid. Nadat we onze TrainingArguments
, kunnen we ons model, trainingsset, validatieset en argumenten doorgeven om onze trainerklasse te instantiëren. Dan kunnen wij gewoon bellen trainer.train()
om ons model te gaan trainen. Het volgende codeblok laat zien hoe u lokale training uitvoert:
Stuur gegevens naar S3
Hetzelfde doen in de SageMaker-training is eenvoudig. De eerste stap is het plaatsen van onze gegevens in Amazon S3, zodat ons model er toegang toe heeft. Met SageMaker-training kunt u een gegevensbron opgeven; je kunt bronnen gebruiken zoals Amazon S3, Amazon elastisch bestandssysteem (Amazon EFS), of Amazon FSx voor Luster voor hoogwaardige gegevensopname. In ons geval is onze uitgebreide SQuAD-dataset niet bijzonder groot, dus Amazon S3 is een goede keuze. We uploaden onze trainingsgegevens naar een map in Amazon S3 en wanneer SageMaker onze trainingsinstantie opstart, worden de gegevens gedownload van onze opgegeven locatie.
Instantie van het model
Om onze trainingsopdracht te lanceren, kunnen we de ingebouwde Hugging Face-schatter in de gebruiken SageMaker-SDK. SageMaker gebruikt de schatterklasse om de parameters voor een trainingstaak te definiëren, evenals het aantal en type instanties dat voor training moet worden gebruikt. SageMaker-training is opgebouwd rond het gebruik van Docker-containers. U kunt de standaardcontainers in SageMaker gebruiken of uw eigen aangepaste container leveren voor training. In het geval van Hugging Face-modellen heeft SageMaker ingebouwde Hugging Face-containers met alle afhankelijkheden die u nodig hebt om Hugging Face-trainingstaken uit te voeren. Het enige dat we hoeven te doen is ons trainingsscript definiëren, dat onze Hugging Face-container als toegangspunt gebruikt.
In dit trainingsscript definiëren we onze argumenten, die we doorgeven aan ons toegangspunt in de vorm van een reeks hyperparameters, evenals onze trainingscode. Onze trainingscode is hetzelfde alsof we deze lokaal zouden uitvoeren; we kunnen gewoon de TrainingArguments
en geef ze vervolgens door aan een trainerobject. Het enige verschil is dat we de uitvoerlocatie voor ons model moeten opgeven /opt/ml/model
zodat SageMaker-training het kan opnemen, verpakken en naar Amazon S3 kan sturen. Het volgende codeblok laat zien hoe u onze Hugging Face-schatter kunt instantiëren:
Verfijn het model
Voor onze specifieke trainingstaak gebruiken we een p3.8xlarge-instantie bestaande uit 4 V100 GPU's. De trainerklasse ondersteunt automatisch training op multi-GPU-instanties, dus we hebben geen extra instellingen nodig om hiermee rekening te houden. We trainen ons model voor twee tijdperken, met een batchgrootte van 16 en een leersnelheid van 4e5. We maken ook gemengde precisietraining mogelijk, waarbij gebruik wordt gemaakt van gemengde precisie op gebieden waar we de numerieke precisie kunnen verminderen zonder de nauwkeurigheid van ons model te beïnvloeden. Dit verhoogt ons beschikbare geheugen en onze trainingssnelheden. Om de trainingsbaan te lanceren, bellen we met de fit
methode van onze huggingface_estimator
klasse.
Wanneer ons model klaar is met trainen, kunnen we het model lokaal downloaden en in het geheugen van onze notebook laden om het te testen, wat wordt gedemonstreerd in de notebook. We zullen ons concentreren op een andere optie: deze inzetten als een SageMaker-eindpunt!
Implementeer een getraind model
Naast het bieden van hulpprogramma's voor training, kan SageMaker datawetenschappers en ML-ingenieurs ook in staat stellen eenvoudig REST-eindpunten te implementeren voor hun getrainde modellen. U kunt modellen implementeren die binnen of buiten SageMaker zijn getraind. Voor meer informatie, zie Een model implementeren in Amazon SageMaker.
Omdat ons model is getraind in SageMaker, heeft het al de juiste indeling om als eindpunt te implementeren. Net als bij training definiëren we een SageMaker-modelklasse die het model, de code en het aantal en type instanties definieert dat we als eindpunten willen implementeren. Net als bij training is de bediening gebaseerd op Docker-containers, en we kunnen een van de ingebouwde SageMaker-containers gebruiken of onze eigen containers leveren. Voor dit bericht gebruiken we een ingebouwde PyTorch-serveercontainer, dus we hoeven alleen maar een paar dingen te definiëren om ons eindpunt operationeel te krijgen. Onze serveercode heeft vier functies nodig:
- model_fn – Definieert hoe het eindpunt het model laadt (het doet dit slechts één keer en bewaart het vervolgens in het geheugen voor volgende voorspellingen)
- invoer_fn – Definieert hoe de invoer wordt gedeserialiseerd en verwerkt
- voorspellen_fn – Definieert hoe ons model voorspellingen doet op basis van onze input
- uitgang_fn – Definieert hoe het eindpunt de uitvoergegevens formatteert en terugstuurt naar de client die het verzoek indient
Nadat we deze functies hebben gedefinieerd, kunnen we ons eindpunt inzetten en contextverklaringen en vragen doorgeven en het voorspelde antwoord retourneren:
Visualiseer modelresultaten
Omdat we een SageMaker-eindpunt hebben geïmplementeerd waarmee we contextinstructies kunnen verzenden en antwoorden kunnen ontvangen, kunnen we teruggaan en de resulterende gevolgtrekkingen visualiseren in de oorspronkelijke SQuAD-viewer om beter te visualiseren wat ons model in de passagecontext heeft gevonden. We doen dit door de resultaten van de gevolgtrekking opnieuw te formatteren in de SQuAD-indeling en vervolgens de Liquid-tags in de werksjabloon te vervangen door de SQuAD-geformatteerde JSON. Vervolgens kunnen we de resulterende gebruikersinterface binnen onze werksjabloon iframen om de resultaten iteratief te beoordelen binnen de context van één notitieblok, zoals weergegeven in de volgende schermafbeelding. Op elke vraag aan de linkerkant kan worden geklikt om de tekstreeksen aan de rechterkant te markeren die overeenkomen met de vraag. Als er geen vraag is geselecteerd, worden alle tekstreeksen aan de rechterkant gemarkeerd, zoals hieronder weergegeven.
Opruimen
Voer het Opruimen sectie van het notitieblok om alle bronnen te verwijderen, inclusief SageMaker-eindpunten, S3-objecten die de onbewerkte en verwerkte gegevensset bevatten, en de CloudFormation-stack. Wanneer het verwijderen is voltooid, zorg er dan voor dat u het notebook-exemplaar stopt en verwijdert dat als host fungeert voor het huidige notebookscript.
Conclusie
In dit bericht heb je geleerd hoe je je eigen vraag-antwoorddataset kunt maken met behulp van Ground Truth en deze kunt combineren met SQuAD om je eigen vraag-antwoordmodel te trainen en te implementeren met SageMaker. Nadat u het notitieblok hebt voltooid, beschikt u over een geïmplementeerd SageMaker-eindpunt dat is getraind op uw aangepaste Q&A-gegevensset. Dit eindpunt is klaar voor integratie in uw productie-NLU-workflows, omdat SageMaker-eindpunten beschikbaar zijn via standaard REST API's. U beschikt ook over een geannoteerde aangepaste dataset in SQuAD 2.0-indeling, waarmee u uw bestaande model opnieuw kunt trainen of andere architectuur voor vraag-antwoordmodellen kunt trainen. Ten slotte beschikt u over een mechanisme om snel de resultaten van uw gevolgtrekking te visualiseren door de werksjabloon in uw lokale notitieblok te laden.
Probeer de notebook, breid het uit met uw eigen vragen, en train en implementeer uw eigen aangepaste vraagantwoordmodel voor uw NLU-gebruiksscenario's!
Gelukkig bouwen!
Over de auteurs
Jeremy Feltracco is Software Development Engineer bij het Amazon ML Solutions Lab bij Amazon Web Services. Hij gebruikt zijn achtergrond in computervisie, robotica en machine learning om AWS-klanten te helpen hun AI-acceptatie te versnellen.
Vidya Sagar Ravipati is manager bij de Amazon ML Solutions-lab, waar hij gebruikmaakt van zijn uitgebreide ervaring in grootschalige gedistribueerde systemen en zijn passie voor machine learning om AWS-klanten in verschillende branche-branches te helpen hun AI- en cloud-acceptatie te versnellen. Eerder was hij Machine Learning Engineer in Connectivity Services bij Amazon, die hielp bij het bouwen van personalisatie- en voorspellende onderhoudsplatforms.
Isaak Privitera is Senior Data Scientist bij het Amazon Machine Learning Solutions Lab, waar hij op maat gemaakte machine learning- en deep learning-oplossingen ontwikkelt om de zakelijke problemen van klanten aan te pakken. Hij werkt voornamelijk op het gebied van computervisie en richt zich op het beschikbaar stellen van AWS-klanten met gedistribueerde training en actief leren.
- Coinsmart. Europa's beste Bitcoin- en crypto-uitwisseling.
- Platoblockchain. Web3 Metaverse Intelligentie. Kennis versterkt. GRATIS TOEGANG.
- CryptoHawk. Altcoin-radar. Gratis proefversie.
- Bron: https://aws.amazon.com/blogs/machine-learning/build-a-custom-qa-dataset-using-amazon-sagemaker-ground-truth-to-train-a-hugging-face-qa- nlu-model/
- "
- &
- 000
- 10
- 100
- 116
- 28
- 39
- 3d
- 7
- 9
- Over
- versnellen
- toegang
- Volgens
- Account
- Accounting
- accuraat
- over
- actieve
- toevoeging
- Extra
- adres
- Adoptie
- agenten
- AI
- Alles
- Het toestaan
- al
- Amazone
- Amazon Web Services
- bedragen
- Nog een
- beantwoorden
- APIs
- architectuur
- GEBIED
- argumenten
- rond
- dit artikel
- artikelen
- Assistent
- aandacht
- controleren
- aangevuld
- auteurs
- geautomatiseerde
- Automatisch
- Beschikbaar
- AWS
- achtergrond
- barrière
- barrières
- Begin
- wezen
- onder
- Bill
- Beetje
- Blok
- lichaam
- grens
- bouw
- ingebouwd
- bedrijfsdeskundigen
- Bellen
- Kan krijgen
- vangen
- gevallen
- uitdagen
- uitdagend
- lasten
- Kies
- klasse
- Cloud
- code
- Het verzamelen van
- bestanddeel
- Berekenen
- computer
- Configuratie
- Connectiviteit
- troosten
- consolidering
- Containers
- containers
- bevat
- inhoud
- aannemers
- Overeenkomend
- Kosten
- en je merk te creëren
- aangemaakt
- creëert
- Wij creëren
- Actueel
- gewoonte
- klant
- Klantenservice
- Klanten
- gegevens
- data scientist
- diepere
- het leveren van
- tonen
- gedemonstreerd
- afhankelijk
- implementeren
- ingezet
- het inzetten
- inzet
- ontworpen
- gedetailleerd
- gegevens
- Bepalen
- Ontwikkeling
- anders
- moeilijk
- direct
- Ziekte
- verdeeld
- havenarbeider
- Nee
- beneden
- Download
- downloads
- aandrijving
- gedurende
- gemakkelijk
- waardoor
- Endpoint
- ingenieur
- Ingenieurs
- Engels
- evaluatie
- voorbeeld
- bestaand
- ervaring
- extracten
- Gezicht
- Kenmerk
- Voordelen
- Tot slot
- Voornaam*
- Focus
- gericht
- volgend
- formulier
- formaat
- Naar voren
- gevonden
- Gratis
- functie
- verder
- toekomst
- voortbrengen
- het genereren van
- generatie
- GitHub
- gaan
- goed
- hulp
- helpt
- hoogwaardige
- Markeer
- Gemarkeerd
- zeer
- Hosting
- Hoe
- How To
- HTTPS
- reusachtig
- menselijk
- Mensen
- Honderden
- identificeren
- het identificeren van
- Identiteit
- beeld
- uitvoeren
- geïmplementeerd
- onmogelijk
- verbeteren
- Inc
- omvatten
- omvat
- Inclusief
- in toenemende mate
- -industrie
- informatie
- Infrastructuur
- invoer
- integratie
- Intelligent
- belang
- Interface
- Internationale
- intuïtief
- IT
- zelf
- JavaScript
- Jobomschrijving:
- Vacatures
- sleutel
- kennis
- bekend
- laboratorium
- etikettering
- labels
- taal
- Groot
- groter
- lancering
- geleerd
- leren
- Verlof
- hefbomen
- Erkend
- Waarschijnlijk
- Lijn
- Vloeistof
- Lijst
- laden
- het laden
- lokaal
- plaatselijk
- plaats
- machine
- machine learning
- MERKEN
- maken
- beheerd
- manager
- kaart
- in kaart brengen
- Maps
- Marketing
- maskeren
- matching
- betekenis
- middel
- Geheugen
- gemengd
- ML
- model
- modellen
- monitor
- meer
- meest
- meervoudig
- Naturel
- notitieboekje
- aantal
- verkregen
- bieden
- Aanbod
- online.
- open
- opening
- besturen
- werkzaam
- operatie
- Optimaliseer
- optimaliseren
- Keuze
- Opties
- bestellen
- organisatie
- Overige
- anders-
- het te bezitten.
- deel
- bijzonder
- vooral
- Betaal
- uitvoerend
- Personalisatie
- platforms
- punt
- punten
- Portaal
- positie
- positief
- krachtige
- voorspellen
- Voorspellingen
- prijsstelling
- privaat
- probleem
- problemen
- processen
- verwerking
- Product
- productie
- Producten
- profilering
- zorgen voor
- biedt
- het verstrekken van
- publiek
- Q & A
- kwaliteit
- vraag
- snel
- Rauw
- lezing
- redelijk
- ontvangen
- verminderen
- bewaarplaats
- vertegenwoordiging
- Resources
- REST
- Resultaten
- terugkeer
- inkomsten
- beoordelen
- robotica
- ronde
- lopen
- lopend
- Schaalbaarheid
- Wetenschapper
- wetenschappers
- sdk
- Ontdek
- veiligheid
- segment
- segmentatie
- segmenten
- gekozen
- Diensten
- serveer-
- reeks
- setup
- Bermuda's
- getoond
- gelijk
- Eenvoudig
- Maat
- vaardigheden
- Klein
- So
- Software
- software development
- solide
- oplossing
- Oplossingen
- sommige
- Tussenruimte
- special
- gespecialiseerde
- specifiek
- stack
- standaard
- begin
- Statement
- verklaringen
- mediaopslag
- shop
- Strategie
- gestructureerde
- Student
- geslaagd
- leveren
- ondersteuning
- steunen
- system
- Systems
- taken
- proef
- Door
- niet de tijd of
- tijdrovend
- Titel
- teken
- tokenization
- getokeniseerd
- tokens
- onderwerpen
- fakkel
- Tracking
- Trainingen
- Transformeren
- types
- ui
- begrijpen
- begrip
- us
- .
- gebruik maken van
- bevestiging
- waarde
- variëteit
- vendors
- Verificatie
- Tegen
- verticals
- Video
- Bekijk
- virussen
- visie
- Stem
- wachten
- web
- webservices
- Wat
- en
- WIE
- Wikipedia
- binnen
- zonder
- Mijn werk
- werknemers
- Workforce
- Bedrijven
- wormen
- jaar