BERT -mallin kouluttaminen tyhjästä
Tapaa BERTin italialainen serkku FiliBERTo.
By James Briggs, Datatieteilijä
BERT, mutta Italiassa – tekijän kuva
Monet artikkeleistani ovat keskittyneet BERTiin – malliin, joka tuli ja hallitsi luonnollisen kielenkäsittelyn (NLP) maailmaa ja merkitsi uutta aikakautta kielimalleille.
Niille teistä, jotka eivät ehkä ole aiemmin käyttäneet muuntajamalleja (esim. mikä BERT on), prosessi näyttää hieman tältä:
pip install transformers
- Alusta esikoulutettu muuntajamalli —
from_pretrained
. - Testaa sitä joillakin tiedoilla.
- Voi olla hienosäädä mallia (kouluta sitä lisää).
Nyt tämä on loistava lähestymistapa, mutta jos vain teemme tämän, meiltä puuttuu ymmärrys omien muuntajamalliemme luomisesta.
Ja jos emme voi luoda omia muuntajamallejamme – meidän täytyy luottaa siihen, että on olemassa esikoulutettu malli, joka sopii ongelmaamme, näin ei aina ole:
Muutama kommentti ei-englanninkielisistä BERT-malleista
Joten tässä artikkelissa tutkimme vaiheita, jotka meidän on toteutettava rakentaaksemme oma muuntajamallimme – erityisesti BERT:n jatkokehitetty versio, nimeltään RoBERTa.
Yleiskatsaus
Prosessissa on muutama vaihe, joten ennen kuin sukeltaamme, teemme ensin yhteenvedon siitä, mitä meidän on tehtävä. Yhteensä siinä on neljä keskeistä osaa:
- Tietojen saaminen
- Tokenisaattorin rakentaminen
- Syöttöputken luominen
- Kouluta malli
Kun olemme käsitelleet jokaisen näistä osista, otamme rakentamamme tokenisaattorin ja mallin - ja tallennamme ne molemmat, jotta voimme sitten käyttää niitä samalla tavalla kuin tavallisesti from_pretrained
.
Tietojen saaminen
Kuten kaikissa koneoppimisprojekteissa, tarvitsemme dataa. Mitä tulee dataan muuntajamallin koulutukseen, meillä on todella paljon valinnanvaraa – voimme käyttää melkein mitä tahansa tekstidataa.
Videoopastus OSCAR-tietojoukon lataamiseen HuggingFacen tietojoukkokirjaston avulla
Ja jos meillä on yksi asia, jota meillä on paljon Internetissä, se on jäsentämätöntä tekstidataa.
Yksi suurimmista tietojoukoista Internetistä kaavitun tekstin alueella on OSCAR-tietojoukko.
OSCAR-tietojoukossa on valtava määrä eri kieliä – ja yksi selkeimmistä käyttötapauksista koulutukseen tyhjästä on se, että voimme soveltaa BERT:tä joihinkin harvemmin käytettyihin kieliin, kuten telugu tai navajo.
Valitettavasti ainoa kieli, jota voin puhua jollain tasolla, on englanti - mutta tyttöystäväni on italialainen, joten hän - Laura - arvioi italiaa puhuvan BERT-mallimme - FiliBERTo -tuloksia.
Joten OSCAR-tietojoukon italian segmentin lataamiseen käytämme HuggingFacea datasets
kirjasto - jonka avulla voimme asentaa pip install datasets
. Sitten lataamme OSCAR_IT:n kanssa:
Katsotaanpa tätä dataset
esine.
Hienoa, tallennetaan nyt tietomme sellaiseen muotoon, jota voimme käyttää tokenisaattoriamme rakentaessamme. Meidän on luotava joukko selkotekstitiedostoja, jotka sisältävät vain text
ominaisuus tietojoukostamme, ja jaamme jokaisen näyte rivinvaihtoa käyttämällä n
.
Yli meidän data/text/oscar_it
hakemistosta löydämme:
Hakemisto, joka sisältää selkeän tekstin OSCAR-tiedostomme
Tokenisaattorin rakentaminen
Seuraavaksi vuorossa tokenizer! Käytettäessä muuntajia lataamme tyypillisesti tokenisaattoria vastaavan muuntajamallin rinnalle - tokenisaattori on prosessin avainkomponentti.
Video-opastus mukautetun tokenisaattorimme rakentamiseen
Kun rakennamme tokenisaattoriamme, syötämme sille kaikki OSCAR-tietomme, määritämme sanavarastomme koon (merkkien lukumäärä tokenisaattorissa) ja mahdolliset erityiset tunnukset.
Nyt RoBERTa-erikoisrahakkeet näyttävät tältä:
Joten varmistamme, että sisällytämme ne tähän special_tokens
tokenisaattorimme parametri train
menetelmäkutsu.
Tokenisaattorimme on nyt valmis, ja voimme tallentaa sen tiedoston myöhempää käyttöä varten:
Nyt meillä on kaksi tiedostoa, jotka määrittelevät uuden FiliBERTo tokenizer:
- merges.txt — Suorittaa tekstin alustavan yhdistämisen tunnuksiin
- vocab.json — yhdistää tunnukset token ID -tunnuksiin
Ja niiden avulla voimme siirtyä tokenisaattorimme alustamiseen, jotta voimme käyttää sitä samalla tavalla kuin mitä tahansa muuta. from_pretrained
tokenisaattori.
Tokenizerin alustaminen
Alustamme ensin tokenisaattorin käyttämällä kahta aiemmin luomaamme tiedostoa - käyttämällä yksinkertaista from_pretrained
:
Nyt tokenisaattorimme on valmis, voimme yrittää koodata tekstiä sillä. Koodauksessa käytämme samoja kahta menetelmää kuin tavallisesti, encode
ja encode_batch
.
Encodings-objektista tokens
aiomme purkaa input_ids
ja attention_mask
tensorit käytettäväksi FiliBERTon kanssa.
Syöttöputken luominen
Koulutusprosessimme syöttöputki on koko prosessin monimutkaisempi osa. Se koostuu siitä, että otamme raaka OSCAR-harjoitustietomme, muunnamme ne ja lataamme ne a DataLoader
valmiina koulutukseen.
Video esittely MLM-syöttöputkesta
Tietojen valmistelu
Aloitamme yhdestä näytteestä ja käymme läpi valmistelulogiikan.
Ensin meidän on avattava tiedostomme - samat tiedostot, jotka tallensimme . Txt tiedostot aikaisemmin. Jaamme jokaisen rivinvaihdon merkkien perusteella n
koska tämä osoittaa yksittäiset näytteet.
Sitten koodaamme tietomme käyttämällä tokenizer
- varmista, että sisällytät tärkeimmät parametrit, kuten max_length
, padding
ja truncation
.
Ja nyt voimme siirtyä tensoriemme luomiseen – koulutamme malliamme maskatun kielen mallinnuksen (MLM) avulla. Joten tarvitsemme kolme tensoria:
- input_ids - meidän token_ids noin 15 % tokeneista on maskattu maskitunnuksella
<mask>
. - huomion_naamio - tensori 1s ja 0s, merkitsee "oikeiden" merkkien/täytemerkkien sijainnin - käytetään huomiolaskelmissa.
- tarrat - meidän token_ids with Nro naamiointi.
Jos et ole perehtynyt MLM:ään, olen selittänyt sen tätä.
Meidän attention_mask
ja labels
tensorit yksinkertaisesti poimitaan meidän batch
. input_ids
tensorit vaativat enemmän huomiota, mutta tälle tensorille peitämme ~15% tokeneista - määritämme niille tunnuksen 3
.
Lopullisessa lähdössä voimme nähdä osan koodatusta input_ids
tensori. Aivan ensimmäinen token ID on 1
- [CLS]
merkki. Tensorin ympärillä pisteytettynä meillä on useita 3
token-tunnukset – nämä ovat äskettäin lisätyt [MASK]
kuponkia.
DataLoaderin rakentaminen
Seuraavaksi määrittelemme omamme Dataset
luokka - jota käytämme kolmen koodatun tensorimme alustamiseen PyTorchiksi torch.utils.data.Dataset
esineitä.
Lopuksi meidän dataset
ladataan PyTorchiin DataLoader
objekti - jota käytämme tietojen lataamiseen malliimme harjoituksen aikana.
Mallin kouluttaminen
Tarvitsemme koulutukseen kaksi asiaa, meidän DataLoader
ja malli. The DataLoader
meillä on - mutta ei mallia.
Mallin alustus
Koulutusta varten tarvitsemme raaka (ei esikoulutettu) BERTLMHeadModel
. Sen luomiseksi meidän on ensin luotava RoBERTa-konfiguraatioobjekti kuvaamaan parametrit, joilla haluamme alustaa FiliBERTo.
Sitten tuomme ja alustamme RoBERTa-mallimme kielimallinnuspäällä (LM).
Harjoituksen valmistelu
Ennen kuin siirrymme harjoituslenkkiimme, meidän on määritettävä muutamia asioita. Ensin määritimme GPU/CPU:n käytön. Sitten aktivoimme mallimme harjoitustilan - ja lopuksi alustamme optimoijamme.
koulutus
Lopuksi - treeniaika! Harjoittelemme aivan kuten tavallisesti PyTorchin kautta treenattaessa.
Jos siirrymme Tensorboardiin, huomaamme tappiomme ajan myötä – se näyttää lupaavalta.
Tappio / aika — useita harjoituksia on yhdistetty tähän kaavioon
Todellinen testi
Nyt on oikean testin aika. Luomme MLM-putken – ja pyydämme Lauraa arvioimaan tulokset. Voit katsoa videoarvostelun klo 22:44 täältä:
Alustamme ensin a pipeline
objektia käyttämällä 'fill-mask'
Perustelu. Aloita sitten mallimme testaus seuraavasti:
"ciao Tulla vai?" on oikea vastaus! Se on yhtä edistynyt kuin italiani on - joten luovutetaan se Lauralle.
Aloitamme "Bongiorno, tule va?" - tai "hyvää päivää mitä kuuluu?":
Ensimmäinen vastaus: "buongiorno, chi va?" tarkoittaa "hyvää päivää, kuka siellä on?" - esim. järjetöntä. Mutta toinen vastauksemme on oikea!
Seuraavaksi hieman vaikeampi lause, "ciao, dove ci incontriamo oggi pomerggio?" - tai "Hei, missä tapaamme tänä iltapäivänä?":
Ja palaamme lisää positiivisiin tuloksiin:
✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"
Lopuksi vielä yksi kovempi lause, "cosa sarebbe successo se avessimo scelto un altro giorno?" — tai "mitä olisi tapahtunut, jos olisimme valinneet toisen päivän?":
Palaamme tänne myös muutaman hyvän vastauksen:
✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"
Kaiken kaikkiaan näyttää siltä, että mallimme läpäisi Lauran testit – ja meillä on nyt pätevä italialainen malli nimeltä FiliBERTo!
Siinä kaikki tähän BERT-mallin koulutuksen alusta loppuun!
Olemme käsitelleet paljon tietojemme hankkimisesta ja muotoilusta – aina kielimallinnuksen käyttämiseen raaka BERT-mallimme kouluttamiseen.
Toivottavasti pidit tästä artikkelista! Jos sinulla on kysyttävää, kerro minulle kautta Twitter tai alla olevissa kommenteissa. Jos haluat lisää tällaista sisältöä, julkaisen sen YouTube liikaa.
Kiitos käsittelyssä!
70% alennus! Luonnollisen kielen käsittely: NLP muuntajilla Pythonissa
Muuntajamallit ovat nykyaikaisen NLP:n de facto standardi. He ovat osoittaneet olevansa ilmeisimpiä…
*Kaikki kuvat ovat tekijän omia, ellei toisin mainita
Bio: James Briggs on luonnontieteiden kielenkäsittelyyn erikoistunut ja finanssialalla työskentelevä datatieteilijä, jonka kotipaikka on Lontoo, Iso-Britannia. Hän on myös freelance-mentori, kirjailija ja sisällöntuottaja. Voit tavoittaa kirjoittajan sähköpostitse (jamescalam94@gmail.com).
Alkuperäinen. Postitettu luvalla.
Related:
Suosituimmat tarinat viimeisen 30 päivän aikana | |||||
---|---|---|---|---|---|
|
|
Lähde: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- Kaikki
- Analytics
- noin
- artikkeli
- artikkelit
- auto
- rakentaa
- Rakentaminen
- soittaa
- kommentit
- komponentti
- pitoisuus
- Luominen
- luoja
- tiedot
- tietojenkäsittely
- tietojen tutkija
- päivä
- syvä oppiminen
- Johtaja
- insinööri
- Engineers
- Englanti
- Ominaisuus
- Vihdoin
- rahoittaa
- Etunimi
- muoto
- freelance
- koko
- hyvä
- GPU
- suuri
- pää
- tätä
- Miten
- Miten
- HTTPS
- valtava
- kuva
- Internet
- IT
- Italia
- avain
- Kieli
- kielet
- OPPIA
- oppiminen
- Kirjasto
- kuormitus
- Lontoo
- koneoppiminen
- Tekeminen
- Kartat
- naamio
- ML
- malli
- mallintaminen
- liikkua
- Luonnollinen kieli
- Luonnollinen kielen käsittely
- NLP
- verkossa
- avata
- avoimen lähdekoodin
- Muut
- plaintext
- soitin
- paljon
- projekti
- pytorch
- raaka
- tulokset
- arviot
- tiede
- tutkijat
- setti
- Koko
- So
- jakaa
- Alkaa
- verkkokaupasta
- tarinat
- testi
- Testaus
- testit
- aika
- symbolinen
- tokens
- ylin
- koulutus
- muuttamassa
- Uk
- UN
- us
- Käytä koteloita
- Video
- Katso
- KUKA
- ikkunat
- sisällä
- Referenssit
- maailman-
- kirjailija
- X
- youtube