zondag 29 november 2015

LSTMs - met James Potter

Ok, wie is James Potter en wat heeft hij met LSTMs te maken? Wel, het is natuurlijk leuk om automatisch teksten van Nietzsche te generen maar om een beetje te begrijpen hoe 'goed' die het doet is Nietzsche misschien toch wat te ingewikkeld. Maar eens even gezocht naar een beschikbare Nederlandse tekst: "James Potter en de vloek van de poortwachter". Een boek van G. Norman Lippert dat gebaseerd is op de karakters en werelden van J.K. Rowling. Je weet wel, die van Harry Potter.

Het blijkt inderdaad niet moeilijk om deze tekst aan het LSTM te voeden. Wel eerst even naar 'plain text' omzetten om de opmaak en de plaatjes kwijt te raken en dan laden maar.

De tekst bestaat uit 1.180.397 karakters (65 verschillende) en levert 'dus' 393.459 sequences op.

Het duurt toch lang voordat de 60 iteraties zijn uitgevoerd. Per iteratie ongeveer 9 minuten. Dus even tijd om na te denken en de Keras documentatie wat verder door te lezen.

Wat mij nog ontgaat is hoe de volgordelijkheid in dit algoritme wordt meegenomen. Natuurlijk, de letters volgen elkaar op maar de bieden we in feite in 20 letters per keer aan en de 21e moet 'hij' dan voorspellen. Dat er een volgorde in die 20 letters ziet het netwerk feitelijk niet. De 19e letter is even belangrijk als de 20e en dus even belangrijk als bijvoorbeeld de 1e. Dat lijkt toch 'tegen intuïtief' ?! De letters dichtbij de te voorspellen letter zouden toch 'belangrijker' moeten zijn?

De vraag is dan ook of een 'gewoon' neuraal netwerk dit zo niet even goed zou kunnen doen. Er worden dan ook outputs berekend op basis van 'een reeks' inputs. (features genoemd) Zoek de verschillen?! Maar wellicht zie ik een stukje logica over het hoofd.

Wat leuker is om te bedenken is of er, in plaats van letter generatie, ook met woorden generatie gewerkt kan worden. Zou dat geen nog effectievere teksten opleveren? De uitdaging is dan wel dat er zowel aan input zijde als aan output zijde veel grotere vectoren ontstaan. Even groot als het aantal gebruikte woorden in de betreffende tekst. Maar misschien kunnen we (en moeten we) het formaat limiteren tot bijvoorbeeld de 1000 meestgebruikte woorden. Eens kijken of we dit voor elkaar kunnen krijgen.

De eerste resultaten geven 241.236 woorden. Er zijn 14.069 unieke woorden! Toch wel veel. Zou dat lukken?


Het eerste programma heeft ondertussen doorgewerkt op de LSTM met karakters. Bij iteratie 24 stop het programma met een of andere memory error. Mogelijk omdat het 2e programma (LSTM met woorden) ook al de nodige capaciteit heeft gevraagd. 

"Error allocating 5200 bytes of device memory (unknown error). Driver report 4003065856 bytes free and 4294770688 bytes total "

Gelukkig geeft hij tussendoor resultaten. Het begint toch al ergens op te lijken. Straks een nieuw boek uitgeven? :-)

--------------------------------------------------
Iteration 23
Epoch 1/1
393459/393459 [==============================] - 464s - loss: 0.9507     

----- diversity: 0.2
----- Generating with seed: "ereen die had meeged"
ereen die had meegedaan? zelfs jullie zijn dat je me herinneren dat hij het ook zij, alsof hij had gezien in een van de standbeeld van de deur en stapte op de trein.
‘wat?’ zei james zijn hand op. ‘ik heb nog niet kon zien. hij keek naar james op het totel behoorlijk gegeven door een stekelijke verdering om te bezichten te zijn om hem te verschenen tot hij de deur van de deur van de stok van de deur van de deur
----- diversity: 0.5
----- Generating with seed: "ereen die had meeged"
ereen die had meegede leeg. hij perste zijn stem op zijn hoofd naar haar. en ze had de andere kant van de aansluiterde kon de hand tegen de vloek van de poortwachter tegen de donkere voeten onder de vloer van de droom van een verhaal zien. ze heeft zijn hand en stond omhoog de deur van de voorstelling van de hartstelling van zweinstein, als de leste gesprek hem open en james had geluk in zijn hand en zag hem en begon
----- diversity: 1.0
----- Generating with seed: "ereen die had meeged"
ereen die had meegede leerden. het p?dat west. ik heb geen zie aan het pad om deze langei? van vervangen spiegel door de kluis niet ermie magie,’ zei het soort van zweinstein.’
‘laten we komen ze genoeg was. james besloot om hem te zueren. ik had gezicht van ons laat.een. hoe was het??2 het lang ik doe, natuurlijk niet langen waren. ‘en we samen een dolk was ver wacht toen ik hij niet verdien tussen haar blik
----- diversity: 1.2
----- Generating with seed: "ereen die had meeged"
ereen die had meegedaan?.’
een streep vloer langs randpen rusfening.
‘ankazekmezing was om te leggen, ol ze voor iets wat treis hij invererde dat je stopte hhabden om te gereiste ;ogevong. en bereikte, een laatste belondig liet zalazar rechtschieven we op ginat de trein als1. zalazar?’verdeerde de stem telug. ze zei dat ze erg nooi mee als daarom.’
765

harry nam laatheer. het valt morgen gegaan dat. hojjs roo


Geen opmerkingen:

Een reactie posten