dmytro_ushatenko/pages/topics/bert/README.md

4.5 KiB

title published author
Jazykový model slovenského jazyka true Daniel Hládek

! Cieľ: ! ! - Natrénovať a vyhodnotiť slovenský jazykový model typu BERT z korpusu webových textov

Súvisiace projekty

Rozpracované úlohy

  • Trénovanie na TPU Google Colab Electra Base. (Olekšák)
  • trénovanie XLNet Base
  • Tokenizer SentencePiece pre XLNet
  • Trénovanie Roberta Base (zatiaľ najlepšie 0.65)

Hotové úlohy

Trénovací korpus

Deduplikované a tokenizované webové dáta pomocou nášho tokenizátora a deduplikátora.

  • Wikipédia
  • Oscar Dedup
  • Sita
  • Websucker 2010,2012,2017
  • Websucker 2022 in progress

Spolu 25 GB po deduplikovaní.

Electra Model

  • Vyhodnotenie Electra na SK SQUAD, UDP POS tagging
  • Trénovacie skripty Electra
  • Konvertovanie Electra do Transformers pomocou ransformers/src/transformers/models/electra/convert_electra_original_tf_checkpoint_to_pytorch.py
  • Natrénovaný model Electra-small 128, 256 batch size, learning 2e-4, skweb2017dedup, Slovník 32K wordpiece, 0.83 POS, 0.51 Squad

Hugging Face Models Finetuning

  • Dotrénovaný model multilingual BERT base na SK QUAD, funguje demo skript. (0.72)
  • Dotrénovany Slovak Bert na SK QUAD (0.75)
  • Dotrénovaný model multilingual BERT na SQUAD anglickej, overné na slovenskej SK QUAD
  • SK Quad Datasets Interface

Hugging Face Roberta

  • Natrénovaný HF Roberta Small
  • Deduplikovaný webový korpus oscar plus skweb2017
  • tokenizer BPE Roberta
  • natrénovaný roberta base na 17GB korpuse, 0.65 na Squad
  • trénovanie pomocou deepspeed (zrýchľuje cca 2x).
  • pri efektívnej veľkosti dávky 1000 je asi najrýchlejčia konvrergencia pri lr 1e-4. , adam (0.9-0.999).

Budúce úlohy

  • Pripraviť aj iné množiny na vyhodnotnie: kategorizácia textu na SCNC1.

Poznámky

  • Dáta z prokuratúry asi zhoršujú model kvôli anonymizácii, skratkám a právnickému jazyku.
  • Nie každý model je vhodný na QA. Je potrebné aby mal veľký rozmer vstupného vektora aby aj dlhší odsek mohol byť na vstupe. Z toho dôvodu 128 "small model" asi nestačí na QA.
  • Väčší vstupný rozmer je obmedzený veľkosťou RAM pri trénovaní.
  • Electra vie využiť iba jednu Titan kartu, druhú zbytočne blokuje.
  • Trénovanie base electra trvá cca 40 dní na jednej karte.
  • Trénovanie electra small trvá asi 3 dni na jednej karte Titan RTX, ale model už ďalej nekonverguje po jednom dni.
  • Trénovanie electra small trvá asi 7 dní na jednej karte GTX1080
  • Dotrénovanie trvá iba niekoľko hodín.
  • Electric small 128 nefunguje na Quadre kvôli pamäti,
  • Electra small 512/32 batch funguje na Titane.
  • Spotrebu pamäte ovplyvňujú veľkosť vstupného vektora, veľkosť trénovacej dávky.
  • V SLovak Bert bola veľkosť vstupného vektora 512. Máme toľko pamäte?
  • learning rate by malo byť priamo úmerné s batch_size. Malý batch size by mal mať malý learning rate.
  • electra prepare skript defaultne odstraňuje diakritiku a dáva malé písmená.
  • ELECTRA ingoruje pokyn na ponechanie diakritiky!!!! Ponechanie diakritiky funguje iba pre "prepare", inak sa diakritika stále odstraňuje. Ne ponechanie diakritiky sú potrebné úpravy v zdrojových kódoch.
  • TODO: Vytvorenie slovníka ako pri BERT https://github.com/google-research/electra/issues/58

Budúci výskum

  • Zistiť aký je optimálny počet tokenov? V Slovak BERT použili 50k.
  • Pripraviť webové demo na slovenské QA.
  • Integrovať QA s dialógovým systémom.
  • Integrovať QA s vyhľadávačom.
  • Zostaviť multilinguálny BERT model.
  • Natrénovať BART model.
  • Natrénovať model založený na znakoch.

Hardvérové požiadavky

https://medium.com/nvidia-ai/how-to-scale-the-bert-training-with-nvidia-gpus-c1575e8eaf71:

When the mini-batch size n is multiplied by k, we should multiply the starting learning rate η by the square root of k as some theories may suggest. However, with experiments from multiple researchers, linear scaling shows better results, i.e. multiply the starting learning rate by k instead.

| BERT Large | 330M | | BERT Base | 110M |

Väčšia veľkosť vstupného vektora => menšia veľkosť dávky => menší parameter učenia => pomalšie učenie