Pour ceux qui veulent essayer ceci ou cela pour la modélisation du deep learning mais ne savent pas comment l'implémenter Utiliser l'API fonctionnelle de Keras comme un framework relativement flexible et raisonnablement abstrait Essayez d'implémenter seq2seq, ce qui est difficile avec séquentiel, aussi simplement que possible
Créez un modèle de traduction automatique de l'anglais vers le japonais. On suppose que la chaîne de caractères est décomposée en mots à l'avance. Plus précisément, utilisez les données suivantes https://github.com/odashi/small_parallel_enja
Tout d'abord, convertissez la chaîne de mots d'entrée en un identifiant de mot et intégrez-la dans une dimension appropriée. Ensuite, utilisez LSTM pour créer une chaîne vectorielle de longueur variable de vecteurs incorporés correspondant à la chaîne de mots d'entrée. Encodez dans les états masqués h et c de deux cellules LSTM, qui sont des vecteurs de caractéristiques de longueur fixe.
Entrez les états cachés codés h, c et un mot spécial (vecteur incorporé) pour représenter le début de la phrase dans un autre LSTM. En passant la sortie de LSTM à la couche entièrement connectée et en prenant softmax, la probabilité que le premier mot soit chaque mot est obtenue. En prenant argmax de la probabilité que le premier mot soit chaque mot, on obtient le résultat de l'estimation du premier mot. Après cela, les mots sont générés l'un après l'autre à partir du vecteur incorporé du mot t et des états cachés h et c au moment du mot t, et la chaîne de mots de sortie est obtenue.
Cela ressemble à la figure ci-dessous.
Les carrés de la même couleur ont le même poids. L'entrée réelle d'un carré contenant un mot spécifique est le mot converti en l'ID de mot correspondant. Pour plus de commodité, il est écrit dans le mot lui-même. A titre d'exemple, j'ai écrit les dimensions des valeurs passées entre chaque cellule dans le code que j'ai écrit cette fois, mais ce sont des hyperparamètres. Il existe de nombreux autres modèles pour seq2seq, non limités à la traduction automatique neuronale, mais nous nous concentrerons sur nous habituer aux keras et utiliser un modèle simple.
J'utilise l'instance de notebook de Sagemaker car c'est beaucoup de problèmes. Diverses bibliothèques et environnements GPU ont déjà été construits pour les instances GPU, et le prix commence à partir de 0,0464 USD / heure! Si vous utilisez le GPU, cela coûte 1,26 USD / heure pour ml.p2.xlarge, donc si vous déboguez avec ml.t2.medium et utilisez ml.p2.xlarge uniquement pour apprendre, ce sera moins cher. J'ai un PC de jeu sous la main, donc je peux le faire à portée de main, mais c'est un problème, donc j'utilise des instances de notebook tout le temps ces jours-ci.
La partie prétraitement est la suivante Traduction automatique neuronale avec attention https://www.tensorflow.org/tutorials/text/nmt_with_attention
La base de code pour la partie apprentissage / inférence est la suivante Sequence to sequence example in Keras (character-level). https://keras.io/examples/lstm_seq2seq/
Les données utilisées pour l'apprentissage sont les suivantes https://github.com/odashi/small_parallel_enja
Le référentiel contenant le code de cet article https://github.com/nagiton/simple_NMT
Recommended Posts