4

Je travaille sur un problème d'étiquetage de phrases. Je l'ai fait l'enrobage et rembourrage par moi-même et mes entrées ressemble:Etiquetage de séquence dans Keras

X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...], [0,0,0,0,0...], ....] 

Pour chaque mot phrase que je veux prédire l'une des quatre classes, donc ma sortie désirée devrait ressembler à:

Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...] 

Mon architecture simple réseau est:

model = Sequential() 

model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True)) 
model.add(TimeDistributedDense(output_dim=4)) 
model.add(Activation('softmax')) 
    model.compile(loss='binary_crossentropy', optimizer='adam') 

model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True) 

Il montre environ 95% tandis que la formation, mais quand je suis en train de prévoir de nouvelles phrases en utilisant les résultats du modèle sont formés vraiment mauvais. On dirait que le modèle vient d'apprendre quelques classes pour les premiers mots et le montre à chaque fois. Je pense que le problème peut est:

  1. Écrit par moi-même (zéro padding vecteurs à la fin de la phrase), peut-il faire de l'apprentissage pire?

  2. que je devrais essayer d'apprendre des phrases de différentes longueurs, sans rembourrage (si oui, pouvez-vous me aider comment former ce genre d'un modèle Keras?)

  3. objectif incorrect de l'apprentissage, mais j'essayé moyenne erreur au carré, entropie croisée binaire et autres, ça ne change pas. Quelque chose avec TimeDistributedDense et softmax, je pense, que j'ai comment cela fonctionne, mais toujours pas sûr à 100%.

Je serai heureux de voir toute allusion ou aide concernant ce problème, merci!

+0

Avez-vous essayé abandon sur votre lstms? aussi, avez-vous essayé la normalisation par lots de lstm – Julius

+0

comme vous avez le jeu de formation très élevé apprenez le taux, vous pourriez faire le haut abandon pour faire la régularisation – Julius

+0

et alors peut-être essayer plusieurs couches de lstm – Julius

Répondre

1

Personnellement, je pense que vous ne comprenez pas ce que signifie «l'étiquetage de séquence».

Voulez-vous dire:

  1. X est une liste de phrases, chaque élément X[i] est une séquence de mots de longueur arbitraire?
  2. Y[i] est la catégorie de X[i], et la seule forme chaude de Y[i] est un tableau [0, 1, 0, 0] like?

Si c'est le cas, alors ce n'est pas un problème d'étiquetage de séquence, c'est un problème de classification.

Ne pas utiliser TimeDistributedDense, et si elle est un problème de classification multi-classe, à savoir, len(Y[i]) > 2, puis utilisez « categorical_crossentropy » au lieu de « binary_crossentropy »

+0

Puis-je connaître votre point de vue sur les raisons pour lesquelles ce n'est pas un problème d'étiquetage de séquence?J'ai un même défi et l'entrée est la séquence de mots et j'ai besoin d'une étiquette pour chaque mot. N'est-ce pas un problème d'étiquette de séquence? –