Kako ustvariti lasten najsodobnejši sistem za ustvarjanje besedila

Naključno besedilo, ustvarjeno z umetno inteligenco

Komaj mine dan, ko o lažnih novicah ni zgodbe. Spominja me na citat najljubšega radijskega novinarja iz moje mladosti: 'Če vam novice niso všeč, pojdite ven in si ustvarite svoje.' Prebojni jezikovni model OpenAI, 1,5 milijarde parametrov, različica GPT-2, se je dovolj približal, da se je skupina odločila, da je vsaj za zdaj preveč nevarna za javno objavo. Vendar je OpenAI zdaj izdal dve manjši različici modela, skupaj z orodji za njihovo natančno nastavitev na lastno besedilo. Torej lahko brez preveč truda in z dramatično manj časa GPU, kot bi ga potrebovali za trening iz nič, ustvarite uglašeno različico GPT-2, ki bo lahko ustvarila besedilo v slogu, ki mu ga daste, ali celo začeti odgovorite na vprašanja, podobna tistim, s katerimi ga trenirate.



Kaj naredi GPT-2 posebno

GPT-2 (Generative Pre-Trained Transformer različica 2) temelji na različici zelo zmogljivega nevronskega omrežja Transformer, ki temelji na pozornosti. Raziskovalci v OpenAI so bili nad njim tako navdušeni, ko so ugotovili, da lahko obravnava številne jezikovne naloge, ne da bi bili za to neposredno usposobljeni. Ko je bil vnaprej usposobljen s svojim ogromnim korpusom podatkov Reddit in je imel ustrezne pozive, je opravil zadovoljivo delo z odgovori na vprašanja in prevajanjem jezikov. Kar zadeva semantično znanje, zagotovo ni kaj podobnega Watsonu, vendar je tovrstno nenadzorovano učenje še posebej vznemirljivo, ker odstrani večino časa in stroškov, potrebnih za označevanje podatkov za nadzorovano učenje.



Pregled dela z GPT-2

Za tako močno orodje je postopek dela z GPT-2 na srečo dokaj preprost, če vsaj malo poznate Tensorflow. Večina vaj, ki sem jih našel, se opira tudi na Python, zato je zelo koristno vsaj osnovno znanje programiranja v Pythonu ali podobnem jeziku. Trenutno je OpenAI izdal dve predhodno usposobljeni različici GPT-2. Eden (117 milijonov) ima 117 milijonov parametrov, drugi (345 milijonov) pa 345 milijonov. Kot lahko pričakujete, zahteva večja različica več pomnilnika GPU in traja dlje časa. Lahko trenirate bodisi na svojem CPU, vendar bo res počasi.





Prvi korak je prenos enega ali obeh modelov. Na srečo ima večina vadnic, vključno s tistimi, po katerih vas bomo vodili spodaj, koda Python, ki to stori namesto vas. Ko ga prenesete, lahko zaženete predhodno izurjeni model bodisi za samodejno ustvarjanje besedila bodisi kot odgovor na poziv, ki ga navedete. Obstaja pa tudi koda, ki vam omogoča, da nadgradite predhodno izurjeni model, tako da ga natančno nastavite na vir podatkov po vaši izbiri. Ko svoj model prilagodite svojemu zadovoljstvu, potem je preprosto treba ga zagnati in zagotoviti ustrezne pozive.

Delo z GPT-2 na vašem lokalnem računalniku

Obstajajo številne vadnice o tem, vendar je moja najljubša Max Woolf. Pravzaprav sem do izdaje OpenAI delal z njegovim RNN za ustvarjanje besedila, ki si ga je izposodil za svoje delo GPT-2. Priskrbel je a celoten paket na GitHubu za prenos, nastavitev in zagon modela, ki temelji na GPT-2. Lahko ga celo zataknete neposredno kot paket iz PyPl. Readme vas popelje skozi celoten postopek z nekaj predlogi, kako prilagoditi različne parametre. Če imate priročen ogromen grafični procesor, je to odličen pristop, toda ker model 345M potrebuje večino 16 GB grafičnega procesorja za usposabljanje ali nastavitev, se boste morda morali obrniti na GPU v oblaku.



Brezplačno sodelovanje z GPT-2 z Googlovim Colabom

