donderdag 2 april 2020

Leren met letters 09 - Zelf een NL chars2vec netwerk trainen.

Nee, deze keer nog geen nieuwe resultaten in het verder optimaliseren van het deeplearning met chars2vec. Maar wel een start met iets nieuws: Kijken of ik ook zelf een chars2vec embedding network kan trainen. Met name ook met Nederlandse woorden. En wellicht later een keer met hoofd- en kleine letters. (Daar was het tenslotte allemaal (ondermeer) om te doen. Om de 'betekenis' in een zin van hoofdletters mee te kunnen nemen zonder daarbij een volledig nieuw 'woord' te hoeven maken. Zie toelichting hier.

Ik heb al eens eerder Nederlandse wiki artikelen gedownload en die staan nog 'braaf' te wachten om verder van nut te zijn. Dat komt nu goed uit.

Ik moet blijkbaar trainingsdata maken in deze vorm:

X_train = [('mecbanizing', 'mechanizing'), # similar words, target is equal 0
           ('dicovery', 'dis7overy'), # similar words, target is equal 0
           ('prot$oplasmatic', 'prtoplasmatic'), # similar words, target is equal 0
           ('copulateng', 'lzateful'), # not similar words, target is equal 1
           ('estry', 'evadin6'), # not similar words, target is equal 1
           ('cirrfosis', 'afear') # not similar words, target is equal 1
          ]

y_train = [0, 0, 0, 1, 1, 1]

Dat zou moeten lukken. De NL wiki beval genoeg woorden zou ik zeggen om een stevige hoeveelheid materiaal aan te maken.

Het gaat om 211.674 wiki artikelen en dat blijkt al snel veel te veel voor mijn (computers) geheugen. Ik neem de eerste 5.000 en kom daarmee op 222948 verschillende woorden als uitganspunt. Dat is best veul!



Van deze woorden maak ik 1 x een paar met random letter vervanging, 1 x met letter verwisseling en 2 x met een random ander woord. Na 'schudden' selecteer ik de eerste 100.000 paren om de training mee te doen. Hier een voorbeeld:

[('Engelsche', 'Engelscje'), ('visual', 'Lichenology'), ('Inhoudsopgave', 'Ministre'), ('Dandelion', 'Dandeilon'), ('tombe', 'tobme'), ('woningcrisis', 'tollenaar'), ('gallicisme', 'gallicisem'), ('Boekhoorn', 'Boekhoorn'), ('bouwster', 'richtinggetrouw'), ('Reu', 'eRu')]

Grappig dat het eerste woord van deze NL selectie 'Engelsche' is.

Standaard traint het model 200 epochs met 10 'patience' d.w.z. dat er maximaal 10x geen verbetring in de costfunctie te zien mag zijn. Ik ben ongeduldig en verander dat laatste naar 3x.
Hij draait nu in ongeveer 316 seconden 1 epoch en ik moet er 17 wachten tot hij vanzelf stopt.

Epoch 17/200
95000/95000 [==============================] - 281s 3ms/step - loss: 4.2194e-04 - val_loss: 0.0023

Een nette validatie loss, lijkt mij, en hij saved netjes he model in de door mij opgegevn directory.
Nu gaat het erom spannen of ik er ook redelijke resultaten mee ga halen. Wordt vervolgd!












Geen opmerkingen:

Een reactie posten