dinsdag 3 maart 2020

Bertje opnieuw

Bij deze Kaggle kernel wordt gebruik gemaakt van een mini implementatie van Bert voor de 'Disaster competitie'. Dat is interessant. Er lijkt vrijwel alleen van de embeddings gebruik gemaakt te worden.
Ik snap het nog niet helemaal. Maar het model is minimaal:

Model: "model"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_word_ids (InputLayer)     [(None, 160)]        0                                            
__________________________________________________________________________________________________
input_mask (InputLayer)         [(None, 160)]        0                                            
__________________________________________________________________________________________________
segment_ids (InputLayer)        [(None, 160)]        0                                            
__________________________________________________________________________________________________
keras_layer (KerasLayer)        [(None, 1024), (None 335141889   input_word_ids[0][0]             
                                                                 input_mask[0][0]                 
                                                                 segment_ids[0][0]                
__________________________________________________________________________________________________
tf_op_layer_strided_slice (Tens [(None, 1024)]       0           keras_layer[0][1]                
__________________________________________________________________________________________________
dense (Dense)                   (None, 1)            1025        tf_op_layer_strided_slice[0][0]  
==================================================================================================
Total params: 335,142,914
Trainable params: 335,142,913
Non-trainable params: 1

Daarnaast lijkt er een goede data voorbereidings module in te zitten. Ik ben daar bij mijn eerdere testen wat laks in geweest en ik ben dus benieuwd of dit tot betere resultaten kan leiden. 
Ik besluit eerst mijn eerdere tests met Bertje eens met deze verbeterde input te proberen. 




Na wat worstelen wordt de data goed aangemaakt krijg ik een bekende, eerder tegenaan gelopen, foutmelding:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 3 array(s), but instead got the following list of 1 arrays:  [array([[[    1, 14640, 28738, ..., 13538, 24142,     2],

Gek genoeg geeft de nieuwe, gekopieerde functie niet de uiste dataset vorm af. 

>>> train_x
array([[[    1, 14640, 28738, ..., 13538, 24142,     2],
        [    1,  8740,   132, ..., 22538, 25138,     2],
        [    1, 14115,   121, ..., 10928, 23906,     2],

        ...,

>>> train_x.shape

(3, 42896, 64)

Die drie haken ([[[ ) heb ik eerder gezien. Maar hoe heb ik dat ook alweer opgelost?
Ik ga maar weer eens even graven ...
Aha, het blijkt een tuple te zijn geworden van 3 arrays. Een eenvoudige conversie naar list maakt het trainen weer mogelijk:



Spannend! ...


Nou aardig , maar we hebben het beter gedaan volgens mij:
https://dww-deeplearning.blogspot.com/2020/02/bertje-als-meer-tekst-niet-helpt.html


Geen opmerkingen:

Een reactie posten