Kontrolne točke svojega modela sem imel vsakih 15.000 korakov za primerjavo in v primeru, da se model sčasoma prekomerno obleče in se moram vrniti na prejšnjo različico.Na srečo obstaja način, kako v oblaku brezplačno uporabiti zmogljiv GPU - Googlov Colab. Ni tako prilagodljiv kot dejanski račun Google Compute Engine, zato morate vsako sejo znova naložiti, vendar sem omenil, da je brezplačna? Med testiranjem sem dobil bodisi Teslo T4 bodisi GPU K80, ko sem inicializiral prenosni računalnik, katerega izmed njih je dovolj hiter, da lahko te modele usposobim s primernim posnetkom. Najboljše je, da je Woolf že avtor a Prenosni računalnik Colab, ki odseva različico lokalne kode Python gpt2-simple . Podobno kot pri namizni različici lahko preprosto sledite ali prilagodite parametre, da poskusite. Pri pridobivanju podatkov v Colab in iz njega je sicer nekaj zapletenosti, vendar vas bo tudi prenosnik popeljal skozi to.



Pridobivanje podatkov za vaš projekt

Zdaj, ko so v splet izšli zmogljivi jezikovni modeli in je veliko vadnic o njihovi uporabi, je najtežji del vašega projekta ustvarjanje nabora podatkov, ki ga želite uporabiti za nastavitev. Če želite ponoviti eksperimente drugih, tako da ustvari Shakespeara ali piše Zvezdne steze pogovorno okno, lahko preprosto zaskočite tisto, ki je na spletu. V mojem primeru sem želel preveriti, kako bodo naredili modeli, ko bodo pozvani, da ustvarijo članke, kakršne najdemo na importpartsspecialists.com. Imel sem dostop do zadnjega kataloga z več kot 12.000 članki v zadnjih 10 letih. Tako sem jih lahko združil v besedilno datoteko in jo uporabil kot osnovo za natančno uglaševanje.

Če imate druge ambicije, ki vključujejo posnemanje spletnega mesta, je strganje zagotovo alternativa. Obstaja nekaj izpopolnjenih storitev, kot je ParseHub, vendar so omejene, razen če plačate komercialni načrt. Ugotovil sem, da je razširitev za Chrome Webscraper.io dovolj prilagodljiva za številne programe ter hitra in brezplačna. Veliko opozorilo je, da bodite pozorni na pogoje storitve za katero koli spletno mesto, na katero mislite, pa tudi na kakršna koli vprašanja glede avtorskih pravic. Če pogledamo rezultate različnih jezikovnih modelov, jih vsekakor ne naučimo, da ne plagirajo.



Torej, lahko to počne tehnološko novinarstvo?

Ko sem dobil svoj korpus 12.000 člankov importpartsspecialists.com, sem začel s poskusom treniranja poenostavljenega GPT-2 na grafičnem procesorju Nvidia 1080 na namizju. Na žalost 8 GB RAM-a GPU ni bilo dovolj. Tako sem prešel na trening 117M modela na svojem 4-jedrnem i7. Ni bilo noro grozno, vendar bi trajalo več kot teden dni, da bi naredili pravo udrtino tudi z manjšim izmed obeh modelov. Tako sem prešel na Colab in model 345M. Usposabljanje je bilo veliko, veliko hitrejše, toda potreba po reševanju ponastavitev sej in nepredvidljivosti katerega GPU-ja bi dobil za vsako sejo je bila moteča.

Nadgradnja na Googlov Compute Engine

Po tem sem ugriznil kroglo, se prijavil za račun Google Compute Engine in se odločil, da izkoristim 300 USD dobropisa, ki ga Google daje novim strankam. Če niste seznanjeni z nastavitvijo VM v oblaku, je to lahko nekoliko zastrašujoče, vendar obstaja veliko spletnih vodnikov. Najenostavneje je, če začnete z enim od vnaprej konfiguriranih VM-jev, v katerih je že nameščen Tensorflow. Izbral sem različico Linuxa s 4 vCPU-ji. Čeprav je moj namizni sistem Windows, je ista koda Pythona popolnoma delovala na obeh. Nato morate dodati GPU, ki je v mojem primeru Googlovo podporo zaprosil za dovoljenje. Predvidevam, da zato, ker so stroji, opremljeni z GPU, dražji in manj prilagodljivi kot stroji samo s CPU, zato imajo neke vrste postopek preverjanja. Trajalo je le nekaj ur in lahko sem sprožil VM s Teslo T4. Ko sem se prvič prijavil (z vgrajenim SSH), me je spomnil, da moram namestiti gonilnike Nvidia za T4, in mi dal ukaz, ki ga potrebujem.



Nato morate nastaviti odjemalca za prenos datotek, kot je WinSCP, in začeti delati s svojim modelom. Ko naložite kodo in podatke, ustvarite navidezno okolje Python (neobvezno) in naložite potrebne pakete, lahko nadaljujete na enak način kot na namizju. Svoj model sem treniral v korakih po 15.000 korakov in vsakič prenesel kontrolne točke modela, tako da bi jih imel za referenco. To je lahko še posebej pomembno, če imate majhen nabor podatkov o treningu, saj lahko preveč treninga povzroči, da se vaš model preveč prilega in dejansko poslabša. Torej je dragoceno imeti kontrolne točke, kamor se lahko vrnete.



