Hogyan képezzünk ki egy BERT-modellt a semmiből
Ismerje meg BERT olasz unokatestvérét, FiliBERTo-t.
By James Briggs, Data Scientist
BERT, de Olaszországban – a szerző képe
Sok cikkem a BERT-re összpontosított – arra a modellre, amely megjelent és uralta a természetes nyelvi feldolgozás (NLP) világát, és a nyelvi modellek új korszakát jelentette.
Azok számára, akik korábban nem használtak transzformátor modelleket (pl. mi az a BERT), a folyamat a következőképpen néz ki:
pip install transformers
- Inicializáljon egy előre betanított transzformátor modellt —
from_pretrained
. - Teszteld néhány adaton.
- Talán finomhangolja a modellt (tanítsa tovább).
Nos, ez egy nagyszerű megközelítés, de ha csak ezt tesszük, akkor hiányzik a megértés a saját transzformátormodelleink létrehozása mögött.
És ha nem tudjuk létrehozni saját transzformátormodelleinket – támaszkodnunk kell arra, hogy van egy előre kiképzett modell, amely megfelel a problémánknak, ez nem mindig van így:
Néhány megjegyzés a nem angol nyelvű BERT modellekről
Tehát ebben a cikkben megvizsgáljuk azokat a lépéseket, amelyeket meg kell tennünk saját transzformátormodellünk elkészítéséhez – konkrétan a BERT továbbfejlesztett változata, a RoBERTa.
Áttekintés
A folyamatnak van néhány lépése, ezért mielőtt belemerülnénk, először foglaljuk össze, mit kell tennünk. Összesen négy fő részből áll:
- Az adatok megszerzése
- Tokenizátor építése
- Bemeneti folyamat létrehozása
- A modell betanítása
Miután végigdolgoztuk ezeket a szakaszokat, fogjuk az általunk épített tokenizert és modellt – és mindkettőt elmentjük, hogy aztán ugyanúgy használhassuk őket, mint általában from_pretrained
.
Az adatok megszerzése
Mint minden gépi tanulási projekthez, nekünk is szükségünk van adatokra. Ami a transzformátormodell betanításához szükséges adatokat illeti, valóban el vagyunk kényeztetve – szinte bármilyen szöveges adatot használhatunk.
Videós bemutató az OSCAR-adatkészlet letöltéséhez a HuggingFace adatkészlet-könyvtárával
És ha van valami, amiről bőven van az interneten – az a strukturálatlan szöveges adatok.
Az egyik legnagyobb adatkészlet az internetről lekapart szövegek területén az OSCAR adatkészlet.
Az OSCAR-adatkészlet rengeteg különböző nyelvet tartalmaz – és az egyik legegyértelműbb felhasználási eset a nulláról való képzéshez az, hogy a BERT-et néhány kevésbé használt nyelvre is alkalmazhatjuk, például a telugu vagy a navajo nyelvre.
Sajnos az egyetlen nyelv, amelyen bármilyen szintű kompetenciával tudok beszélni, az angol – de a barátnőm olasz, így ő – Laura – fogja értékelni olaszul beszélő BERT modellünk – FiliBERTo – eredményeit.
Tehát az OSCAR-adatkészlet olasz szegmensének letöltéséhez a HuggingFace-t fogjuk használni datasets
könyvtár — amellyel telepíthetjük pip install datasets
. Ezután letöltjük az OSCAR_IT-t a következővel:
Vessen egy pillantást a dataset
tárgy.
Remek, most tároljuk az adatainkat olyan formátumban, amelyet felhasználhatunk a tokenizátorunk elkészítésekor. Létre kell hoznunk egy egyszerű szöveges fájlkészletet, amely csak a text
funkciót az adatkészletünkből, és mindegyiket felosztjuk minta újsor használatával n
.
A miénkben data/text/oscar_it
könyvtárat találjuk:
Az egyszerű szövegű OSCAR fájljainkat tartalmazó könyvtár
Tokenizátor építése
A következő a tokenizátor! Transzformátorok használatakor jellemzően egy tokenizátort töltünk be a megfelelő transzformátormodell mellett – a tokenizátor kulcsfontosságú eleme a folyamatnak.
Videós bemutató az egyéni tokenizátorunk elkészítéséhez
A tokenizerünk elkészítésekor az összes OSCAR adatunkat betápláljuk, megadjuk a szókincsünk méretét (a tokenek számát a tokenizerben), és az esetleges speciális tokeneket.
Most a RoBERTa speciális tokenek így néznek ki:
Ezért feltétlenül szerepeltetjük őket a special_tokens
tokenizátorunk paramétere train
metódushívás.
A tokenizátorunk készen áll, és elmenthetjük a fájlt későbbi használatra:
Most két fájlunk van, amelyek meghatározzák az új FiliBERTo tokenizátor:
- Merges.txt — elvégzi a szöveg kezdeti leképezését tokenekre
- vocab.json — leképezi a tokeneket tokenazonosítókra
És ezekkel továbbléphetünk a tokenizátorunk inicializálására, hogy úgy használhassuk, mint bármely mást. from_pretrained
tokenizátor.
A Tokenizátor inicializálása
Először inicializáljuk a tokenizátort a korábban felépített két fájl segítségével – egy egyszerű from_pretrained
:
Elkészült a tokenizerünk, megpróbálhatunk vele szöveget kódolni. A kódolás során ugyanazt a két módszert használjuk, mint általában, encode
és a encode_batch
.
A kódolások objektumból tokens
kinyerjük a input_ids
és a attention_mask
tenzorok a FiliBERTo-val való használatra.
A bemeneti csővezeték létrehozása
Képzési folyamatunk bemeneti csatornája a teljes folyamat összetettebb része. Ez abból áll, hogy vesszük a nyers OSCAR edzési adatainkat, átalakítjuk és betöltjük a DataLoader
edzésre készen.
Videó áttekintése az MLM beviteli folyamatról
Az adatok előkészítése
Egyetlen mintával kezdjük, és végigdolgozzuk az előkészítési logikát.
Először is meg kell nyitnunk a fájlunkat - ugyanazokat a fájlokat, amelyeket mentettünk . Txt fájlokat korábban. Mindegyiket újsor karakterek alapján osztjuk fel n
mivel ez jelzi az egyes mintákat.
Ezután az adatainkat kódoljuk a tokenizer
— Ügyeljen arra, hogy tartalmazza a kulcsfontosságú paramétereket, mint pl max_length
, padding
és truncation
.
Most pedig rátérhetünk a tenzorok létrehozására – modellünket maszkolt nyelvű modellezéssel (MLM) fogjuk képezni. Tehát három tenzorra van szükségünk:
- input_ids - a miénk token_ids a tokenek ~15%-a maszkolt a maszk token használatával
<mask>
. - figyelem_maszk — egy tenzor 1s és 0s, a „valódi” tokenek/padding tokenek pozíciójának megjelölése – a figyelemszámításoknál használatos.
- címkék - a miénk token_ids val vel nem maszkolás.
Ha nem ismeri az MLM-et, elmagyaráztam itt.
termékeink attention_mask
és a labels
tenzorok egyszerűen kivonhatók a mi batch
Az input_ids
A tenzorok azonban nagyobb figyelmet igényelnek, ennél a tenzornál a tokenek ~15%-át maszkoljuk – hozzárendelve a token azonosítót 3
.
A végső kimenetben egy kódolt részt láthatunk input_ids
tenzor. A legelső token azonosító az 1
- a [CLS]
jelképes. A tenzor körül pontozottan több is van 3
token azonosítók – ezek az újonnan hozzáadott [MASK]
jelzőt.
A DataLoader felépítése
Ezután meghatározzuk a sajátunkat Dataset
osztály – amelyet a három kódolt tenzorunk PyTorch néven történő inicializálására használunk torch.utils.data.Dataset
tárgyakat.
Végül a miénk dataset
be van töltve egy PyTorch-ba DataLoader
objektum — amelyet arra használunk, hogy az edzés során az adatainkat betöltsük a modellünkbe.
A modell képzése
Két dolog kell az edzéshez, a miénk DataLoader
és egy modell. A DataLoader
van – de nincs modellünk.
A modell inicializálása
Az edzéshez nyers (nem előképzett) BERTLMHeadModel
. Ennek létrehozásához először létre kell hoznunk egy RoBERTa konfigurációs objektumot, amely leírja azokat a paramétereket, amelyekkel inicializálni szeretnénk a FiliBERTo-t.
Ezután importáljuk és inicializáljuk a RoBERTa modellünket egy nyelvi modellező (LM) fejjel.
Képzés előkészítése
Mielőtt rátérnénk az edzési körünkre, be kell állítanunk néhány dolgot. Először is beállítjuk a GPU/CPU használatot. Ezután aktiváljuk modellünk képzési módját – és végül inicializáljuk az optimalizálót.
Képzések
Végre - edzésidő! Ugyanúgy edzünk, mint általában, amikor PyTorch segítségével edzünk.
Ha átmegyünk a Tensorboard felé, idővel rá fogunk jönni a veszteségre – ez ígéretesnek tűnik.
Veszteség/idő – több edzést fűztünk össze ezen a diagramon
Az igazi teszt
Most itt az ideje az igazi tesztnek. Felállítottunk egy MLM-csatornát – és megkérjük Laurát, hogy értékelje az eredményeket. A 22:44-kor készült videókritikát itt tekintheti meg:
Először inicializáljuk a pipeline
objektum segítségével a 'fill-mask'
érv. Ezután kezdje el a modellünk tesztelését a következőképpen:
"Szia hogyan va?” a helyes válasz! Ez olyan fejlett, amennyire az olasz nyelvtudásom fejlődik – szóval, adjuk át Laurának.
Kezdjük – Buongiorno, ugye? - vagy "Jó napot! Hogy vagy?":
Az első válasz: „buongiorno, chi va?” azt jelenti, hogy "jó napot, ki van ott?" — pl. értelmetlen. De a második válaszunk helyes!
Következő egy kicsit keményebb kifejezés, „ciao, dove ci incontriamo oggi pomerggio?” - vagy "Szia, hol fogunk találkozni ma délután?":
És még néhány pozitív eredményt adunk vissza:
✅ "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?"
Végül még egy, keményebb mondat, „cosa sarebbe successo se avessimo scelto un altro giorno?” — vagy „mi lett volna, ha más napot választunk?”:
Ide is visszaadunk még néhány jó választ:
✅ "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?"
Összességében úgy tűnik, hogy modellünk megfelelt Laura tesztjein – és most már van egy hozzáértő olasz nyelvű modellünk, a FiliBERTo!
Ennyi a BERT-modell elölről történő betanításának végigjátszásához!
Az adatok megszerzésétől és formázásától kezdve – egészen a nyelvi modellezésig a nyers BERT-modellünk betanításáig – rengeteget foglalkoztunk.
Remélem tetszett ez a cikk! Ha bármilyen kérdése van, jelezze felém Twitter vagy az alábbi megjegyzésekben. Ha több ilyen tartalmat szeretnél, akkor közzéteszem Youtube túl.
Köszönöm, hogy elolvasta!
70% kedvezmény! Természetes nyelvi feldolgozás: NLP transzformátorokkal Pythonban
A transzformátormodellek a modern NLP de facto szabványai. Bebizonyították, hogy a legkifejezőbbek…
*Minden kép a szerző alkotása, kivéve ha másként jelezzük
Bio: James Briggs természetes nyelvi feldolgozásra szakosodott adattudós, aki a pénzügyi szektorban dolgozik Londonban, az Egyesült Királyságban. Emellett szabadúszó mentor, író és tartalomkészítő is. A szerzőt e-mailben érheti el (jamescalam94@gmail.com).
eredeti. Engedéllyel újra közzétéve.
Kapcsolódó:
Legnépszerűbb történetek az elmúlt 30 napból | |||
---|---|---|---|
|
Forrás: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html
- "
- &
- Minden termék
- analitika
- körül
- cikkben
- cikkek
- auto
- épít
- Épület
- hívás
- Hozzászólások
- összetevő
- tartalom
- létrehozása
- Teremtő
- dátum
- adat-tudomány
- adattudós
- nap
- mély tanulás
- Igazgató
- mérnök
- Mérnökök
- Angol
- Funkció
- Végül
- finanszíroz
- vezetéknév
- formátum
- szabadúszó
- Tele
- jó
- GPU
- nagy
- fej
- itt
- Hogyan
- How To
- HTTPS
- hatalmas
- kép
- Internet
- IT
- Olaszország
- Kulcs
- nyelv
- Nyelvek
- TANUL
- tanulás
- könyvtár
- kiszámításának
- London
- gépi tanulás
- Gyártás
- Térképek
- maszk
- ML
- modell
- modellezés
- mozog
- Természetes nyelv
- Természetes nyelvi feldolgozás
- NLP
- online
- nyitva
- nyílt forráskódú
- Más
- Egyszerű szöveg
- játékos
- bőséges
- program
- pytorch
- Nyers
- Eredmények
- Kritika
- Tudomány
- tudósok
- készlet
- Méret
- So
- osztott
- kezdet
- tárolni
- TÖRTÉNETEK
- teszt
- Tesztelés
- tesztek
- idő
- jelképes
- tokenek
- felső
- Képzések
- transzformáló
- Uk
- UN
- us
- felhasználási esetek
- videó
- Nézz
- WHO
- ablakok
- belül
- Munka
- világ
- író
- X
- youtube