Contexte et actions

Important

À compter du 20 septembre 2023, vous ne pourrez pas créer de ressources Personalizer. Le service Personalizer est mis hors service le 1er octobre 2026.

Personalizer fonctionne en apprenant ce que votre application doit afficher aux utilisateurs dans un contexte donné. Le contexte et les actions sont les deux informations les plus importantes à transmettre à Personalizer. Le contexte représente les informations dont vous disposez sur l’utilisateur actuel ou sur l’état de votre système. Les actions correspondent aux options à choisir.

Context

Les informations pour le contexte varient selon chaque application et chaque cas d’utilisation, mais elles peuvent en général inclure des informations comme celles-ci :

  • Informations démographiques et de profil sur votre utilisateur.
  • Informations extraites à partir des en-têtes HTTP, comme l’agent utilisateur, ou dérivées des informations HTTP, comme les recherches géographiques inverses basées sur les adresses IP.
  • Informations sur la date/heure actuelle, comme le jour de la semaine, weekend ou pas, matin ou après-midi, période de vacances ou pas, etc.
  • Informations extraites d’applications mobiles, comme l’emplacement, le déplacement ou le niveau de la batterie.
  • Agrégats de l’historique du comportement des utilisateurs, comme les genres de films qu’un utilisateur a le plus regardés.
  • Informations sur l’état du système.

Votre application est responsable du chargement des informations sur le contexte à partir des bases de données, des capteurs et des systèmes appropriés dont vous disposez. Si vos informations sur le contexte ne changent pas, vous pouvez ajouter de la logique dans votre application pour mettre en cache ces informations, avant de les envoyer à l’API de classement.

Actions

Les actions représentent une liste d’options.

N’envoyez pas plus de 50 actions lors du classement des actions par ordre de priorité. Il peut s’agir chaque fois des mêmes 50 actions, ou elles peuvent changer. Par exemple, si vous avez un catalogue de produits avec 10 000 articles pour une application d’e-commerce, vous pouvez utiliser un moteur de recommandation ou de filtrage pour déterminer les 40 premiers articles qu’un client peut aimer, et utiliser Personalizer pour trouver celui qui génère la plus grande récompense pour le contexte actuel.

Exemples d’actions

Les actions que vous envoyez à l’API de classement dépendent de ce que vous essayez de personnaliser.

Voici quelques exemples :

Objectif Action
Personnaliser le choix de l’article qui est mis en évidence sur un site web d’actualités. Chaque action est un article d’actualités potentiel.
Optimiser le positionnement des publicités sur un site web. Chaque action constitue une disposition ou des règles pour créer une présentation pour les publicités (par exemple, en haut, à droite, de petites images, de grandes images).
Afficher un classement personnalisé d’éléments recommandés sur un site web de vente en ligne. Chaque action est un produit spécifique.
Suggérer des éléments d’interface utilisateur, comme des filtres à appliquer à une photo spécifique. Chaque action peut être un filtre différent.
Choisir la réponse d’un chatbot pour clarifier l’intention de l’utilisateur ou suggérer une action. Chaque action est une possibilité d’interprétation de la réponse.
Choisir ce qu’il faut montrer en haut d’une liste des résultats d’une recherche Chaque action est un des premiers résultats de la recherche.

Charger des actions à partir de l’application cliente

Les caractéristiques provenant d’actions peuvent en général provenir de systèmes de gestion de contenu, de catalogues et de systèmes de recommandation. Votre application est responsable du chargement des informations sur les actions à partir des bases de données et des systèmes appropriés dont vous disposez. Si vos actions ne changent pas ou que les charger chaque fois a un impact non nécessaire sur les performances, vous pouvez ajouter de la logique dans votre application pour mettre en cache ces informations.

Empêcher le classement des actions

Dans certains cas, vous ne souhaitez pas montrer certaines actions aux utilisateurs. La meilleure façon d’empêcher le classement par ordre de priorité d’une action consiste à l’ajouter à la liste Actions exclues ou à ne pas la transmettre à la requête de classement.

Dans certains cas, vous pouvez souhaiter que l’apprentissage des événements ne s’effectue pas par défaut. En d’autres termes, vous souhaitez que l’apprentissage des événements s’effectue uniquement quand une condition spécifique est remplie. Par exemple, la partie personnalisée de votre page web se trouve sous la ligne de flottaison (les utilisateurs doivent la faire défiler pour interagir avec le contenu personnalisé). Dans ce cas, vous allez afficher la totalité de la page, mais vous souhaitez que l’entraînement d’un événement s’effectue uniquement quand l’utilisateur fait défiler la page et est en mesure d’interagir avec le contenu personnalisé. Dans ce cas, vous devez différer l’activation des événements pour éviter d’attribuer des événements de récompense (et de formation) par défaut avec lesquels l’utilisateur final n’était pas en mesure d’interagir.

