[PYTHON] Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras

Quel genre d'article?

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

table des matières

  1. Aperçu (Imakoko)
  2. Prétraitement
  3. Construction et apprentissage de modèles
  4. Inférence
  5. Amélioration du modèle (pas encore réalisée)

Tâche à résoudre

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

Aperçu du modèle

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.

LSTM-Page-1.png

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.

Environnement

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.

référence

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

Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras
Construire un modèle seq2seq en utilisant la création et l'apprentissage du modèle d'API fonctionnelle de Keras
Construire un modèle seq2seq à l'aide de l'inférence API fonctionnelle de Keras
Pré-traitement pour construire un modèle seq2seq à l'aide de l'API fonctionnelle de Keras
Modèle multi-entrées / multi-sorties avec API fonctionnelle
Créer un modèle d'apprentissage à l'aide de MNIST
Créer une API CRUD à l'aide de l'API rapide
Créer un environnement virtuel en utilisant homebrew + pyenv-virtualenv
Obtenir un modèle de référence à l'aide de Django Serializer
Créez une API REST à l'aide du modèle appris dans Lobe et TensorFlow Serving.
Python: analyse des séries temporelles: création d'un modèle SARIMA
Créons une API REST en utilisant SpringBoot + MongoDB
Création d'une application interactive à l'aide d'un modèle de rubrique
Préparer un pseudo serveur API à l'aide d'actions GitHub