Difference between revisions of "SRS - Recommandation intelligente de films"

From air
Jump to navigation Jump to search
 
(74 intermediate revisions by 4 users not shown)
Line 11: Line 11:
   
 
=Introduction =
 
=Introduction =
Qui n'a pas rêvé d'avoir une liste de films correspondant exactement à ses goûts cinématographiques ? Beaucoup d'algorithmes ont été conçus pour tenter d'adapter une liste de film en fonction des goûts de l'utilisateur mais manquaient d'efficacité.
+
Qui n'a pas rêvé d'avoir une liste de suggestion de films correspondant à ses goûts cinématographiques ? Grâce à un système de réseaux neuronaux et d'une base de données conséquente de films, le système proposera une liste de suggestions de films personnalisée pour l'utilisateur. Le modèle créé sur une base de données statique pourra alors être affiné en temps réel grâce aux nouvelles opinions exprimées par l’utilisateur et tenir compte de la popularité et avis récemment exprimés dans le flux Twitter.
Avec l’essor de l'intelligence artificielle et des réseaux neuronaux, de nouveaux outils émergent afin de mieux comprendre le comportement et les goûts humains. Nous avons donc décidé de développer un système capable de comprendre les goûts cinématographiques d'un humain de manière bien plus performante que les algorithmes déjà conçu dans ce but là.
 
   
 
==But du document ==
 
==But du document ==
Line 18: Line 17:
   
 
==Objectif du projet ==
 
==Objectif du projet ==
  +
Beaucoup d'algorithmes ont été conçus dans le but de recommander des films en fonction des goûts utilisateurs. Beaucoup d'entre eux sont basés sur des systèmes présupposant que les utilisateurs appréciant un même film, apprécient les mêmes films. La suggestion est ainsi réalisée en fonction des goûts d'autres utilisateurs et non pas en fonction des goûts propres de l'utilisateur.
Le but de ce projet est d'explorer les possibilités du Deep Learning sur des données dont les variables sont hétérogènes et multidimensionnelles, ceci au travers de la suggestion intelligente de films s'adaptant aux goûts de l'utilisateur. Grâce à un système de réseaux neuronaux et d'une base de données conséquente de films (TMDb), le site proposera une liste de suggestions de films personnalisée par utilisateur. Le modèle créé sur une base de données statique pourra alors être affiné en temps réel grâce aux nouvelles opinions exprimées par l’utilisateur.
 
  +
Avec l’essor de l'intelligence artificielle et des réseaux neuronaux, de nouveaux outils émergent afin de mieux modéliser les comportements et les goûts humains. Le but de ce projet est d'utiliser l'apprentissage machine afin d'améliorer les systèmes de recommandation cinématographiques, en les personnalisant totalement en fonction des goûts de l'utilisateur.
   
 
== Définitions, acronymes et abréviations ==
 
== Définitions, acronymes et abréviations ==
Deep Learning : ensemble de méthodes d'apprentissage automatiques visant à modéliser avec un haut niveau d’abstraction un ensemble de données.
+
* Deep Learning : ensemble de méthodes d'apprentissage automatiques visant à modéliser avec un haut niveau d’abstraction un ensemble de données.
  +
* Git : logiciel de gestion de versions décentralisé
   
 
== Références ==
 
== Références ==
  +
* http://air.imag.fr/index.php/SRS
Keras
 
  +
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx
 
  +
* http://en.wikipedia.org/wiki/Software_requirements_specification
Tensor Flow
 
  +
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]
 
En savoir plus sur le DeepLearning
 
 
Aide de Mr Amini : site
 
 
Angular Material : lien
 
   
 
==Portée du produit ==
 
==Portée du produit ==
Le produit est destiné aux utilisateurs désireux de générer automatiquement des recommandations de films en fonction de leurs goûts. L'application sera plus efficace sur des cinéphiles car ils pourront annoter un grand nombre de buts, mais elle a aussi la prétention de pouvoir être utile à un internaute lambda sans condition sur ses connaissances cinématographiques.
+
Le produit est destiné aux utilisateurs désireux d'obtenir automatiquement des recommandations de films en fonction de leurs goûts. L'application sera plus efficace pour des cinéphiles annotant un grand nombre de films, puisque les modèles d'apprentissage sont plus précis lorsque nous possédons un grands nombres de données d'apprentissage. Toutefois, notre produit à la prétention de pouvoir être utilisé par un internaute lambda, sans condition de connaissances cinématographiques.
   
 
=Description générale=
 
