Albin31 / Recommender_system

Project of recommender system based on NLP basics, matrix fatorization, simple recommendation, which can be used with dokerfile.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Atelier de l'IA

Julien Salvador, Paul Brunet, Albin Cintas, Baptiste Aussel

Commande pour tester le projet

Prérequis

Cloner le projet :

git clone https://github.com/Walterseal/projet_MODIA_gr4.git

Procédure effectuée sous ubuntu 20.04 Pour faire tourner ce projet vous devez avoir docker et python d'installés sur votre machine Pour vérifier l'installation de python

python --version
sudo docker --version

Pour installer python 3.7

sudo apt install python3.7.7

Les librairies python nécéssaires sont disponibles dans le fichier requirement.txt

On your local machine

Pour executer le Neural Collaborative Filtering (se placer dans le répertoire du projet)

python main.py test_script.csv

Pour lancer gradio

python recommender_app.py

Pour changer le model sklearn il est possible de modifier model_name dans recommender_app.py afin de charger d'autre réseau sous fichier pickle Il faut toutefois executer le notebook Sentiment_analysis afin de créer le model de la régression logistique et de l'enregistrer, une fois cela fais on peut le récupérer !!! Attention cela modifiera aussi le model pour le dockerfile en cas de création d'une image !!!

Docker container

Si vs code et l'extension remote container sont installés vous pouvez utiliser vs code pour rentrer dans le container et faire tourner les fichiers. Pour lancer gradio et tout l'environnement sous docker, se placer dans le répertoire du projet :

source deployment.sh

L'application gradio sur un modele de randomForest sera directement disponible en localhost:7860

Pour rentrer dans le container

export GRADIO_DOCKER_ID=$(sudo docker ps -aqf "ancestor=container_gradio")
sudo docker exec -it $GRADIO_DOCKER_ID /bin/bash

Vous aurez aussi besoin des extensions notebook et python en remote pour executer les notebooks et les fichiers.py Pour executer le Neural Collaborative Filtering (se placer dans le répertoire du projet)

python main.py test_script.csv

En modifiant , via vs code et son extension, le server_port vous pouvez relancer un gradio avec un autre model sur un autre port. Il faut toutefois executer le notebook Sentiment_analysis afin de créer le model de la régression logistique et de l'enregistrer sous forme de fichier, une fois cela fais on peut le récupérer

python recommender_app.py

Il est aussi possible d'éxecuter le fichier depuis vs code

Projet MODIA 2022

Dans ce projet, vous allez travailler sur des données1issues du site Food.com, un célèbre site de recettes de cuisine.
Les données, disponibles ici, contiennent des informations sur des recettes de cuisines ainsi que des interactions de plusieurs utilisateurs avec les recettes.

Consignes:

Les parties 1, 2 et 3 sont à réaliser dans un même notebook.

Partie 1: Recommandations simples:

Dans un notebook

  • Présentez plusieurs stratégies de recommandation de recettes:

    • Par popularité
    • Selon les étapes de la recette (colonne steps)
    • Selon la description de la recette

    Pour chacune de ces méthodes montrez quelques exemples des recommandation obtenues.

Partie 2: Analyse de sentiments:

Dans un notebook

  • À partir de la note donnée par les utilisateurs definissez une nouvelle variable sur le sentiment positif ou négatif d'un utilisateur vis-à-vis d'une recette. Par exemple, toutes les notes inférieures à 3 sont négatives et celles supérieurs sont positives.
    Faites attention aux notes à 0 elles ne correspondent pas forcément à un sentiment négatif ou positif essayez d'en regarder quelques unes et décider de toutes les supprimer si elles posent problème.
  • En vous inspirant des parties NLP des TP Recommender_systems et du TP Interpretability in Machine Learning, entrainez un modèle à prédire si un utilisateur a aimé ou non une recette à partir de son commentaire et utilisez la méthode LIME pour visualiser les mots permettant de justifier la décision de votre modèle.
    Montrez quelques exemples de prédiction et de visualisations des mots importants.
    Enregistrez votre modèle dans un fichier pickle.

Partie 3: Neural Collaborative Filtering:

  • Reprenez la classe NCF (Neural Collaborative Filtering )présente dans le TP sur les systèmes de recommendations pour entrainer un modèle de Neural Collaborative Filtering à prédire les notes d'un utilisateur.
  • Entrainez votre réseau sur les données train et testez le sur les données de test (calculez la Mean Absolute Error sur les données de test).
  • Enregistrez les poids de votre réseau dans un fichier weight.pth

Partie 4 Scripts et Github:

  • Dans fichier model.py, redefinissez la classe NCF (Neural Collaborative Filtering )présente dans le TP sur les systèmes de recommandations.

  • Dans un fichier main.py, implémentez un code permettant de prédire les notes d'un utilisateur.
    Ce programme ne fera pas d'entrainement mais récupérera les poids su réseau que vous aurez entraîné dans votre notebook. Ce fichier sera exécuté comme un script et devra:

    • Récupérer les poids du réseau à partir d'un chemin donné en argument du job.
    • Récupérer le chemin d'un fichier de test contenant 10 interactions (test_script.csv) en arguments de la commande qui exécutera le script
    • Afficher les prédictions pour les 10 interactions du dataset de test.
  • Dans un fichier recommender_app.py , utilisez gradio pour créer une application permettant de prédire si un commentaire, entré par l'utilisateur, est positif ou négatif (utilisez le composant textbox).

  • Bonus: créez un dockerfile permettant de lancer le script ou l'application gradio depuis n'importe quelle machine.

Pour le livrable:

  • Faites un fork de ce repo Git.
  • Modifiez le pour qu'il contienne le notebook des parties 1,2 et 3.
  • Rajoutez les fichiers model.py, main.py et recommender_app.py dans le repo Git.
  • Modifiez le readme pour qu'il affiche vos noms et la commande permettant de lancer correctement le script main.py et l'application (ne mettez pas les fichiers de données dans le repo github!)
  • Faites moi un pull request sur GitHub et envoyez moi un mail à david.bertoin@irt-saintexupery.com pour que je vérifie que tout est OK.
  • Bonus: Si vous avez fait le dockerfile, rajoutez dans le readme les commandes à exécuter pour le tester.

1: Les données ont été récoltées pour l'article suivant:
Generating Personalized Recipes from Historical User Preferences Bodhisattwa Prasad Majumder*, Shuyang Li*, Jianmo Ni, Julian McAuley EMNLP, 2019

About

Project of recommender system based on NLP basics, matrix fatorization, simple recommendation, which can be used with dokerfile.


Languages

Language:Jupyter Notebook 99.9%Language:Python 0.1%Language:Dockerfile 0.0%Language:Shell 0.0%