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.
Les parties 1, 2 et 3 sont à réaliser dans un même notebook.
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.
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.
- 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
-
Dans fichier
model.py
, redefinissez la classeNCF
(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
etrecommender_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 à [email protected] 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