Fonctionnalités

Le contexte et les actions possibles sont décrits à l’aide de caractéristiques. Les caractéristiques représentent l’ensemble des informations que vous pensez pertinentes pour le processus décisionnel en vue d’optimiser les récompenses. Un bon point de départ consiste à imaginer que vous êtes chargé de sélectionner la meilleure action à chaque horodatage et de vous demander : « De quelles informations ai-je besoin pour prendre une décision éclairée ? De quelles informations est-ce que je dispose pour décrire le contexte et chaque action possible ? » Les caractéristiques peuvent être génériques ou spécifiques à un article.

Personalizer n’impose pas, ne limite pas ou ne corrige pas les caractéristiques que vous pouvez envoyer pour les actions et le contexte :

  • Au fil du temps, vous pouvez ajouter et supprimer des caractéristiques sur le contexte et les actions. Personalizer continue d’apprendre à partir des informations disponibles.
  • Pour les caractéristiques par catégorie, il n’est pas nécessaire de prédéfinir les valeurs possibles.
  • Pour les caractéristiques numériques, il n’est pas nécessaire de prédéfinir de plages de valeurs.
  • Les noms de caractéristique qui commencent par un trait de soulignement _ sont ignorés.
  • La liste des caractéristiques peut être volumineuse (des centaines d’entrées), mais nous vous recommandons de commencer par un ensemble de caractéristiques concis et de le développer si nécessaire.
  • Les caractéristiques action peuvent présenter ou non une corrélation avec les caractéristiques contexte.
  • Les caractéristiques qui ne sont pas disponibles doivent être omises de la demande. Si la valeur d’une caractéristique spécifique n’est pas disponible pour une requête donnée, omettez la caractéristique pour cette requête.
  • Évitez d’envoyer des caractéristiques avec une valeur nulle. Une valeur nulle est traitée comme une chaîne avec la valeur « nulle », ce qui n’est pas souhaité.

Il est normal et naturel que les caractéristiques changent au fil du temps. Toutefois, gardez à l’esprit que le modèle Machine Learning de Personalizer s’adapte en fonction des caractéristiques qu’il constate. Si vous envoyez une demande contenant uniquement toutes les nouvelles caractéristiques, le modèle de Personalizer ne peut pas utiliser des événements passés pour sélectionner la meilleure action pour l’événement actuel. Un ensemble de caractéristiques « stable » (avec des caractéristiques récurrentes) facilite les performances des algorithmes de Machine Learning de Personalizer.

Caractéristiques contextuelles

  • Certaines caractéristiques de contexte peuvent n’être disponibles qu’occasionnellement. Si un utilisateur est connecté au site web de l’épicerie en ligne par exemple, le contexte contient des caractéristiques décrivant l’historique des achats. Ces caractéristiques ne sont pas disponibles pour un utilisateur invité.
  • Il doit exister au moins une caractéristique de contexte. Personalizer ne prend pas en charge un contexte vide.
  • Si les caractéristiques de contexte sont identiques pour chaque requête, Personalizer choisit la meilleure action globale.

Caractéristiques d’action

  • Toutes les actions ne doivent pas contenir les mêmes caractéristiques. Par exemple, dans le scénario d’épicerie en ligne, le pop-corn au micro-ondes a une caractéristique de « temps de cuisson », contrairement à un concombre.
  • Les caractéristiques pour un ID d’action particulier peuvent être disponibles un jour, mais devenir par la suite indisponibles.

Exemples :

Voici quelques exemples de caractéristiques d’action. Elles dépendent beaucoup de chaque application.

  • Caractéristiques avec des attributs des actions. Par exemple, s’agit-il d’un film ou d’une série télé ?
  • Caractéristiques sur la façon dont les utilisateurs peuvent avoir interagi avec cette action dans le passé. Par exemple, ce film est principalement regardé par des personnes de la catégorie démographique A ou B. Il n’est généralement pas regardé plus d’une fois.
  • Caractéristiques portant sur la façon dont l’utilisateur voit les actions. Par exemple, l’affiche du film montrée dans la miniature inclut-elle des visages, des voitures ou des paysages ?

Types de caractéristiques pris en charge

Personalizer prend en charge les caractéristiques de type chaîne, numérique et booléen. Il est probable que votre application utilise principalement des caractéristiques de type chaîne, à quelques exceptions près.

Impact des types de caractéristique sur le Machine Learning dans Personalizer

  • Chaînes : pour le type chaîne, chaque combinaison clé-valeur (nom de la caractéristique, valeur de la caractéristique) est traitée comme une caractéristique à encodage one-hot (par exemple la catégorie : « Produit » et la catégorie : « Viande » sont représentées en interne comme des caractéristiques différentes dans le modèle Machine Learning).
  • Numérique : utilisez uniquement des valeurs numériques quand le nombre est une grandeur qui doit affecter proportionnellement le résultat de personnalisation. Cela dépend beaucoup du scénario. Les caractéristiques basées sur des unités numériques mais dont le sens n’est pas linéaire (comme l’âge, la température ou la taille d’une personne) sont mieux encodées en chaînes de catégorie. Par exemple, l’âge peut être encodé en tant que « Âge » : « 0-5 », « Âge » : « 6-10 », etc. La hauteur peut être compartimentée en « Hauteur » : « <5'0 », « Hauteur » : « 5'0-5'4 », « Hauteur » : « 5'5-5'11 », « Hauteur » : « 6'0-6-4 », « Hauteur » : « > 6'4 ».
  • Booléen
  • Tableaux Seuls les tableaux numériques sont pris en charge.

Ingénierie des caractéristiques

  • Utilisez des types de catégories et des types de chaînes pour les caractéristiques qui ne sont pas une grandeur.
  • Assurez-vous qu’il existe suffisamment de caractéristiques pour piloter la personnalisation. Plus la précision avec laquelle le contenu doit être ciblé est élevée, plus grand est le nombre de caractéristiques nécessaires.
  • Il existe des caractéristiques de densités différentes. Une caractéristique est dense si beaucoup d’éléments sont regroupés dans un petit nombre de compartiments. Par exemple, des milliers de vidéos peuvent être classifiées comme étant « Longues » (d’une durée de plus de 5 minutes) et « Courtes » (d’une durée de moins de 5 minutes). Ceci est une caractéristique très dense. En revanche, ces mêmes milliers d’éléments peuvent avoir un attribut appelé « Titre », qui n’aura presque jamais la même valeur pour ces éléments. Il s’agit d’une caractéristique très peu dense ou éparse.

Des caractéristiques de haute densité aident Personalizer à extrapoler l’apprentissage d’un élément à l’autre. Cependant, s’il n’existe que quelques caractéristiques et qu’elles sont trop denses, Personalizer essaie de cibler du contenu précisément avec seulement quelques compartiments à sélectionner.

Problèmes courants liés à la conception et à la mise en forme des caractéristiques

  • Envoi de cardinalités avec une cardinalité élevée. Caractéristiques qui présentent des valeurs uniques qui ne se répètent probablement pas sur de nombreux événements. Par exemple, les informations d’identification personnelle qui sont spécifiques à une personne (comme le nom, le numéro de téléphone, le numéro de carte de crédit, l’adresse IP) ne doivent pas être utilisées dans Personalizer.
  • Envoi d’ID utilisateur Avec un grand nombre d’utilisateurs, il est peu probable que ces informations soient pertinentes pour l’apprentissage de Personalizer afin d’optimiser le score de récompense moyen. L’envoi d’identifiant utilisateur (même sans informations d’identification personnelle) parasite probablement le modèle et n’est pas recommandé.
  • Envoi de valeurs uniques qui se produisent rarement plusieurs fois. Il est recommandé de compartimenter vos caractéristiques dans un niveau de détail plus élevé. Par exemple, les caractéristiques comme "Context.TimeStamp.Day":"Monday" ou "Context.TimeStamp.Hour":13 peut être utiles, car il n’existe respectivement que 7 et 24 valeurs uniques. Cependant, "Context.TimeStamp":"1985-04-12T23:20:50.52Z" est très précis et a un très grand nombre de valeurs uniques, ce qui rend très l’apprentissage très difficile pour Personalizer.

Améliorer les ensembles de caractéristiques

Analysez le comportement de l’utilisateur en exécutant un travail d’évaluation des caractéristiques. Ceci vous permet d’examiner les données du passé pour voir quelles caractéristiques ont fortement contribué à des récompenses positives et celles qui y ont le moins contribué. Vous pouvez voir quelles caractéristiques contribuent positivement : c’est à vous et à votre application de trouver de meilleures caractéristiques à envoyer à Personalizer pour améliorer encore les résultats.

Développer des ensembles de caractéristiques avec l’intelligence artificielle et des services Azure AI services

L’intelligence artificielle et les services Azure AI services prêts à l’emploi peuvent constituer un apport très puissant pour Personalizer.

En prétraitant vos éléments avec des services d’intelligence artificielle, vous pouvez extraire automatiquement des informations susceptibles d’être pertinentes pour la personnalisation.

Par exemple :

  • Vous pouvez lire un fichier vidéo via Video Indexer pour extraire des éléments sur les scènes, du texte, des sentiments et beaucoup d’autres attributs. Ces attributs peuvent ensuite être rendus plus denses de façon à refléter des caractéristiques que n’avaient pas les métadonnées des éléments d’origine.
  • Des images peuvent être soumises à la détection d’objets, des visages à la détection des sentiments, etc.
  • Les informations présentes dans les textes peuvent être augmentées en extrayant des entités, des sentiments et en développant des entités avec le graphe de connaissances de Bing.

Vous pouvez utiliser plusieurs autres services Azure AI Services, comme

Utiliser des incorporations en tant que caractéristiques

Les incorporations de différents modèles Machine Learning se sont avérées être des caractéristiques efficaces pour Personalizer

  • Incorporations à partir de modèles de langage volumineux
  • Incorporations à partir de modèles Azure AI Vision

Espaces de noms

Si vous le souhaitez, les caractéristiques peuvent être organisées à l’aide d’espaces de noms (pertinents pour les caractéristiques contexte et action). Les espaces de noms peuvent être utilisés pour regrouper des caractéristiques par rubrique, par source ou tout autre regroupement qui est pertinent dans votre application. Vous déterminez si des espaces de noms sont utilisés et ce à quoi ils correspondent. Les espaces de noms organisent les caractéristiques en ensembles distincts et pour lever l’ambiguïté entre des caractéristiques ayant des noms similaires. Vous pouvez considérer les espaces de noms comme un « préfixe » ajouté aux noms de fonctionnalités. Les espaces de noms ne doivent pas être imbriqués.

Voici quelques exemples d’espaces de noms de caractéristiques utilisés par des applications :

  • User_Profile_from_CRM
  • Heure
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • Météo
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Conventions et instructions de nommage d’espaces de noms

  • Les espaces de noms ne doivent pas être imbriqués.
  • Les espaces de noms doivent commencer par des caractères ASCII uniques (nous vous recommandons d’utiliser des noms d’espaces de noms basés sur UTF-8). Actuellement, les espaces de noms qui commencent par les mêmes premiers caractères peuvent entraîner des collisions. Par conséquent, il est vivement recommandé de commencer les espaces de noms par des caractères distincts.
  • Les espaces de noms respectent la casse. Par exemple user et User sont considérés comme des espaces de noms différents.
  • Les noms de caractéristiques peuvent se répéter dans différents espaces de noms et sont traités comme des caractéristiques distinctes
  • Les caractères suivants ne peuvent pas être utilisés : codes < 32 (non imprimable), 32 (espace), 58 (deux points), 124 (barre verticale) et 126 à 140.
  • Tous les espaces de noms qui commencent par un trait de soulignement _ sont ignorés.

Exemples JSON

Actions

Lors de l’appel de l’API de classement, vous envoyez plusieurs actions parmi lesquelles choisir :

Les objets JSON peuvent inclure des objets JSON imbriqués et de simples valeurs/propriétés. Un tableau peut être inclus uniquement si ces éléments sont des nombres.

{
    "actions": [
    {
      "id": "pasta",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "medium",
          "grams": [400,800]
        },
        {
          "nutritionLevel": 5,
          "cuisine": "italian"
        }
      ]
    },
    {
      "id": "ice cream",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [150, 300, 450]
        },
        {
          "nutritionalLevel": 2
        }
      ]
    },
    {
      "id": "juice",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [300, 600, 900]
        },
        {
          "nutritionLevel": 5
        },
        {
          "drink": true
        }
      ]
    },
    {
      "id": "salad",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "low",
          "grams": [300, 600]
        },
        {
          "nutritionLevel": 8
        }
      ]
    }
  ]
}

Context

Le contexte est exprimé sous la forme d’un objet JSON qui est envoyé à l’API de classement :

Les objets JSON peuvent inclure des objets JSON imbriqués et de simples valeurs/propriétés. Un tableau peut être inclus uniquement si ces éléments sont des nombres.

{
    "contextFeatures": [
        {
            "state": {
                "timeOfDay": "noon",
                "weather": "sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true,
                "screensize": [1680,1050]
            }
        }
    ]
}

Espaces de noms

Dans le contenu JSON suivant, user, environment, device et activity sont des espaces de noms.

Notes

Nous vous recommandons vivement d’utiliser des noms pour les espaces de noms de caractéristiques qui sont basés sur UTF-8 et qui commencent par des lettres différentes. Par exemple, user, environment, device et activity commencent par u, e, d et a. Actuellement, si certains espaces de noms commencent par les mêmes caractères, cela risque de provoquer des collisions.

{
    "contextFeatures": [
        { 
            "user": {
                "profileType":"AnonymousUser",
                "Location": "New York, USA"
            }
        },
        {
            "environment": {
                "monthOfYear": "8",
                "timeOfDay": "Afternoon",
                "weather": "Sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true
            }
        },
        {
            "activity" : {
                "itemsInCart": "3-5",
                "cartValue": "250-300",
                "appliedCoupon": true
            }
        }
    ]
}

Étapes suivantes

Apprentissage par renforcement