=Description générale=
Line 42: Line 38:
 
Le produit doit permettre à l'utilisateur d'obtenir des recommandations intelligentes de films en fonction des films qu'il a appréciés et de ceux qu'il n'a pas appréciés. Cette recommandation doit tenir compte de la proximité des films les uns par rapport aux autres en terme de genre, synopsie, acteurs, réalisateurs, etc. Mais doit également tenir compte de la popularité des films et des tendances actuelles grâce à l'analyse en temps réel des flux Twitter.
 
Le produit doit permettre à l'utilisateur d'obtenir des recommandations intelligentes de films en fonction des films qu'il a appréciés et de ceux qu'il n'a pas appréciés. Cette recommandation doit tenir compte de la proximité des films les uns par rapport aux autres en terme de genre, synopsie, acteurs, réalisateurs, etc. Mais doit également tenir compte de la popularité des films et des tendances actuelles grâce à l'analyse en temps réel des flux Twitter.
   
  +
== Structure de l'application ==
L'apport principal par rapport aux produits concurrents est de réaliser des prédictions personnalisées, grâce à l'utilisation de l'apprentissage automatique et à l'établissement d'un modèle propre à chaque utilisateur. La suggestion devrait donc être plus précise comparée à celles se basant sur la similarité des goûts entre utilisateurs. Deux utilisateurs appréciant un même film, ne sont en effet pas forcés d'apprécier tous les deux un autre film.
 
  +
