web-dev-qa-db-fra.com

Apprentissage automatique (tensorflow / sklearn) à Django?

J'ai un formulaire Django, qui recueille les réponses des utilisateurs. J'ai également un modèle de classification des phrases tensorflow. Quelle est la meilleure façon/standard de mettre ces deux ensemble. Détails:

  1. le modèle tensorflow a été formé sur les données Movie Review de Rotten Tomatoes.
  2. Chaque fois qu'une nouvelle ligne est créée dans mon modèle de réponse, je veux que le code tensorflow le classe (+ ou -).
  3. Fondamentalement, j'ai un répertoire de projet Django et deux fichiers .py pour la classification. Avant d'aller de l'avant moi-même, je voulais savoir quelle est la façon standard d'implémenter des algorithmes d'apprentissage automatique dans une application Web.

Ce serait génial si vous pouviez suggérer un tutoriel ou un repo. Merci !

17
Subrat

Traitement asynchrone

Si vous n'avez pas besoin du résultat de la classification du code ML pour transmettre immédiatement à l'utilisateur (par exemple en tant que réponse à la même POST qui a été soumise), vous pouvez toujours mettre en file d'attente le travail de classification à exécuter en arrière-plan ou même un serveur différent avec plus de ressources CPU/mémoire (par exemple avec Django-background-tasks ou Céleri )

Une tâche en file d'attente serait par exemple de remplir le champ UserResponse.class_name (positif, négatif) sur les lignes de la base de données dont le champ est vide (pas encore classé)

Notification en temps réel

Si le code ML est lent et souhaite renvoyer ce résultat à l'utilisateur dès qu'il est disponible, vous pouvez utiliser l'approche asynchrone décrite ci-dessus, et paire avec la notification en temps réel (par exemple socket.io au navigateur ( cela peut être déclenché à partir de la tâche en file d'attente )

Cela devient nécessaire si le temps d'exécution ML est si long qu'il peut expirer la requête HTTP dans l'approche synchrone décrite ci-dessous.

Traitement synchrone, si le code ML n'est pas gourmand en CPU (assez rapide)

Si vous avez besoin que le résultat de la classification soit renvoyé immédiatement et que la classification ML soit assez rapide * , vous pouvez le faire dans le cycle de requête-réponse HTTP (la = POST retourne une fois le code ML terminé, de manière synchrone)

* Assez rapide signifie ici qu'il n'expirerait pas la requête/réponse HTTP et que l'utilisateur ne perdrait pas patience.

23
bakkal

Eh bien, j'ai dû développer la même solution moi-même. Dans mon cas, j'ai utilisé Theano. Si vous utilisez tensorflow ou theano, vous pouvez enregistrer le modèle que vous avez construit. Alors d'abord, entraînez le modèle avec votre jeu de données d'entraînement, puis enregistrez le modèle à l'aide de la bibliothèque que vous avez choisie. Vous devez déployer dans votre application Web Django uniquement la partie de votre code qui gère la prédiction. Donc, en utilisant un simple POST, vous donneriez à l'utilisateur la classe prédite de votre phrase assez rapidement. De plus, si vous pensez que cela est nécessaire, vous pouvez exécuter périodiquement un travail pour entraîner à nouveau votre modèle avec les nouveaux modèles d'entrée et l'enregistrer une fois de plus.

Je suggère de ne pas utiliser Django car cela ajoutera du temps d'exécution à la solution.

Au lieu de cela, vous pouvez utiliser un nœud pour servir un frontend Reactjs qui interagit avec TensorFlow rest API qui fonctionne comme un serveur autonome.

Comme le suggère la réponse au-dessus de ce post, il sera préférable d'utiliser WebSockets, vous pouvez utiliser un react module WebSocket afin qu'il actualise vos composants une fois que l'état du composant change.

J'espère que cela t'aides.