maandag 18 maart 2019

Matters that matter V

Inmiddels weer heel wat bijgeleerd. Daar waar in het laatste model succesvol een 'one-hot layer' was geimplementeerd blijkt het veel handiger te zijn om een word2vec layer als input layer te gebruiken. Zo'n layer zorgt ervoor dat woorden, weergeven door integers, naar een 'contextuele vector' worden omgezet. Of te wel een vector die opgebouwd wordt aan de hand van de omgevingswoorden. In Keras is dat eenvoudig mogelijk met een 'embedded layer'. Dit werkt snel en heeft ook als voordeel dat er veel minder geheugenruimte wordt gebruikt zodat het niet nodig is om de hoeveelheid woorden in te perken. (alle woorden die minder dan 20x voorkwamen moest ik eruit halen in het One-Hot model)

The amazing power of word vectors | the morning paper

De embedded layer levert een validation accuracy op van zo'n 75%! Dat schiet lekker op!


Een 2e 'slag' die we maken is het LSTM. Dat levert ook al verbeteringen maar met een bidirectionele LSTM komen we net bij de 82%

Toch moet het nog beter kunnen volgens de recente publicaties. Een LSTM zou feitelijk zijn afgeschreven en ingehaald door attention mechanismes. Ik vind een informele Keras attentie publicatie:

https://pypi.org/project/keras-self-attention/

Na wat gehannes lukt het me om die aan te passen voor deze casus. Met name moet ik een 'Flatten' layer toevoegen om weer op de juiste dimensies uit te komen. Eerst lukt dat niet omdat er in het voorbeeld uit wordt gegaan van 'masking' (mask_zero=True)  en dat gata blijkbaar weer niet samen met de latere Flatten layer. Maar het lukt!!! We komen nu in 3 (lange) epochs uit op 84.1% (met een val_loss 0.797).


Leuk, ook weer gelukt!!

Met een conv1d layeripv een bi directioneel lstm gaat het ietjes minder goed (val acc 83.4%) maar wel veel sneller: 170seconden per epoch ipv 760 sec:



Geen opmerkingen:

Een reactie posten