Le schéma de la structure de l'application est disponible [[Conception - Recommandation intelligente de films| '''ici''']].
   
  +
==Caractéristiques et contraintes utilisateurs==
==Description du produit==
 
  +
* Les utilisateurs doivent posséder une certaine culture cinématographique pour constituer une base d'apprentissage, en fonction des films qu'ils ont préalablement visionnés et de leur avis sur ceux-ci.
  +
* Aucune expertise informatique n'est requise, bien que des notions d'informatiques soient nécessaires, afin que l'utilisateur puisse s'inscrire et naviguer sur le site internet.
  +
* Une connexion internet est également nécessaire pour utiliser le produit.
   
  +
==Contraintes générales du système==
=== Interface système ===
 
   
  +
* Le nombre de données d'entrainement est très variable selon les utilisateurs
=== Interface utilisateur ===
 
  +
* Utilisation de la technologie TensorFlow (Keras)
 
  +
* Limitation du nombre de requête par l'API TDMBSimple, à 40 par seconde
=== Interface hardware ===
 
 
=== Interface software ===
 
 
=== Contraintes mémoires ===
 
 
==Fonctionnalités==
 
Le site est conçu pour un utilisateur et ne sauvegarde que temporairement les choix de celui-ci.
 
 
*Il proposera tout d'abord une liste de films représentative de tous les genres, réalisateurs, acteurs... du cinéma. L'utilisateur pourra pour chaque film, dire s'il aime, n'aime pas ou n'a pas d'opinions sur ce film.
 
*Ensuite, en fonction des réponses de l'utilisateur, le site prédira grâce à un système de Deep Learning les films pouvant potentiellement plaire à l'utilisateur et les affichera avec leurs détails.
 
*L'utilisateur pourra ensuite noter ces nouveaux films s'il le souhaite, et une nouvelle liste de films se générera afin de mieux s'adapter aux goûts de l'utilisateur.
 
 
==Caractéristiques utilisateurs==
 
Les utilisateurs doivent posséder une certaine culture cinématographique pour constituer une base d'apprentissage, en fonction des films qu'ils ont préalablement visionnés et de leur avis sur ceux-ci. En revanche, aucune compétence informatique spécifique n'est requise, de sorte qu'un utilisateur novice puisse utiliser l'application. L'interface doit donc être intuitive et extrêmement simple d'utilisation.
 
 
==Contraintes générales==
 
*Avoir une connexion internet.
 
*Avoir un niveau basique de connaissances informatiques (savoir s'inscrire sur un site internet...).
 
* L'apprentissage machine doit reposer sur TensorFlow (Keras)
 
* Les données en entrées proviennent de l'API TMDB et des API Twitter (API REST 1.1 pour les données historiques ou API Streaming pour les données temps réelles)
 
* l'API TDMBSimple limite le nombre de requêtes à la base de données à 40 par seconde. Peut potentiellement énormément ralentir les services.
 
*Le modèle de prédiction doit être assez fiable pour prédire correctement un nombre conséquent de films pouvant potentiellemennt plaire à l'utilisateur (70%-80%).
 
   
 
==Dépendances==
 
==Dépendances==
Line 79: Line 57:
 
* API STREAMING : https://dev.twitter.com/streaming/overview
 
* API STREAMING : https://dev.twitter.com/streaming/overview
   
  +
=Exigences fonctionelles=
=Spécifités du système=
 
   
 
==Conception de l'interface du système==
 
==Conception de l'interface du système==
  +
Le dossier de conception de l'interface est disponible [[Conception de l'interface - Recommandation intelligente de films|'''ici''']]
   
  +
== Fonctionnalités ==
'''TODO : Mettre des screens du site à la fin du projet'''
 
   
  +
La liste des fonctionnalités est disponible [https://docs.google.com/spreadsheets/d/1LSg5gTqY8aYSFziu34ActGsZ0cR5aUQ3xD48CJBQM3s/edit?usp=sharing '''ici''']
== Fonctionnalités et performances du système ==
 
   
  +
=Exigences de performance=
=== F1 ===
 
   
  +
* '''Facilité de prise en main :''' Le logiciel doit être facile à prendre en main pour un utilisateur non expert et agréable à utiliser pour un utilisateur expert.
'''Fonction''':
 
  +
* '''Temps de réponse :''' Le produit doit avoir un temps de réponses réduit et quasiment constant ou alors avertir l'utilisateur en cas de délais de traitement. Ces délais de traitement doivent être réduit au maximum pour tenir sur le time-out d'attente de réponse à une réquête client.
Récupérer les préférences d'un utilisateur
 
  +
* '''Sécurité et robustesse / Gestion des erreurs :''' Le logiciel est capable d'éviter ou de faire face aux événements indésirables, sans intervention humaine. Le système doit fonctionner continuellement malgré les erreurs, du moment qu'elles ne remettent pas en cause son bon fonctionnement. Une erreur grave doit cependant provoquer l'arrêt du service, pour ne pas compromettre l'intégrité du système.
  +
* '''Précision :''' Le modèle de prédiction doit être assez fiable pour prédire correctement un nombre conséquent de films (précision supérieure à 70%).
   
  +
=Evolutions potentielles du produit=
'''Description''':
 
Le back-end va récupérer tout les films qu'un utilisateur a noté ainsi que leur note (j'aime ou j'aime pas) et va les sauvegarder dans un fichier JSON
 
   
  +
* '''Multi serveurs :''' Pour être pleinement fonctionnel, le produit devra être déployé sur plusieurs serveurs pour résister à la charge.
'''Inputs''':
 
  +
* '''Basculement sur le nouveau modèle :''' Une fois le nombre d'utilisateur suffisant, nous pourrons basculer complètement l'apprentissage sur notre modèle "factorisation machine". Ceci permettra d'avoir un unique modèle pour l'ensemble des utilisateurs que nous ne ré-entrainerons qu'une seule fois par jours. L'intérêt est de réduire le nombre de modèles enregistrés sur le serveur de fichiers ainsi que leur mises à jours, permettant ainsi de mieux résister à l'augmentation de la charge utilisateur. L'autre intérêt majeure est que cela augmentera notre précision de prédiction.
Nom utilisateur
 
  +
* '''Amélioration du nouveau modèle :''' Une fois le modèle mis en place et le nombre de données suffisant, nous pourrons améliorer sa précision en prenant en compte des données utilisateurs ainsi que des données sur les films afin d'affiner notre classification et donc nos prédictions.
 
  +
* '''Distribution de l'apprentissage :''' Avec le nouveau modèle, l'apprentissage machine va devenir très long car le nombre de données d'entrainement va augmenter exponentiellement avec le nombre d'utilisateurs. La distribution de l'algorithme d'apprentissage prendra donc tout son sens pour maintenir un temps de réponse convenable.
'''Source''':
 
  +