Če govorimo o kontrolnih točkah, so modeli, tako kot modeli, veliki. Torej boste verjetno želeli dodati disk v svoj VM. Če imate disk ločen, ga lahko vedno uporabite za druge projekte. Postopek za samodejno namestitev je nekoliko moteč (zdi se, da bi lahko bil potrditveno polje, vendar ni). Na srečo morate to storiti samo enkrat. Potem ko sem imel VM pripravljen za delovanje s potrebno kodo, modelom in podatki o vadbi, sem ga pustil na cedilu. T4 je lahko tekel približno en korak vsakih 1,5 sekunde. VM, ki sem ga konfiguriral, stane približno 25 USD na dan (ne pozabite, da se VM-ji ne izklopijo; če jih ne želite zaračunavati, jih morate izklopiti, obstojni disk pa se tudi takrat obračuna).

Da bi prihranil nekaj denarja, sem kontrolne točke modela (kot .zip datoteko) prenesel nazaj na namizje. Nato bi lahko zaustavil VM (prihranil dolar ali dve na uro) in lokalno sodeloval z modelom. Tako ali tako dobite enak izhod, ker sta model in kontrolna točka enaka. Tradicionalni način ocenjevanja uspeha vašega treninga je, da del svojih podatkov o vadbi navedete kot validacijski niz. Če se izguba še naprej zmanjšuje, vendar se natančnost (ki jo dobite z izračunavanjem izgube, ko zaženete model na podatkih, ki ste jih imeli za preverjanje) zmanjša, je verjetno, da ste začeli preveč prilagajati podatke in model preprosto 'zapomni' vaš prispevek in vam ga pošlje nazaj. To zmanjšuje njegovo sposobnost obvladovanja novih informacij.

Tu je govedina: nekaj vzorčnih rezultatov po dnevih treninga

Po eksperimentiranju z različnimi vrstami pozivov sem se odločil, da bom modelu (ki sem ga poimenoval Oracle) nahranil prve stavke dejanskih člankov importpartsspecialists.com in videl, do česa je prišel. Po 48 urah (v tem primeru 106.000 korakov) treninga na T4 je tukaj primer:

Rezultat našega modela po dvodnevnem treningu na T4, ko je dobil prvi stavek Ryana Whitwama

Rezultat našega modela po dvodnevnem treningu na T4, ko je bil podan prvi stavek v članku Ritana Whitwama o Titanu. Očitno nikogar ne bo zavajalo, toda model v tem trenutku začenja dostojno delati, da podobne koncepte povezuje.

Več informacij ima model o temi, bolj začne ustvarjati verodostojno besedilo. O storitvi Windows Update veliko pišemo, zato sem mislil, da bom pustil, da model poskusi:

Model

Odgovor modela na poziv o posodobitvi sistema Windows po nekaj dneh usposabljanja.

Z nečim tako subjektivnim, kot je ustvarjanje besedila, je težko vedeti, kako daleč gre z usposabljanjem modela. To še posebej drži, saj boste vsakič, ko boste poslali poziv, dobili drugačen odgovor. Če želite dobiti nekaj verjetnih ali zabavnih odgovorov, je najbolje, da za vsak poziv ustvarite več vzorcev in si jih sami ogledate. V primeru poziva za Windows Update smo model po istem nekaj urnem treningu posredovali istemu pozivu in zdelo se je, da bi bilo dodatno delo morda koristno:

Po naslednjih nekaj urah usposabljanja je tukaj najboljši vzorec, če dobite isti poziv o sistemu Microsoft Windows.

Po še nekaj urah usposabljanja je tukaj najboljši vzorec, ko dobite isti poziv o sistemu Microsoft Windows.

Evo, zakaj so nenadzorovani modeli tako kul

Surova napovedna zmogljivost GPT-2 (vsaj javna različica) me je navdušila, a ni navdušila, v primerjavi s preprostejšimi rešitvami, kot je textgenrnn. Česar sem se ujel šele pozneje, je bila vsestranskost. GPT-2 je dovolj splošen namen, da lahko obravnava najrazličnejše primere uporabe. Če mu na primer daste pare francoskih in angleških stavkov, ki jim sledi le francoski stavek, to verjetno ustvari prevode. Če pa mu daste pari vprašanj in odgovorov, ki mu sledi vprašanje, si na spodoben način priskrbi verjeten odgovor. Če ustvarite nekaj zanimivih besedil ali člankov, prosimo, razmislite o skupni rabi, saj je to zagotovo učna izkušnja za vse nas.