Identificarea textului parafrazat are valoare comercială în multe cazuri de utilizare. De exemplu, prin identificarea parafrazelor de propoziție, un sistem de rezumare a textului ar putea elimina informațiile redundante. O altă aplicație este identificarea documentelor plagiate. În această postare, perfecționăm a Fata îmbrățișată transformatorul pornit Amazon SageMaker pentru a identifica perechile de propoziții parafrazate în câțiva pași.
Un model cu adevărat robust poate identifica textul parafrazat atunci când limba utilizată poate fi complet diferită și, de asemenea, poate identifica diferențele atunci când limba utilizată are o suprapunere lexicală mare. În această postare, ne concentrăm pe ultimul aspect. Mai exact, ne uităm la dacă putem antrena un model care poate identifica diferența dintre două propoziții care au o suprapunere lexicală mare și semnificații foarte diferite sau opuse. De exemplu, următoarele propoziții au exact aceleași cuvinte, dar semnificații opuse:
- Am luat un zbor de la New York la Paris
- Am luat un zbor de la Paris la New York
Prezentare generală a soluțiilor
Vă ghidăm prin următorii pași de nivel înalt:
- Configurați mediul.
- Pregătiți datele.
- Tokenizați setul de date.
- Reglați fin modelul.
- Implementați modelul și efectuați inferența.
- Evaluați performanța modelului.
Dacă doriți să săriți peste configurarea mediului, puteți utiliza următorul notebook GitHub și rulați codul în SageMaker.
Hugging Face și AWS au anunțat un parteneriat la începutul anului 2022, care face și mai ușor antrenarea modelelor Hugging Face pe SageMaker. Această funcționalitate este disponibilă prin dezvoltarea Hugging Face Containere AWS Deep Learning (DLC-uri). Aceste containere includ Hugging Face Transformers, Tokenizers și biblioteca Datasets, care ne permite să folosim aceste resurse pentru instruire și joburi de inferență. Pentru o listă a imaginilor DLC disponibile, consultați Imagini disponibile ale containerelor Deep Learning. Acestea sunt întreținute și actualizate în mod regulat cu corecții de securitate. Puteți găsi multe exemple despre cum să antrenați modelele Hugging Face cu aceste DLC-uri și Hugging Face Python SDK în cele ce urmează GitHub repo.
Setul de date PAWS
Dându-și seama de lipsa unor seturi de date eficiente de perechi de propoziții care prezintă o suprapunere lexicală mare fără a fi parafraze, originalul PAWS setul de date lansat în 2019 și-a propus să ofere comunității de procesare a limbajului natural (NLP) o nouă resursă pentru instruirea și evaluarea modelelor de detectare a parafrazelor. Perechile de propoziții PAWS sunt generate în doi pași folosind Wikipedia si Perechi de întrebări Quora (QQP) set de date. Un model de limbaj schimbă mai întâi cuvintele dintr-o pereche de propoziții cu același Bag of Words (BOW) pentru a genera o pereche de propoziții. Un pas de traducere înapoi generează apoi parafraze cu suprapunere BOW mare, dar folosind o ordine diferită a cuvintelor. Setul de date final PAWS conține un total de 108,000 de perechi etichetate cu om și 656,000 de perechi etichetate cu zgomot.
În această postare, folosim PAWS-Wiki etichetat (final) setul de date de la Hugging Face. Hugging Face a efectuat deja împărțirea datelor pentru noi, ceea ce are ca rezultat 49,000 de perechi de propoziții în setul de date de antrenament și 8,000 de perechi de propoziții fiecare pentru seturile de date de validare și de testare. Două exemple de perechi de propoziții din setul de date de antrenament sunt prezentate în exemplul următor. O etichetă de 1 indică faptul că cele două propoziții sunt parafrazări una pentru cealaltă.
Teza 1 | Teza 2 | Etichetă |
Deși sunt interschimbabile, piesele de caroserie de pe cele 2 mașini nu sunt similare. | Deși similare, părțile caroseriei nu sunt interschimbabile la cele 2 mașini. | 0 |
Katz s-a născut în Suedia în 1947 și s-a mutat în New York City la vârsta de 1 an. | Katz s-a născut în 1947 în Suedia și s-a mutat la New York la vârsta de un an. | 1 |
Cerințe preliminare
Trebuie să îndepliniți următoarele cerințe preliminare:
- Înscrieți-vă pentru un cont AWS dacă nu aveți unul. Pentru mai multe informații, vezi Configurați cerințele preliminare Amazon SageMaker.
- Începeți să utilizați Instanțele de notebook SageMaker.
- Configurați dreapta Gestionarea identității și accesului AWS permisiuni (IAM). Pentru mai multe informații, vezi Roluri SageMaker.
Configurați mediul înconjurător
Înainte de a începe să examinăm și să pregătim datele noastre pentru reglarea fină a modelului, trebuie să ne configuram mediul. Să începem prin a învârti o instanță de notebook SageMaker. Alegeți o regiune AWS în contul dvs. AWS și urmați instrucțiunile pentru creați o instanță de blocnotes SageMaker. Instanța de notebook poate dura câteva minute pentru a porni.
Când instanța de notebook rulează, alegeți conda_pytorch_p38
ca tipul dvs. de nucleu. Pentru a folosi setul de date Hugging Face, mai întâi trebuie să instalăm și să importam biblioteca Hugging Face:
Apoi, să stabilim o sesiune SageMaker. Folosim implicit Serviciul Amazon de stocare simplă Bucket (Amazon S3) asociat cu sesiunea SageMaker pentru a stoca setul de date PAWS și artefactele modelului:
Pregătiți datele
Putem încărca versiunea Hugging Face a setului de date PAWS cu ea load_dataset()
comanda. Acest apel descarcă și importă scriptul de procesare PAWS Python din depozitul Hugging Face GitHub, care apoi descarcă setul de date PAWS de la adresa URL originală stocată în script și memorează datele ca tabel Arrow pe unitate. Vezi următorul cod:
Înainte de a începe reglarea fină a modelului nostru BERT pre-antrenat, să ne uităm la distribuția clasei țintă. Pentru cazul nostru de utilizare, setul de date PAWS are etichete binare (0 indică că perechea de propoziții nu este o parafrază, iar 1 indică că este). Să creăm o diagramă de coloană pentru a vedea distribuția clasei, așa cum se arată în codul următor. Vedem că există o ușoară problemă de dezechilibru de clasă în setul nostru de antrenament (56% eșantioane negative față de 44% eșantioane pozitive). Cu toate acestea, dezechilibrul este suficient de mic pentru a evita utilizarea tehnicilor de atenuare a dezechilibrului de clasă.
Tokenizați setul de date
Înainte de a începe reglarea fină, trebuie să ne tokenizăm setul de date. Ca punct de plecare, să presupunem că vrem să ajustăm și să evaluăm roberta-base
transformator. Noi am selectat roberta-base
deoarece este un transformator de uz general care a fost pre-antrenat pe un corp mare de date în limba engleză și a arătat frecvent performanțe ridicate la o varietate de sarcini NLP. Modelul a fost introdus inițial în lucrare ROBERTa: O abordare de preformare BERT optimizată robust.
Efectuăm tokenizare pe propozițiile cu a roberta-base
tokenizer de la Hugging Face, care utilizează codificarea perechilor de octeți la nivel de octeți pentru a împărți documentul în simboluri. Pentru mai multe detalii despre tokenizatorul RoBERTa, consultați RobertaTokenizer. Deoarece intrările noastre sunt perechi de propoziții, trebuie să tokenizăm ambele propoziții simultan. Deoarece majoritatea modelelor BERT necesită ca intrarea să aibă o lungime fixă de intrare tokenizată, setăm următorii parametri: max_len=128
și truncation=True
. Consultați următorul cod:
Ultimul pas de preprocesare pentru reglarea fină a modelului nostru BERT este să convertim trenul tokenizat și seturile de date de validare în tensori PyTorch și să le încărcăm în compartimentul nostru S3:
Reglați fin modelul
Acum că am terminat cu pregătirea datelor, suntem gata să ne perfecționăm pregătirea prealabilă roberta-base
model asupra sarcinii de identificare a parafrazelor. Putem folosi clasa SageMaker Hugging Face Estimator pentru a iniția procesul de reglare fină în doi pași. Primul pas este să specificați hiperparametrii de antrenament și definițiile metricii. Variabila definiții de metrică îi spune Hugging Face Estimator ce tipuri de valori trebuie extrase din jurnalele de antrenament ale modelului. Aici, ne interesează în primul rând extragerea valorilor setului de validare la fiecare epocă de antrenament.
Al doilea pas este să instanțiați Hugging Face Estimator și să începeți procesul de reglare fină cu .fit()
metodă:
Procesul de reglare fină durează aproximativ 30 de minute folosind hiperparametrii specificați.
Implementați modelul și efectuați inferența
SageMaker oferă mai multe opțiuni de implementare, în funcție de cazul dvs. de utilizare. Pentru punctele finale persistente, în timp real, care fac câte o predicție la un moment dat, vă recomandăm să utilizați Servicii de găzduire în timp real SageMaker. Dacă aveți sarcini de lucru care au perioade de inactivitate între accesele de trafic și pot tolera pornirile la rece, vă recomandăm să utilizați Inferență fără server. Punctele finale fără server lansează automat resurse de calcul și le scala în funcție de trafic, eliminând nevoia de a alege tipuri de instanțe sau de a gestiona politicile de scalare. Demonstrăm cum să implementăm modelul nostru optimizat Hugging Face atât la un punct final de inferență în timp real, cât și la un punct final de inferență fără server.
Implementați la un punct final de inferență în timp real
Puteți implementa un obiect de antrenament pe găzduirea de inferență în timp real în SageMaker folosind .deploy()
metodă. Pentru o listă completă a parametrilor acceptați, consultați Model de față îmbrățișată. Pentru a începe, să implementăm modelul într-o singură instanță, pasând următorii parametri: initial_instance_count
, instance_type
, și endpoint_name
. Consultați următorul cod:
Implementarea modelului durează câteva minute. După ce modelul este implementat, putem trimite probe de înregistrări din setul de date de testare nevăzut la punctul final pentru inferență.
Implementați la un punct final de inferență fără server
Pentru a implementa obiectul nostru de antrenament pe un punct final fără server, trebuie să specificăm mai întâi un fișier de configurare fără server cu memory_size_in_mb
și max_concurrency
argumente:
memory_size_in_mb
definește dimensiunea totală a memoriei RAM a punctului final fără server; dimensiunea RAM minimă este de 1024 MB (1 GB) și poate scala până la 6144 MB (6 GB). În general, ar trebui să urmăriți să alegeți o dimensiune de memorie care este cel puțin la fel de mare ca dimensiunea modelului dvs. max_concurrency
definește cota pentru câte invocări simultane pot fi procesate în același timp (până la 50 de invocări simultane) pentru un singur punct final.
De asemenea, trebuie să furnizăm URI-ul imaginii de inferență Hugging Face, pe care îl puteți prelua folosind următorul cod:
Acum că avem fișierul de configurare fără server, putem crea un punct final fără server în același mod ca punctul final de inferență în timp real, folosind .deploy()
metodă:
Punctul final ar trebui creat în câteva minute.
Efectuați inferența modelului
Pentru a face predicții, trebuie să creăm perechea de propoziții adăugând [CLS]
și [SEP]
jetoane speciale și, ulterior, trimiteți intrarea către punctele finale ale modelului. Sintaxa pentru inferența în timp real și inferența fără server este aceeași:
În următoarele exemple, putem vedea că modelul este capabil să clasifice corect dacă perechea de propoziții de intrare conține propoziții parafrazate.
Următorul este un exemplu de inferență în timp real.
Următorul este un exemplu de inferență fără server.
Evaluați performanța modelului
Pentru a evalua modelul, să extindem codul precedent și să trimitem toate cele 8,000 de înregistrări de testare nevăzute la punctul final în timp real:
Apoi, putem crea un raport de clasificare folosind predicțiile extrase:
Obținem următoarele scoruri la teste.
Putem observa că roberta-base
are un scor F1 macro-mediu combinat de 92% și are performanțe puțin mai bune la detectarea propozițiilor care sunt parafraze. The roberta-base
modelul funcționează bine, dar este o practică bună să calculați performanța modelului folosind cel puțin un alt model.
Următorul tabel compară roberta-base
rezultate de performanță pe același set de test față de un alt transformator reglat fin numit paraphrase-mpnet-base-v2
, un transformator de propoziție pre-antrenat special pentru sarcina de identificare a parafrazelor. Ambele modele au fost antrenate pe o instanță ml.p3.8xlarge.
Rezultatele arată că roberta-base
are un scor F1 cu 1% mai mare, cu timpi de antrenament și inferență foarte similari folosind găzduirea de inferență în timp real pe SageMaker. Diferența de performanță dintre modele este relativ mică, totuși, roberta-base
este în cele din urmă câștigătorul, deoarece are valori de performanță puțin mai bune și timpi de antrenament și inferență aproape identici.
Precizie | Rechemare | F1-scor | Timp de antrenament (facturabil) | Timp de inferență (set complet de testare) | |
roberta-baza | 0.92 | 0.93 | 0.92 | 18 minute | 2 minute |
parafraza-mpnet- baza-v2 |
0.92 | 0.91 | 0.91 | 17 minute | 2 minute |
A curăța
Când ați terminat de utilizat punctele finale ale modelului, le puteți șterge pentru a evita costurile viitoare:
Concluzie
În această postare, am discutat despre cum să construim rapid un model de identificare a parafrazelor folosind transformatoarele Hugging Face pe SageMaker. Am reglat fin două transformatoare pre-antrenate, roberta-base
și paraphrase-mpnet-base-v2
, folosind setul de date PAWS (care conține perechi de propoziții cu suprapunere lexicală mare). Am demonstrat și discutat despre beneficiile implementării inferenței în timp real față de implementarea inferenței fără server, aceasta din urmă fiind o nouă caracteristică care vizează sarcinile de lucru înțepenite și elimină nevoia de a gestiona politicile de scalare. Pe un set de teste nevăzut cu 8,000 de înregistrări, am demonstrat că ambele modele au obținut un scor F1 mai mare de 90%.
Pentru a extinde această soluție, luați în considerare următoarele:
- Încercați să faceți reglajul fin cu propriul set de date personalizat. Dacă nu aveți suficiente etichete de antrenament, puteți evalua performanța unui model ajustat, precum cel demonstrat în această postare, pe un set de date de testare personalizat.
- Integrați acest model ajustat într-o aplicație din aval care necesită informații despre dacă două propoziții (sau blocuri de text) sunt parafrazări una pentru cealaltă.
Clădire fericită!
Despre Autori
Bala Krishnamoorthy este Data Scientist cu AWS Professional Services, unde îi place să aplice machine learning pentru a rezolva problemele de afaceri ale clienților. El este specializat în cazuri de utilizare a procesării limbajului natural și a lucrat cu clienți din industrii precum software, finanțe și asistență medicală. În timpul liber, îi place să încerce mâncare nouă, să vizioneze comedii și documentare, să se antreneze la Orange Theory și să fie pe apă (paddle-boarding, snorkeling și, sperăm, scufundări în curând).
Ivan Cui este Data Scientist cu AWS Professional Services, unde îi ajută pe clienți să construiască și să implementeze soluții folosind învățarea automată pe AWS. El a lucrat cu clienți din diverse industrii, inclusiv software, finanțe, farmaceutice și asistență medicală. În timpul liber, îi place să citească, să petreacă timp cu familia și să își maximizeze portofoliul de acțiuni.
- Coinsmart. Cel mai bun schimb de Bitcoin și Crypto din Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. ACCES LIBER.
- CryptoHawk. Radar Altcoin. Încercare gratuită.
- Sursa: https://aws.amazon.com/blogs/machine-learning/identify-paraphrased-text-with-hugging-face-on-amazon-sagemaker/
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Despre Noi
- acces
- Cont
- realizat
- peste
- TOATE
- deja
- Amazon
- a anunțat
- O alta
- aplicație
- Aplicarea
- aproximativ
- argumente
- disponibil
- AWS
- fiind
- Beneficiile
- corp
- frontieră
- construi
- afaceri
- apel
- capabil
- masini
- cazuri
- taxe
- Alege
- Oraș
- clasă
- clasificare
- cod
- Coloană
- combinate
- comunitate
- complet
- Calcula
- încredere
- Containere
- conține
- ar putea
- crea
- a creat
- personalizat
- client
- clienţii care
- de date
- om de știință de date
- demonstra
- demonstrat
- În funcție
- implementa
- dislocate
- desfășurarea
- detalii
- Detectare
- Dezvoltare
- diferit
- distribuire
- documentare
- documente
- download-uri
- conduce
- eficient
- Punct final
- Engleză
- Mediu inconjurator
- stabili
- evalua
- exemplu
- expune
- Extinde
- Față
- familie
- Caracteristică
- finanţa
- First
- zbor
- Concentra
- urma
- următor
- alimente
- Gratuit
- Complet
- funcţie
- funcționalitate
- viitor
- scop general
- în general
- genera
- GitHub
- bine
- mai mare
- de asistență medicală
- înălțime
- ajută
- aici
- Înalt
- superior
- găzduire
- Cum
- Cum Pentru a
- HTTPS
- Identificare
- identifica
- identificarea
- Identitate
- imagine
- include
- Inclusiv
- industrii
- informații
- intrare
- instala
- interesat
- problema
- IT
- Locuri de munca
- etichete
- limbă
- mare
- lansa
- învăţare
- Bibliotecă
- Listă
- încărca
- maşină
- masina de învățare
- FACE
- administra
- Memorie
- Metrici
- ML
- model
- Modele
- mai mult
- cele mai multe
- multiplu
- Natural
- negativ
- New York
- New York City
- caiet
- promoții
- optimizate
- Opţiuni
- comandă
- Altele
- propriu
- Hârtie
- Paris
- Asociere
- Care trece
- Patch-uri
- performanță
- perioadele
- Farmaceutic
- Punct
- Politicile
- portofoliu
- pozitiv
- practică
- prezicere
- Predictii
- probleme
- proces
- prelucrare
- profesional
- furniza
- întrebare
- Quora
- RAM
- rand
- Citind
- în timp real
- recomanda
- înregistrări
- eliberat
- raportează
- depozit
- necesita
- resursă
- Resurse
- REZULTATE
- reveni
- Alerga
- funcţionare
- Scară
- scalare
- Om de stiinta
- securitate
- selectate
- serverless
- Servicii
- set
- instalare
- asemănător
- simplu
- Mărimea
- mic
- Software
- solid
- soluţie
- soluţii
- REZOLVAREA
- special
- specializată
- specific
- Cheltuire
- Rotire
- împărţi
- Începe
- început
- începe
- stoc
- depozitare
- stoca
- Ulterior
- livra
- Suedia
- sistem
- Ţintă
- sarcini
- tehnici de
- spune
- test
- Prin
- timp
- tokenizarea
- cuvinte pot
- indicativele
- top
- lanternă
- trafic
- Pregătire
- Traducere
- us
- utilizare
- validare
- valoare
- varietate
- Vizualizare
- Apă
- Ce
- dacă
- Wikipedia
- în
- fără
- cuvinte
- a lucrat
- de lucru
- lucrează