* '''Remplacer l'API TMDB :''' Pour supporter la charge nous devons nous abstraire de la limitation de requêtes imposée par TMDB. La méthode la plus simple consisterait à charger le contenu de TMDB sur un de nos serveur et à le mettre à jours tous les jours.
Site internet
 
 
'''Outputs''':
 
Fichier JSON correspondant aux préférences de l'utilisateur concerné
 
 
'''Destination''':
 
F2
 
 
 
=== F2 ===
 
 
'''Fonction''':
 
Prétraiter les données d'une liste de film
 
 
'''Description''':
 
Prétraite les données d'une liste de film afin de les rendrent compréhensible par le modèle d'apprentissage
 
 
'''Inputs''':
 
Liste de films (leur id) chargé depuis le fichier JSON d'un utilisateur
 
 
'''Source''':
 
F1, API TMDBSimple, Glove/Doc2Vec
 
 
'''Outputs''':
 
Matrice de données. Chaque ligne correspond aux informations d'un film
 
 
'''Destination''':
 
F3
 
 
=== F3 ===
 
 
'''Fonction''':
 
Entrainer un modèle d'apprentissage d'un utilisateur
 
 
'''Description''':
 
Crée et entraîne le modèle d'apprentissage qui va comprendre les goûts cinématographique d'un utilisateur
 
 
'''Inputs''':
 
Matrice des données prétraitées correspondant aux films notés par l'utilisateur
 
 
'''Source''':
 
F2, Keras
 
 
'''Outputs''':
 
Matrice de données. Chaque ligne correspond aux informations d'un film.
 
 
'''Destination''':
 
Back-end
 
 
=== F4 ===
 
 
'''Fonction''':
 
Prédiction d'une liste de film que l'utilisateur pourrait potentiellement aimer.
 
 
'''Description''':
 
Le système va soumettre une liste aléatoire ou selectionné de films et il va demander au modèle de prédiction si ces films correspondent au goût d'un utilisateur. Il a besoin de prétraiter ses données.
 
 
'''Inputs''':
 
F3, F2
 
 
'''Source''':
 
F2, Keras
 
 
'''Outputs''':
 
Liste des films pouvant intéresser l'utilisateur.
 
 
'''Destination''':
 
F5
 
 
=== F5 ===
 
 
'''Fonction''':
 
Recommander à l'utilisateur des films
 
 
'''Description''':
 
Le site va soumettre à l'utilisateur une liste de films correspondant à ses goûts cinématographique
 
 
'''Inputs''':
 
Back-end, il faut que l'utilisateur ai renseigné ses goûts.
 
 
'''Source''':
 
F4
 
 
'''Outputs''':
 
Liste des films pouvant intéresser l'utilisateur.
 
 
'''Destination''':
 
Interface utilisateur
 
 
=Evolutions potentielles du produit=
 
*Multi utilisateurs : Une session de préférence par utilisateur. De plus, les goûts des utilisateurs seront sauvegardés afin qu'à la prochaine connexion, le modèle de Deep Learning soit prêt à prédire des films correspondant au goût de l'utilisateur concerné.
 
*Prédire les films "tendance" du moment en priorité. Le site affichera en priorité les films les plus populaire du moment et correspondant aux goûts de *l'utilisateur. Pour cela, il scannera les tweets de Tweeter en temps réel et cherchera une correspondance entre les tweets de films populaires et ceux prédis par le modèle pour l'utilisateur concerné.
 
*Utiliser des systèmes distribués afin d'améliorer les performances d'apprentissage du modèle de Deep Learning et de l'analyse en temps réel de Tweeter.
 
   
 
=Appendices=
 
=Appendices=
   
  +
==Bibliographie==
==Structure du SRS==
 
The document is based on template of the Software Requirements Specification (SRS) inspired of the IEEE/ANSI 830-1998 Standard.
 
 
'''References:'''
 
* http://air.imag.fr/index.php/SRS
 
* http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx
 
* http://en.wikipedia.org/wiki/Software_requirements_specification
 
* [http://www.cse.msu.edu/~chengb/RE-491/Papers/IEEE-SRS-practice.pdf IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998]
 
 
=Bibliographie=
 
 
Articles sur les systèmes de recommandation :
 
 
*spotify - http://benanne.github.io/2014/08/05/spotify-cnns.html#contentbased
 
*youtube - https://static.googleusercontent.com/media/research.google.com/fr//pubs/archive/45530.pdf
 
*https://www.atala.org/IMG/pdf/1-Poirier-TAL51-3.pdf
 
 
Explication des termes deep learning :
 
 
*https://devblogs.nvidia.com/parallelforall/deep-learning-nutshell-core-concepts/
 
   
  +
=== Articles ===
Exemple simple pour prendre en main Keras :
 
   
  +
===== Systèmes de recommandation=====
*http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/
 
  +
* [http://benanne.github.io/2014/08/05/spotify-cnns.html#contentbased'''Recommending music on Spotify with deep learning''']
*http://machinelearningmastery.com/introduction-python-deep-learning-library-keras/
 
  +
* [https://static.googleusercontent.com/media/research.google.com/fr//pubs/archive/45530.pdf'''Deep Neural Networks for YouTube Recommendations''']
*http://tryhera.com/
 
  +
* [https://www.atala.org/IMG/pdf/1-Poirier-TAL51-3.pdf'''De la classification d’opinions à la recommandation''']
  +
* [http://blog.richardweiss.org/2016/09/25/movie-embeddings.html'''Recommending movies with deep learning''']
  +
* [https://tel.archives-ouvertes.fr/tel-01009570/document'''Factorisation matricielle''']
   
  +
===== Articles sur l'analyse de sentiments=====
API TMDB :
 
  +
* [http://imu.universite-lyon.fr/wp-content/uploads/2015/07/me%CC%81moire-Ahmed-REMADNA.pdf'''Classification des posts sur des réseaux sociaux''']
  +
* [http://www.volodenkov.com/post/keras-lstm-sentiment-p1/'''Sentiment analysis with RNN in Keras''']
  +
* [http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/'''Implementing a CNN for Text Classification in TensorFlow''']
   
  +
=== Documentations ===
*https://developers.themoviedb.org/3/people
 
   
  +
===== Keras =====
Tuto Django + AngularJS :
 
  +
* [http://machinelearningmastery.com/introduction-python-deep-learning-library-keras/'''Introduction to Python Deep Learning with Keras''']
  +
* [http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/'''Develop Your First Neural Network in Python With Keras Step-By-Step''']
   
  +
===== API TMDB =====
*https://thinkster.io/django-angularjs-tutorial#rendering-post-objects
 
  +
* [https://developers.themoviedb.org/3/people'''The movie data base for developers''']
   
  +
===== Django & AngularJS =====
DOC2VEC :
 
  +
* [https://thinkster.io/django-angularjs-tutorial#rendering-post-objects'''Django angularJS tutorial''']
  +
* [https://material.angularjs.org/latest/'''Angular Material''']
   
  +
===== DOC2VEC =====
*https://github.com/nisarg64/Sentiment-Analysis-Word2Vec
 
*https://translate.google.fr/translate?hl=fr&sl=en&u=https://rare-technologies.com/doc2vec-tutorial/&prev=search
+
* [https://rare-technologies.com/doc2vec-tutorial/'''Doc2vec tutorial''']
*https://translate.google.fr/translate?hl=fr&sl=en&u=http://linanqiu.github.io/2015/10/07/word2vec-sentiment/&prev=search
+
* [http://linanqiu.github.io/2015/10/07/word2vec-sentiment/'''Sentiment Analysis Using Doc2Vec''']
   
  +
===== Api python - Flask =====
Embedding layers :
 
  +
* [http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data'''Flask quickstart''']
   
  +
===== Grid'5000 =====
*http://stats.stackexchange.com/questions/182775/what-is-an-embedding-layer-in-a-neural-network
 
  +
* [https://www.grid5000.fr/mediawiki/index.php/Grid5000:Get_an_account'''Grid'5000 account''']
*https://github.com/ririw/ririw.github.io/blob/master/assets/Recommending%20movies.ipynb
 
*http://blog.richardweiss.org/2016/09/25/movie-embeddings.html
 
   
  +
=== Codes sources ===
Python API - Flask :
 
  +
* [https://github.com/ririw/ririw.github.io/blob/master/assets/Recommending%20movies.ipynb'''Recommending movies''']
  +
* [https://github.com/nisarg64/Sentiment-Analysis-Word2Vec'''Sentiment-Analysis-Word2Vec''']
   
  +
=== Material Design ===
*http://flask.pocoo.org/docs/0.12/quickstart/#accessing-request-data
 
   
  +
* [https://www.materialpalette.com/teal/amber'''Choix de la charte graphique''']
Grid'5000 :
 
  +
* [https://material.io/guidelines/'''Guidelines''']
*https://www.grid5000.fr/mediawiki/index.php/Grid5000:Get_an_account
 

Latest revision as of 15:22, 15 March 2017

Voici la fiche SRS du projet Recommandation intelligente de films.

Page d'accueil du projet

Équipe

  • Rachex Coralie (Chef de projet - Scrum Master)
  • Niogret Edwin
  • Hattinguais Julian
  • Navarro Elsa
  • Dunand Quentin

Introduction

Qui n'a pas rêvé d'avoir une liste de suggestion de films correspondant à ses goûts cinématographiques ? Grâce à un système de réseaux neuronaux et d'une base de données conséquente de films, le système proposera une liste de suggestions de films personnalisée pour l'utilisateur. Le modèle créé sur une base de données statique pourra alors être affiné en temps réel grâce aux nouvelles opinions exprimées par l’utilisateur et tenir compte de la popularité et avis récemment exprimés dans le flux Twitter.

But du document

Le but de ce document SRS est de fournir une vue d'ensemble détaillée de notre système logiciel, ses paramètres et buts. Ce document décrit le public cible du projet et son interface utilisateur, ainsi que les spécifications du logiciel. Ce document est destiné tant aux utilisateurs qu'aux développeurs du logiciel.

Objectif du projet

Beaucoup d'algorithmes ont été conçus dans le but de recommander des films en fonction des goûts utilisateurs. Beaucoup d'entre eux sont basés sur des systèmes présupposant que les utilisateurs appréciant un même film, apprécient les mêmes films. La suggestion est ainsi réalisée en fonction des goûts d'autres utilisateurs et non pas en fonction des goûts propres de l'utilisateur. Avec l’essor de l'intelligence artificielle et des réseaux neuronaux, de nouveaux outils émergent afin de mieux modéliser les comportements et les goûts humains. Le but de ce projet est d'utiliser l'apprentissage machine afin d'améliorer les systèmes de recommandation cinématographiques, en les personnalisant totalement en fonction des goûts de l'utilisateur.

Définitions, acronymes et abréviations

  • Deep Learning : ensemble de méthodes d'apprentissage automatiques visant à modéliser avec un haut niveau d’abstraction un ensemble de données.
  • Git : logiciel de gestion de versions décentralisé

Références

Portée du produit

Le produit est destiné aux utilisateurs désireux d'obtenir automatiquement des recommandations de films en fonction de leurs goûts. L'application sera plus efficace pour des cinéphiles annotant un grand nombre de films, puisque les modèles d'apprentissage sont plus précis lorsque nous possédons un grands nombres de données d'apprentissage. Toutefois, notre produit à la prétention de pouvoir être utilisé par un internaute lambda, sans condition de connaissances cinématographiques.

Description générale

Le but du produit

Le produit doit permettre à l'utilisateur d'obtenir des recommandations intelligentes de films en fonction des films qu'il a appréciés et de ceux qu'il n'a pas appréciés. Cette recommandation doit tenir compte de la proximité des films les uns par rapport aux autres en terme de genre, synopsie, acteurs, réalisateurs, etc. Mais doit également tenir compte de la popularité des films et des tendances actuelles grâce à l'analyse en temps réel des flux Twitter.

Structure de l'application

Le schéma de la structure de l'application est disponible ici.

Caractéristiques et contraintes utilisateurs

  • Les utilisateurs doivent posséder une certaine culture cinématographique pour constituer une base d'apprentissage, en fonction des films qu'ils ont préalablement visionnés et de leur avis sur ceux-ci.
  • Aucune expertise informatique n'est requise, bien que des notions d'informatiques soient nécessaires, afin que l'utilisateur puisse s'inscrire et naviguer sur le site internet.
  • Une connexion internet est également nécessaire pour utiliser le produit.

Contraintes générales du système

  • Le nombre de données d'entrainement est très variable selon les utilisateurs
  • Utilisation de la technologie TensorFlow (Keras)
  • Limitation du nombre de requête par l'API TDMBSimple, à 40 par seconde

Dépendances

Exigences fonctionelles

Conception de l'interface du système

Le dossier de conception de l'interface est disponible ici

Fonctionnalités

La liste des fonctionnalités est disponible ici

Exigences de performance

  • Facilité de prise en main : Le logiciel doit être facile à prendre en main pour un utilisateur non expert et agréable à utiliser pour un utilisateur expert.
  • Temps de réponse : Le produit doit avoir un temps de réponses réduit et quasiment constant ou alors avertir l'utilisateur en cas de délais de traitement. Ces délais de traitement doivent être réduit au maximum pour tenir sur le time-out d'attente de réponse à une réquête client.
  • Sécurité et robustesse / Gestion des erreurs : Le logiciel est capable d'éviter ou de faire face aux événements indésirables, sans intervention humaine. Le système doit fonctionner continuellement malgré les erreurs, du moment qu'elles ne remettent pas en cause son bon fonctionnement. Une erreur grave doit cependant provoquer l'arrêt du service, pour ne pas compromettre l'intégrité du système.
  • Précision : Le modèle de prédiction doit être assez fiable pour prédire correctement un nombre conséquent de films (précision supérieure à 70%).

Evolutions potentielles du produit

  • Multi serveurs : Pour être pleinement fonctionnel, le produit devra être déployé sur plusieurs serveurs pour résister à la charge.
  • Basculement sur le nouveau modèle : Une fois le nombre d'utilisateur suffisant, nous pourrons basculer complètement l'apprentissage sur notre modèle "factorisation machine". Ceci permettra d'avoir un unique modèle pour l'ensemble des utilisateurs que nous ne ré-entrainerons qu'une seule fois par jours. L'intérêt est de réduire le nombre de modèles enregistrés sur le serveur de fichiers ainsi que leur mises à jours, permettant ainsi de mieux résister à l'augmentation de la charge utilisateur. L'autre intérêt majeure est que cela augmentera notre précision de prédiction.
  • Amélioration du nouveau modèle : Une fois le modèle mis en place et le nombre de données suffisant, nous pourrons améliorer sa précision en prenant en compte des données utilisateurs ainsi que des données sur les films afin d'affiner notre classification et donc nos prédictions.
  • Distribution de l'apprentissage : Avec le nouveau modèle, l'apprentissage machine va devenir très long car le nombre de données d'entrainement va augmenter exponentiellement avec le nombre d'utilisateurs. La distribution de l'algorithme d'apprentissage prendra donc tout son sens pour maintenir un temps de réponse convenable.
  • Remplacer l'API TMDB : Pour supporter la charge nous devons nous abstraire de la limitation de requêtes imposée par TMDB. La méthode la plus simple consisterait à charger le contenu de TMDB sur un de nos serveur et à le mettre à jours tous les jours.

Appendices

Bibliographie

Articles

Systèmes de recommandation
Articles sur l'analyse de sentiments

Documentations

Keras
API TMDB
Django & AngularJS
DOC2VEC
Api python - Flask
Grid'5000

Codes sources

Material Design