Kako usposobiti model BERT iz nič
Spoznajte BERTOVO italijansko sestrično, FiliBERTo.
By James Briggs, Podatkovni znanstvenik
BERT, a v Italiji — slika avtorja
Veliko mojih člankov je bilo osredotočenih na BERT – model, ki je prišel in zavladal svetu obdelave naravnega jezika (NLP) ter zaznamoval novo dobo za jezikovne modele.
Za tiste med vami, ki morda še niste uporabljali modelov transformatorjev (npr. kaj je BERT), je postopek videti približno takole:
pip install transformers
- Inicializirajte vnaprej pripravljen model transformatorjev —
from_pretrained
. - Preizkusite na nekaterih podatkih.
- Mogoče natančno prilagodite model (še malo ga trenirajte).
To je odličen pristop, a če le kdaj to storimo, nam manjka razumevanja za ustvarjanje lastnih modelov transformatorjev.
In če ne moremo ustvariti lastnih modelov transformatorjev — se moramo zanašati na predhodno usposobljen model, ki ustreza našemu problemu, to pa ni vedno tako:
Nekaj komentarjev o neangleških modelih BERT
Zato bomo v tem članku raziskali korake, ki jih moramo sprejeti, da zgradimo lasten model transformatorja - natančneje nadalje razvito različico BERT, imenovano RoBERTa.
Pregled
Postopek je sestavljen iz nekaj korakov, zato preden se poglobimo, najprej povzamemo, kaj moramo storiti. Skupno so štirje ključni deli:
- Pridobivanje podatkov
- Gradnja tokenizerja
- Ustvarjanje vhodnega cevovoda
- Usposabljanje modela
Ko bomo obdelali vsakega od teh razdelkov, bomo vzeli tokenizer in model, ki smo ga zgradili - in ju shranili, da ju bomo lahko nato uporabili na enak način, kot bi ga običajno z from_pretrained
.
Pridobivanje podatkov
Kot pri vsakem projektu strojnega učenja potrebujemo podatke. Kar zadeva podatke za usposabljanje modela transformatorja, smo res razvajeni - uporabimo lahko skoraj vse besedilne podatke.
Video navodila za prenos nabora podatkov OSCAR z uporabo knjižnice naborov podatkov HuggingFace
In če je česa na internetu veliko – so to nestrukturirani besedilni podatki.
Eden največjih naborov podatkov na področju besedila, postrganega iz interneta, je nabor podatkov OSCAR.
Nabor podatkov OSCAR se ponaša z ogromnim številom različnih jezikov — in eden najbolj jasnih primerov uporabe za usposabljanje iz nič je ta, da lahko BERT uporabimo za nekatere manj pogosto uporabljene jezike, kot sta telugu ali navajo.
Na žalost je edini jezik, ki ga lahko govorim s kakršno koli stopnjo kompetence, angleščina — toda moje dekle je Italijanko, zato bo ona — Laura — ocenjevala rezultate našega italijansko govorečega modela BERT — FiliBERTo.
Za prenos italijanskega segmenta nabora podatkov OSCAR bomo torej uporabili HuggingFace datasets
knjižnica — s katero lahko namestimo pip install datasets
. Nato prenesemo OSCAR_IT z:
Oglejmo si dataset
predmet.
Odlično, zdaj pa shranimo naše podatke v obliki, ki jo lahko uporabimo pri izdelavi našega tokenizerja. Ustvariti moramo niz datotek z navadnim besedilom, ki vsebujejo samo text
funkcijo iz našega nabora podatkov in vsakega bomo razdelili Vzorec z uporabo nove vrstice n
.
V našem data/text/oscar_it
imenik bomo našli:
Imenik, ki vsebuje naše datoteke OSCAR z navadnim besedilom
Gradnja tokenizatorja
Naslednji je tokenizer! Pri uporabi transformatorjev običajno naložimo tokenizer poleg ustreznega modela transformatorja - tokenizer je ključna komponenta v procesu.
Video navodila za izdelavo našega tokenizerja po meri
Pri izdelavi našega tokenizerja mu bomo dodali vse naše podatke OSCAR, določili našo velikost besedišča (število žetonov v tokenizerju) in vse posebne žetone.
Zdaj so posebni žetoni RoBERTa videti takole:
Zato poskrbimo, da jih vključimo v special_tokens
parameter našega tokenizerja train
klic metode.
Naš tokenizer je zdaj pripravljen in ga lahko shranimo za kasnejšo uporabo:
Zdaj imamo dve datoteki, ki definirata našo novo FiliBERTo tokenizer:
- merges.txt — izvede začetno preslikavo besedila v žetone
- vocab.json — preslika žetone v ID-je žetonov
In s temi lahko nadaljujemo z inicializacijo našega tokenizerja, da ga bomo lahko uporabljali kot katerega koli drugega from_pretrained
tokenizer.
Inicializacija Tokenizerja
Najprej inicializiramo tokenizer z dvema datotekama, ki smo jih zgradili prej – z uporabo preprostega from_pretrained
:
Zdaj je naš tokenizer pripravljen, lahko poskusimo z njim kodirati nekaj besedila. Pri kodiranju uporabljamo isti dve metodi, ki bi ju običajno uporabljali, encode
in encode_batch
.
Iz predmeta kodiranja tokens
bomo ekstrahirali input_ids
in attention_mask
tenzorji za uporabo s FiliBERTo.
Ustvarjanje vhodnega cevovoda
Vhodni cevovod našega procesa usposabljanja je kompleksnejši del celotnega procesa. Sestoji iz tega, da vzamemo naše neobdelane podatke o usposabljanju OSCAR, jih preoblikujemo in naložimo v a DataLoader
pripravljen na trening.
Video predstavitev vhodnega cevovoda MLM
Priprava podatkov
Začeli bomo z enim vzorcem in nadaljevali z logiko priprave.
Najprej moramo odpreti svojo datoteko - iste datoteke, kot smo jih shranili . TXT datoteke prej. Vsakega razdelimo na podlagi znakov za novo vrstico n
saj to označuje posamezne vzorce.
Nato naše podatke kodiramo z uporabo tokenizer
— zagotavljanje vključitve ključnih parametrov, kot je max_length
, padding
in truncation
.
In zdaj lahko preidemo na ustvarjanje naših tenzorjev - naš model bomo učili z modeliranjem v maskiranem jeziku (MLM). Torej potrebujemo tri tenzorje:
- input_ids — naš token_ids s ~15 % žetonov, prikritih z žetonom maske
<mask>
. - pozornost_maska — tenzor od 1e in 0s, ki označujejo položaj 'pravih' žetonov/žetonov za oblazinjenje — ki se uporabljajo pri izračunih pozornosti.
- nalepke — naš token_ids z št maskiranje.
Če niste seznanjeni z MLM, sem ga razložil tukaj.
naše attention_mask
in labels
tenzorji so preprosto izvlečeni iz našega batch
. input_ids
tenzorji zahtevajo več pozornosti, vendar za ta tenzor maskiramo ~15 % žetonov – dodelimo jim ID žetona 3
.
V končnem rezultatu lahko vidimo del kodiranega input_ids
tenzor. Prvi ID žetona je 1
- [CLS]
žeton. S pikami okoli tenzorja jih je več 3
ID-ji žetonov — to so naši na novo dodani [MASK]
žetone
Gradnja DataLoaderja
Nato definiramo našo Dataset
razred — ki ga uporabljamo za inicializacijo naših treh kodiranih tenzorjev kot PyTorch torch.utils.data.Dataset
predmeti.
Končno naš dataset
se naloži v PyTorch DataLoader
objekt — ki ga uporabljamo za nalaganje naših podatkov v naš model med usposabljanjem.
Izobraževanje modela
Za trening potrebujemo dve stvari DataLoader
in model. The DataLoader
imamo — vendar nobenega modela.
Inicializacija modela
Za trening potrebujemo surovo (ne vnaprej usposobljeno) BERTLMHeadModel
. Da bi to ustvarili, moramo najprej ustvariti konfiguracijski objekt RoBERTa, da opišemo parametre, s katerimi želimo inicializirati FiliBERTo.
Nato uvozimo in inicializiramo naš model RoBERTa z glavo za jezikovno modeliranje (LM).
Priprava na trening
Preden se premaknemo na našo vadbeno zanko, moramo nastaviti nekaj stvari. Najprej smo nastavili uporabo GPE/CPE. Nato aktiviramo način usposabljanja našega modela — in končno inicializiramo naš optimizator.
usposabljanje
Končno — čas za trening! Treniramo tako kot običajno, ko treniramo prek PyTorcha.
Če se obrnemo na Tensorboard, bomo sčasoma ugotovili, da smo izgubili – videti je obetavno.
Izguba/čas – v tej tabeli je bilo združenih več treningov
Pravi test
Zdaj je čas za pravi preizkus. Vzpostavimo cevovod MLM — in prosimo Lauro, da oceni rezultate. Video pregled ob 22:44 si lahko ogledate tukaj:
Najprej inicializiramo a pipeline
predmet, z uporabo 'fill-mask'
prepir. Nato začnite testirati naš model takole:
“čao kako va?" je pravi odgovor! To je tako napredno, kot je moja italijanščina — zato ga predajmo Lauri.
Začnemo s "buongiorno, come va?" - ali "dober dan, kako si?":
Prvi odgovor, "buongiorno, chi va?" pomeni "dober dan, kdo je tam?" — npr. nesmiselno. Toda naš drugi odgovor je pravilen!
Sledi malo težji stavek, "ciao, dove ci incontriamo oggi pomeriggio?" - ali "živjo, kje se dobimo popoldne?":
In vračamo še nekaj pozitivnih rezultatov:
✅ "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?"
Za konec še en, težji stavek, »cosa sarebbe successo se avessimo scelto un altro giorno?« — ali "kaj bi se zgodilo, če bi izbrali drug dan?":
Tudi tukaj vrnemo nekaj bolj dobrih odgovorov:
✅ "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?"
Na splošno je videti, da je naš model opravil Laurine teste — in zdaj imamo kompetenten model za italijanski jezik, imenovan FiliBERTo!
To je to za ta potek usposabljanja modela BERT iz nič!
Pokrili smo veliko področij, od pridobivanja in oblikovanja naših podatkov — vse do uporabe jezikovnega modeliranja za usposabljanje našega surovega modela BERT.
Upam, da ste uživali v tem članku! Če imate kakršna koli vprašanja, mi sporočite prek Twitter ali v komentarjih spodaj. Če želite več takšnih vsebin, jih objavim YouTube preveč.
Hvala za branje!
70 % popust! Obdelava naravnega jezika: NLP s transformatorji v Pythonu
Modeli transformatorjev so de facto standard v sodobnem NLP. Izkazali so se kot najizrazitejši…
*Vse slike so avtorske, razen kjer je navedeno drugače
Bio: James Briggs je podatkovni znanstvenik, specializiran za obdelavo naravnih jezikov in dela v finančnem sektorju s sedežem v Londonu v Veliki Britaniji. Je tudi samostojni mentor, pisatelj in ustvarjalec vsebin. Do avtorja lahko pridete po e-pošti (jamescalam94@gmail.com).
prvotni. Poročeno z dovoljenjem.
Povezano:
Vir: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- vsi
- analitika
- okoli
- članek
- članki
- avto
- izgradnjo
- Building
- klic
- komentarji
- komponenta
- vsebina
- Ustvarjanje
- kreator
- datum
- znanost o podatkih
- podatkovni znanstvenik
- dan
- globoko učenje
- Direktor
- E-naslov
- inženir
- Inženirji
- Angleščina
- Feature
- končno
- financiranje
- prva
- format
- svobodni
- polno
- dobro
- Grafične kartice
- veliko
- Glava
- tukaj
- Kako
- Kako
- HTTPS
- velika
- slika
- Internet
- IT
- Italija
- Ključne
- jezik
- jeziki
- UČITE
- učenje
- Knjižnica
- obremenitev
- London
- strojno učenje
- Izdelava
- Zemljevidi
- Maska
- ML
- Model
- modeliranje
- premikanje
- Naravni jezik
- Obdelava Natural Language
- nlp
- na spletu
- odprite
- open source
- Ostalo
- Golo besedilo
- predvajalnik
- Veliko
- Projekt
- pitorha
- Surovi
- Rezultati
- pregleda
- Znanost
- Znanstveniki
- nastavite
- Velikosti
- So
- po delih
- Začetek
- trgovina
- zgodbe
- Test
- Testiranje
- testi
- čas
- žeton
- Boni
- vrh
- usposabljanje
- preoblikovanje
- Uk
- UN
- us
- primeri uporabe
- Video
- Watch
- WHO
- okna
- v
- delo
- svet
- Pisatelj
- X
- youtube