Game of Thrones Twitter avec Keras sentiment, faisceau Apache, BigQuery et PubSub

Game of Thrones Twitter avec Keras sentiment, faisceau Apache, BigQuery et PubSub
 

3. Modèle ML servi sur plate-forme d'IA

Pour chaque tweet entrant, nous voulons déterminer si le sentiment exprimé (vis-à-vis de l'épisode) est positif ou négatif. Cela signifie que nous devrons: Lorsque vous pensez à l'analyse des sentiments

  • rechercher un ensemble de données approprié
  • former un modèle d'apprentissage de la machine
  • servir ce modèle d'apprentissage de la machine

Dataset

nous pensons rapidement du ' Le jeu de données IMDB Movie Review. Cependant, dans ce but précis, ce classique semblait moins bien adapté, puisque nous traitons ici de tweets.

Heureusement, le jeu de données Sentiment140, qui contient 1,6 million de tweets marqués (positifs et négatifs), semble parfaitement adapté à cette affaire. Plus d'informations et le jeu de données sur cette page Kaggle . Quelques exemples: l'échantillon

de l'ensemble de données Sentiment140

Prétraitement le texte se fait dans une classe séparée, de sorte qu'il peut ensuite être réutilisée lors de l'appel du modèle: Pour le modèle de classification lui-même

Modèle

je Je me suis basé sur le célèbre article de 2014 de Yoon Kim sur CNN multicanal pour la classification de texte ( source ). Pour faciliter le développement (et le déploiement ultérieur), j'ai utilisé Keras en tant qu'API de haut niveau.

Un modèle basé sur CNN offre l'avantage supplémentaire que la formation du modèle était toujours réalisable sur mon petit poste de travail local (NVidia GTX 1050Ti avec 4 Go mémoire) dans un temps décent. Alors qu'un modèle basé sur RNN (souvent utilisé pour la classification des sentiments) aurait un temps de formation beaucoup plus long.

Nous pouvons essayer de donner au modèle un zing supplémentaire en chargeant des Word Embeddings pré-entraînés. Dans ce cas: les incorporations Glove 2.7B Twitter semblait être une bonne option

Le code complet peut être trouvé dans ce portable

Nous avons formé le modèle de 25 époques, avec deux Keras Callback!. mécanismes en place:

  • un rappel pour réduire le LR lorsque les plateaux de perte de validation
  • un rappel pour s'arrêter tôt lorsque la perte de validation ne s'est pas améliorée depuis un moment, ce qui a entraîné l'arrêt de l'entraînement après 10 périodes

la courbe de formation et de test peut être vu ici.

Ainsi, on obtient une précision d'environ 82,5%

au service du modèle

AI Platform fournit une gestion évolutive, la plate-forme au service des modèles d'apprentissage de la machine, avec une belle

En ce qui concerne l’hébergement, il existe un aspect particulier de notre modèle qui le rend un peu moins trivial de le servir dans AI Platform: le fait que nous devons normaliser, tokenize et indexer notre texte dans de la même manière que nous avons fait pendant l’entraînement.

Vous pouvez choisir parmi les options suivantes:

  • Enveloppez le modèle tf.keras dans un modèle TF, puis ajoutez une couche Hashtable pour conserver l’état de la dictée de tokenization. Plus d'informations ici .
  • Allez-y à fond et implémentez un pipeline de prétraitement tf.transform pour vos données. après grand blog sur ce ici .
  • Mettre en œuvre le pré-traitement plus tard, dans le pipeline streaming lui-même .
  • Utilisez la fonctionnalité bêta plate-forme AI d'avoir un sur mesure ModelPrediction class.

Etant donné qu'il ne disposait ni du temps ni des ressources nécessaires pour transformer tf.transform, et que surcharger potentiellement le pipeline de streaming avec un prétraitement supplémentaire semblait être un mauvais choix, le dernier . aller

Le schéma ressemble à ceci:

des classes personnalisées ModelPrediction sont assez faciles, il y a une grande blogpost par les coups d'oeil de Google sur elle ici . Le mien ressemble à ceci:

Pour créer un modèle de plateforme d'IA desservie à partir de cela, il suffit de:

  • empaqueter la prédiction personnalisée et le fichier .py de prétraitement
  • télécharger ce paquet, avec un modèle et un prétraitement persistants instance de classe dans un compartiment
  • à partir de là, créez un modèle nommé ce que vous voulez
  • dans ce modèle, créez une nouvelle version, basée sur les éléments téléchargés avec une certaine bêta magique: