Intelligence artificielle

Construire un système de recommandation alimentaire

Construire un système de recommandation alimentaire


Il existe de nombreux facteurs connus qui influencent la santé d'un individu. Exercice physique, sommeil, nutrition, hérédité, pollution, entre autres facteurs externes [1]. La nutrition étant l'un des plus grands facteurs modifiables de nos vies, il n'est pas surprenant que de petits changements puissent induire des résultats significatifs [2].

Ayant notre alimentation des liens culturels forts, il est possible d'identifier dans le monde un grand nombre de cuisines. Les ingrédients les plus courants dans chacun sont étroitement liés aux caractéristiques de la région, telles que le climat. Cela joue une grande influence sur la disponibilité de chacun des composants présents dans les recettes locales [3].

Certaines molécules sont connues pour avoir un effet positif sur la santé, notamment dans la lutte contre le cancer. Être capable d'identifier quels ingrédients contiennent les concentrations les plus élevées peut nous aider à traiter et à prévenir la maladie [4]. De plus, en incluant ces ingrédients dans des repas savoureux et abordables, il peut favoriser un changement dans les habitudes nutritionnelles de la population. Dans un monde où la consommation de fast-food augmente, il est clair qu'en plus des deux points précédents, la vitesse de préparation est également un facteur important [5].

Avec de plus en plus de données disponibles en ligne, que ce soit à partir d'études de recherche ou d'applications Web, c'est l'occasion de les analyser et de créer de nouveaux systèmes de recommandation alimentaire qui prennent en compte non seulement des facteurs comme les propriétés anticancéreuses, mais aussi la saveur, le contenu nutritionnel et les interactions négatives. avec des médicaments. Cela permettrait à l'utilisateur de prendre de meilleures décisions lors de l'achat ou de la préparation de son prochain repas [5].

Cancer

La maladie du XXIe siècle (figure 1). Appartenant à un spectre plus large appelé tumeurs, les cancers sont un sous-type où se produit une division cellulaire incontrôlée et qui peut se propager à différents tissus. En opposition, les tumeurs bénignes sont confinées à un certain organe. Existant une corrélation étroite entre le vieillissement et la perte de fonction de certaines des voies de régulation, à mesure que la durée de vie augmente, l'incidence de la maladie suit la même tendance [6].

Il est connu que la nutrition peut jouer un rôle important dans la prévention et le traitement de cette maladie [4]. De cette façon, il serait avantageux de maximiser le nombre de composés anticancéreux dans les aliments et de minimiser ceux connus pour interagir négativement avec les médicaments anticancéreux.

Figure 1 Principales causes de décès dans le monde, 2016. Le cancer est le deuxième de la liste. Adapté de [7].

Traitement du langage naturel

Bien que les ensembles de données en ligne et les API (Application Programming Interface) contiennent des informations structurées qui peuvent être facilement récupérées, la plupart des sources en ligne n'ont pas une telle structure organisée. Par conséquent, des algorithmes capables non seulement d'extraire des données, mais aussi d'obtenir leur contexte sont nécessaires [8]. Cette section se concentre sur les incorporations de mots et la modélisation de sujets.

Il existe plusieurs façons de réaliser une représentation vectorielle des mots. Une possibilité consiste à les aligner tous et à représenter chacun comme un vecteur de 0 et le nombre 1 à la position correspondante de l'alignement. Ensuite, les dimensions de l'espace vectoriel seraient égales à la taille du vocabulaire. Bien que cette approche soit faisable pour les petits vocabulaires, elle n'est pas efficace en termes de calcul. En variante, il existe un mécanisme d’incorporation de mots différent qui permet la représentation de grands vocabulaires à l’aide de vecteurs de faible dimension en tenant compte du contexte du mot dans la phrase.

Développé par une équipe de chercheurs dirigée par Tomas Mikolov de Google, Word2Vec est une catégorie de modèles spécifiques de réseaux neuronaux peu profonds à 2 couches qui produit des incorporations de mots [9]. Il prend en entrée un corpus de texte et s'étend sur un espace vectoriel, où chaque mot est mappé en un vecteur. Les mots qui apparaissent le plus souvent dans des contextes similaires sont mappés en vecteurs séparés par des distances euclidiennes plus courtes.

Word2Vec n'est pas le seul outil de modélisation de sujet. Doc2Vec et FastText sont capables d'encoder des documents entiers ou de regarder spécifiquement la structure morphologique de chaque mot, respectivement [10].

Word2Vec a été choisi pour encoder les ingrédients, à partir des jeux de données utilisés tout au long de ce projet, comme vecteurs. Cela a permis de saisir leurs similitudes de leur contexte dans les recettes.

Algorithme de cuisson inverse

Cet algorithme de récupération de recette a été développé par Facebook AI Research et il est capable de prédire les ingrédients, les instructions de cuisson et le titre d'une recette, directement à partir d'une image [11].

Dans le passé, les algorithmes utilisaient des systèmes simples de récupération de recettes basés sur des similitudes d'images dans certains espaces d'intégration. Cette approche dépend fortement de la qualité de l'incorporation apprise, de la taille de l'ensemble de données et de la variabilité. Par conséquent, ces approches échouent lorsqu'il n'y a aucune correspondance entre l'image d'entrée et l'ensemble de données statique [11].

L'algorithme de cuisson inverse au lieu de récupérer une recette directement à partir d'une image, propose un pipeline avec une étape intermédiaire où l'ensemble des ingrédients est d'abord obtenu. Cela permet la génération des instructions non seulement en tenant compte de l'image, mais aussi des ingrédients (Figure 2) [11].

Figure 2 Modèle de génération de recette de cuisson inverse avec les multiples encodeurs et décodeurs, générant les instructions de cuisson [11].

L'une des principales réalisations de cette méthode a été de présenter une précision supérieure à celle d'un système de récupération de recettes de base [12] et humain moyen [11], tout en essayant de prédire les ingrédients d'une image.

L'algorithme de cuisson inverse a été inclus dans le système de recommandation alimentaire développé dans ce projet. Sur la base des ingrédients prévus dans l'application Web, plusieurs suggestions sont fournies à l'utilisateur, telles que: différentes combinaisons d'ingrédients.

Réduction de la dimensionnalité

Généralement, la réduction de dimensionnalité vise à préserver autant d'informations que possible des vecteurs de dimension supérieure. Analyse en composantes principales (ACP) [13] et entités voisines stochastiques distribuées en T (T-SNE) [14] sont deux des approches les plus couramment utilisées. Le premier est généralement défini comme ayant une approche mathématique du problème et le second une approche statistique.

Le principal objectif de l'ACP réside dans la préservation des composants vectoriels avec une plus grande variabilité entre les données, tout en éliminant ceux qui ajoutent moins d'informations. Cette décomposition peut être réalisée de deux manières différentes. L'une consiste à décomposer la matrice de covariance des données dans ses valeurs propres. La seconde consiste à effectuer une décomposition en valeur unique de la matrice de données, après avoir généralement normalisé les données initiales [13].

D'un autre côté, T-SNE convertit la similitude entre les points en probabilités conjointes. Et minimise la divergence de Kullback-Leibler entre ces probabilités sur l'incorporation à basse dimension et les données à haute dimension. Cette approche a une fonction de coût qui n'est pas convexe, par conséquent, différentes initialisations peuvent produire des vecteurs réduits de dimensionnalité différente [14].

La capacité de visualiser des données de grande dimension est cruciale, en particulier dans le cas où l'on souhaite effectuer un clustering. Selon l'application, des algorithmes de recherche de communauté peuvent être entrés avec différents paramètres de seuil qui influencent la taille et la connectivité des clusters. Être capable de visualiser comment les données sont distribuées permet d'utiliser le raisonnement humain tout en choisissant ces valeurs.

Son exécution rapide et ses résultats fiables ont fait de PCA le premier choix.

Recherche de communauté

Il existe de nombreux algorithmes de clustering optimisant différentes fonctions de coût.

L'algorithme de Louvain partitionne le réseau de manière itérative, optimisant la modularité [15]. Sa valeur est proportionnelle au nombre de connexions entre les nœuds à l'intérieur du même cluster et diminue lorsque le nombre de connexions inter-cluster commence à augmenter. Mathématiquement, la modularité est définie:

Aij est l'entrée de la matrice d'adjacence représentant le poids des nœuds de connexion de bord je et j, ki = ∑j Aij est le degré de nœud je, ci est la communauté à laquelle il appartient, fonction 𝛿 𝛿 (u, v) vaut 1 si u = v et 0 sinon. m = 1/2 * ∑ij Aij est la somme des poids de toutes les arêtes du graphique [15].

Entre les étapes d'itération, la valeur à optimiser est sa variation qui rend les calculs plus efficaces [15]:

Tandis que ki, in et ∑tot doivent être calculés pour chaque communauté d'essai, ki / 2m est spécifique du nœud en cours d'analyse. De cette façon, cette dernière expression n'est recalculée que lorsqu'un autre nœud est pris en compte tout en optimisant la modularité [15].

L'algorithme Infomap tente de réduire la longueur de description du réseau, en réduisant un flux imaginaire qui se propage de manière aléatoire à l'intérieur du réseau entre les clusters identifiés [16]. Mathématiquement, il peut être exprimé:

Étant q = ∑ (m) (j = 1) qj la somme de la probabilité de sortie pour chaque communauté, H (Q) la longueur moyenne du code du mouvement entre les communautés, p (i) (o) = qi + ∑ (m) (β∈i) pβ la probabilité de séjour pour une marche aléatoire dans une communauté c et H (Pm) la longueur moyenne de code d'un livre de codes de module m[16].

Une troisième approche également largement utilisée est appelée clustering spectral [17]. Il présente plusieurs avantages par rapport aux deux précédents. Le plus important est qu'il montre une plus grande précision de détection des grappes qui sont très non convexes ou lorsque la mesure du centre et la propagation de la grappe ne sont pas une description appropriée de la communauté prédite. De plus, contrairement aux 2 autres, son implémentation Python permet à l'utilisateur de saisir le nombre de clusters souhaités présents dans les données. Ce fut le premier choix pour effectuer un clustering tout au long du projet.

Visualisation de données

Il existe plusieurs outils disponibles pour la visualisation des données en Python. À savoir, Matplotlib [18], Complotly [19], Seaborn [20] et les pandas [21]. Certains sont considérés comme plus efficaces pour représenter de plus grandes quantités de données, d'autres sont connus pour être très polyvalents et permettre à l'utilisateur de visualiser facilement les données de plusieurs façons. D'autres sont intégrés aux conteneurs de données existants et finissent par faciliter sa visualisation. La compatibilité avec les plates-formes les plus récentes pour analyser et visualiser des données, telles que Jupyter Notebook ou JupyterLab est également un critère important.

Matplotlib permet la génération d'un large éventail de catégories, telles que: nuages ​​de points, graphiques d'erreur, graphiques à barres, spectres de puissance, histogrammes, entre autres. Bien qu'ils soient statiques et lorsque le nombre de nœuds dans le cas d'un nuage de points dépasse les dizaines de milliers, il n'est plus en mesure de les représenter [18].

Plotly se distingue de Matplotlib pour permettre une représentation dynamique des points de données avec leurs étiquettes. Il évolue également mieux lorsque la magnitude du nombre de points dépasse les dizaines de milliers [19].

Seaborn est une bibliothèque Python construite sur le dessus de Matplotlib. Il est puissant comme ce dernier pour représenter un grand nombre de points de données et permet à l'utilisateur d'explorer plus facilement de nouvelles options de visualisation [20].

En raison des points soulignés précédemment et du fait d'être tous compatibles avec JupyterLab (dans le cas de Plotly, après l'installation de l'extension respective) ces 3 modules ont été utilisés tout au long du projet.

Systèmes de recommandation des aliments

Bien que manger soit un besoin fondamental, les gens ne savent parfois pas quoi choisir. En effet, lors de l'achat de nourriture ou de la commande en ligne, le nombre d'options est trop important pour pouvoir toutes les prendre en compte.

Les humains ont des besoins nutritionnels différents et perçoivent la saveur de différentes manières. Pour cette raison, la seule option pour répondre à leurs besoins est de connaître la personne. Que la recommandation soit pour un simple utilisateur affamé, un passionné de cuisine, un problème de santé, une personne à la diète ou une personne qui cherche à améliorer son état de santé, cela influencera le choix final [5].

De plus, le produit recommandé a également un impact important: une simple substitution d'ingrédients, une recette, un repas, un restaurant ou même une cuisine. Le moment de la recommandation: en temps réel ou sous forme de newsletter. Et il peut prendre en considération l'emplacement de l'utilisateur et suggérer les endroits les plus proches. La plate-forme où les suggestions sont faites. Selon la façon dont les recommandations sont générées (filtrage collaboratif, basé sur le contenu, regroupement de graphiques ou incorporations), elles peuvent nécessiter des fonctionnalités différentes de l'appareil. De cette façon, ils peuvent être partagés dans un site Web, une application ou sous forme de texte brut (SMS). La présence de composés allergènes ou intolérants (comme les noix et le lait), les marques, le temps requis pour la cuisson, bien sûr, les cuisines, la présence de dérivés d'origine animale, le type de plat, les ingrédients, le coût, le nombre d'ingrédients, le temps de préparation, le goût ou les techniques requis pour cuisiner [5].

Un facteur important lors de la construction de ces systèmes est la source des données. Il peut s'agir de commandes passées, de la réaction de l'utilisateur à certains messages (j'aime ou n'aime pas), des notes attribuées par la communauté, des images ou des vidéos regardées ou d'autres actions liées aux réseaux sociaux, y compris les publications, les partages, les recherches, les commentaires ou les abonnés. [5].

Le succès d'un système de recommandation d'aliments (figure 3) est corrélé avec sa capacité à tenir compte des préférences des utilisateurs, à maximiser le nombre de composés sains et à minimiser ceux qui sont malsains dans les aliments.

Le long de ce projet, il a été exploré différentes approches pour générer des recommandations alimentaires basées sur des données accessibles au public. De grands ensembles de données de recettes (Recipe1M + et Kaggle and Nature (K&N)) contenant des informations sur les ingrédients présents, les titres, les URLs et les cuisines ont été analysés pour fournir les recommandations les plus précises.

figure 3 Un exemple de système de recommandation alimentaire [5].
Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer