Balisage des métadonnées et regroupement des utilisateurs
Les recommandations intelligentes peuvent être utilisées pour améliorer la personnalisation pertinente pour les utilisateurs finaux, même lorsqu’ils sont anonymes. Les clients peuvent intégrer une expérience de balisage de métadonnées personnalisée pour leur vitrine. Cette expérience est obtenue en utilisant la capacité d’identifier les balises de métadonnées pour le contenu (comme les articles écrits, les podcasts, les vidéos, les produits de vente au détail, etc.) et de recommander des balises ou du contenu similaires en fonction des goûts/préférences de cet utilisateur. Les métadonnées utilisateur peuvent être puissantes pour recommander un contenu pertinent à tous les utilisateurs, notamment :
- Clients nouveaux ou peu fréquents (également appelés « utilisateurs froids »).
- Connecter les utilisateurs à d’autres utilisateurs sur la base d’un balisage de métadonnées unique.
- Connecter les utilisateurs à un contenu à la fois pertinent et à court terme.
Lorsque le balisage des métadonnées est activé, les utilisateurs peuvent créer de nouveaux scénarios de recommandations tels que :
- Catégories de métadonnées que nous avons sélectionnées pour vous
- D’autres personnes regardent aussi ces catégories
- Événements récents basés sur votre activité récente
- Produits/contenus similaires en fonction de leurs balises de métadonnées attribuées
- Sélections pour vous en fonction des segments de comportement des utilisateurs
Qu’est-ce qu’une balise ?
Les balises sont un descripteur pour quelque chose d’intéressant dans les éléments/contenus, vers lequel les utilisateurs gravitent, et doivent être spécifiques à l’activité de l’utilisateur final. Par exemple, dans le monde des films, le genre, les acteurs, l’humeur, etc. peuvent tous être considérés comme des balises pour un film, ainsi que quelque chose que les utilisateurs finaux apprécient/n’apprécient pas. Les balises peuvent même inclure des joueurs/utilisateurs célèbres, des titres d’articles, des genres, des catégories de produits, des événements, d’autres termes de contenu. L’objectif est de s’assurer que les utilisateurs finaux se voient recommander un contenu pertinent qui correspond à leurs intérêts/goûts/préférences en fonction des métadonnées disponibles.
Vue d’ensemble de l’architecture
Pour configurer le balisage des métadonnées comme indiqué dans le diagramme d’architecture, les prérequis sont les suivants :
- Stockage faisant autorité pour le contenu avec des balises de métadonnées riches – Catalogue.
- Comportement d’interaction de l’utilisateur (clics sur le contenu/utilisation). Les informations de profil d’utilisateur final peuvent également être disponibles pour être utilisées.
- Un compte de recommandations intelligentes distinct et une instance de modélisation pour comprendre les intérêts des utilisateurs présentés sous forme de balises.
- Un composant pour classer le contenu en fonction de balises personnalisées avec une requête d’API en temps réel.
Lorsqu’il est activé, le service produit un modèle de « balises » personnalisées pour les utilisateurs, basé sur :
- Interactions utilisateur historiques
- Contenu riche en métadonnées avec des balises
- L’hypothèse ici est que les balises sont nettoyées (pas de fautes d’orthographe et les balises sont un ensemble prédéterminé et rationalisé par des experts et ne sont pas créées ni attachées au hasard).
Configuration du contrat de données
Pour configurer un contrat de données pour prendre en charge le balisage des métadonnées, procédez comme suit : prenez note des modifications entre les ItemId
, TagId
et InteractionGroupingId
.
Dans la section Applications, vous voyez des exemples de la façon dont l’introduction d’un TagID
ou BucketId
modifie la configuration du contrat de données. Nous vous suggérons de disposer d’un compte de recommandations intelligentes et d’une instance de modélisation distincts lorsque vous testez le balisage des métadonnées.
Nom de la capacité IR | CATALOGUE Entité de données |
CATALOGUE Champs d’entité de données |
INTERACTIONS Entité de données |
INTERACTIONS Champs d’entité de données |
---|---|---|---|---|
(Obligatoire pour toutes les réponses) | Reco_ItemsAndVariants |
ItemId en tant que TagId Title |
||
Capacité de filtrage (S’applique à toutes les listes) |
Reco_ItemCategories | ItemCategories : ItemId (ou TagId ), Catégorie |
||
Autres contenus consultés | Reco_Interactions |
InteractionGroupingId en tant que UserId ItemId en tant que TagId UserId Type d’interaction : achat == affiché Horodateur |
||
Nos choix pour vous | Reco_Interactions | (Comme précédemment) |
Applications et exemples
Les sections suivantes présentent deux cas d’utilisation courants qui bénéficient du balisage des métadonnées et fournissent des exemples avec des données de démonstration pour chacun.
- Pour obtenir « les articles les plus populaires pour vous » pour les utilisateurs froids. Pour voir un exemple, consultez la section intitulée Obtenez les articles les plus populaires pour vous pour les utilisateurs froids.
- Pour créer une carte apprise par machine des valeurs de métadonnées des utilisateurs. Pour voir un exemple, consultez la section intitulée Créer une carte ML des valeurs de métadonnées des utilisateurs.
Application 1 : obtenir « les articles les plus populaires pour vous » pour les utilisateurs froids
Un problème courant dans le monde de l’AI-ML est de savoir comment fournir des recommandations pertinentes aux utilisateurs qui sont des clients nouveaux ou peu fréquents (également appelés « utilisateurs froids »). Comme mentionné précédemment, l’objectif ici est de créer des groupes distincts basés sur des catégories significatives et des informations démographiques disponibles (c’est-à-dire l’âge et le sexe). Utilisez ensuite toutes les interactions pour connecter tous les utilisateurs à leurs compartiments démographiques correspondants, ce qui permet ensuite aux compartiments d’être connectés aux éléments pendant la phase d’entraînement du modèle. Au cours de la phase d’exécution, le segment démographique d’un utilisateur à froid peut être attribué, puis utilisé pour recommander des éléments, par exemple « les articles les plus populaires par groupe d’utilisateurs ».
Les étapes sont les suivantes :
- Préparez un regroupement d’utilisateurs avec leurs informations de métadonnées.
- Créez les connexions pour le modèle dans le fichier de stockage de données « Reco_Interactions.csv ».
- Interrogez le modèle pour obtenir l’API « articles les plus populaires par groupe d’utilisateurs ».
Étape 1 : Préparez un regroupement d’utilisateurs avec leurs informations de métadonnées
Quelques bonnes pratiques lors de la création de vos compartiments sont les suivantes :
- Les métadonnées utilisateur peuvent être représentées sous forme de compartiments à plages. Envisagez d’utiliser les métadonnées qui ont du sens pour votre domaine d’activité et votre cas d’utilisation. Par exemple, si vous souhaitez créer un compartiment pour les données d’âge, vous pouvez utiliser ces valeurs : Age5To11, Age30To40, etc.
- Certaines métadonnées utilisateur peuvent même être combinées dans des compartiments. Envisagez d’utiliser les métadonnées et les combinaisons qui ont du sens pour votre domaine d’activité et votre cas d’utilisation. Par exemple, vous pouvez combiner les données d’âge et de sexe pour créer des compartiments de la façon suivante : Age20To30Male, Age20To30Female, Age30To40Male, Age30To40Female, etc.
- Une fois les groupes créés, vous devez attribuer à chaque groupe un
BucketId
unique.
Étape 2 : Créez les connexions pour le modèle dans le fichier de stockage de données « Reco_Interactions.csv »
Selon le nombre de compartiments, supérieur ou inférieur à 1 000, la configuration des données dans le contrat de données peut changer.
S’il y a MOINS de 1 000 compartiments
Pour chaque ligne d’interaction, vous définissez le ChannelId
sur le BucketId
, qui correspond (ou convient le mieux) à l’utilisateur. La ligne CSV d’interaction est remplacée par : InteractionGroupingID
, ItemId
, UserId
et BucketId
en tant que ChannelId
. Voici un exemple des interactions CSV :
Exemple de CSV pour MOINS de 1 000 compartiments
Les en-têtes CSV des interactions apparaissent uniquement à des fins de commodité et ne doivent pas faire partie des données réelles.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
InteractionGroupingID |
ItemId |
UserId |
BucketId |
S’il y a PLUS de 1 000 compartiments
S’il y a plus de 1 000 ensembles de données, vous créez davantage de lignes d’interaction en utilisant BucketId
.
Transformez chaque ligne d’interaction d’origine entre un utilisateur et un élément en deux nouvelles lignes distinctes avec un InteractionGroupingId
unique qui n’est unique que pour ces deux lignes. L’exemple montre :
- La ligne d’interaction d’origine utilisant
UserId
,ItemId
et leInteractionGroupingId
en tant queUNIQUE_ID
. - La ligne d’interaction supplémentaire avec le
BucketId
en tant queItemId
.
Exemple de CSV pour PLUS de 1 000 compartiments :
Les en-têtes CSV des interactions apparaissent uniquement à des fins de commodité et ne doivent pas faire partie des données réelles.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
ItemId |
UserId |
|||||||||
UNIQUE_ID |
BucketId |
UserId |
Étape 3 : Interrogez le modèle pour obtenir l’API « articles les plus populaires par groupe d’utilisateurs »
Tenez compte du schéma de construction du modèle discuté précédemment. Une fois qu’un utilisateur à froid et son segment démographique ont été déterminés, interrogez le point de terminaison en exécution en utilisant le type de liste « Meilleure action suivante » (anciennement CART) avec le BucketId
basé sur les données démographiques pour recommander les articles les plus populaires pour ce groupe.
S’il y a MOINS de 1 000 compartiments
Un exemple de lien de requête d’API où le paramètre pour BucketId
est remplacé par la valeur ChannelId
, qui ressemblerait à ceci :
<serving-endpoint>/Reco/V1.0/Popular?channelID=<BucketId>
Exemple 1 : moins de 1 000 compartiments
Supposons qu’un utilisateur avec UserId
=100, avec un BucketId
=Age30To40 attribué personnalisé, qui a récemment acheté un article avec ItemId
=98005.
Cet exemple crée une ligne dans le fichier « Reco_Interactions.csv », qui utilise un BucketId
(dans le champ ChannelId
du schéma IR) qui correspond le mieux à l’utilisateur (représenté par UserId
dans le schéma IR) :
- Les informations sur l’interaction d’origine sont :
InteractionGroupingId
=1,UserId
=100,ItemId
=98005 - Notez dans l’exemple CSV, que le
ChannelId
pertinent, qui correspond le mieux auUserId
est ajouté. Dans l’exemple, leUserId
a été mis en correspondance avec leBucketId
=Age30To40, donc la ligne d’interaction modifiée est :
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 98005 | 100 | Age30To40 |
- La requête et la réponse de l’API renvoient une liste d’ItemIds, y compris
ItemId
=43218 en troisième position, qui est un article populaire pour les utilisateurs de cette catégorie.
Requête API
GET <serving-endpoint>/reco/v1.0/Popular?ChannelId=Age30To40
Response
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Popular",
"longTitle": "Popular",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
S’il y a PLUS de 1 000 compartiments
Un exemple de lien de requête d’API où le paramètre pour BucketId
est remplacé par la valeur ItemId
pour un utilisateur froid, qui ressemblerait à ceci :
<serving-endpoint>/Reco/V1.0/Cart/<BucketId>?
Exemple 2 : plus de 1 000 compartiments
Supposons qu’un utilisateur avec UserId
=100, avec un BucketId
=Age30To40Female attribué personnalisé, qui a récemment acheté un article avec ItemId
=98005.
Vous pouvez maintenant utiliser les données d’interaction d’origine et construire des lignes dans le fichier Reco_Interactions.csv :
- Les informations sur l’interaction d’origine sont :
InteractionGroupingId
= NEW_UNIQUE_ID,UserId
=100,ItemId
=98005 - Les deux lignes d’informations d’interaction construites qui doivent se trouver dans le fichier Reco_Interactions.csv lu par le service Recommandations intelligentes :
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UNIQUE_ID |
98005 |
100 |
|||||||||
UNIQUE_ID |
Age30To40Female |
100 |
- La requête et la réponse de l’API renvoient une liste d’ItemIds, y compris
ItemId
=43218 en troisième position, qui est un produit populaire pour les utilisateurs dans cette catégorie.
Requête API
GET <serving-endpoint>/reco/v1.0/Cart/Age30To40Female?
Response
{
"id": "Lists",
"name": "Lists",
"version": "v1.0",
"interactionsVersion": "20220104115104",
"items": [
{
"id": "65106",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62604",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "43218",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "63503",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62452",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Cart",
"longTitle": "FrequentlyBoughtTogether",
"titleId": 5,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
Application 2 : Créer une carte ML des valeurs de métadonnées des utilisateurs
La modélisation des balises de métadonnées utilisateur à la place des interactions directes avec l’utilisateur peut être une modification puissante lorsque l’objectif est de produire un résultat, qui montre à quel point les utilisateurs sont connectés avec ces balises et quelles balises sont vraiment similaires par leur comportement. Attribuez à chaque balise significative et disponible (par exemple, des données démographiques telles que l’âge et le sexe, ou d’autres métadonnées) un identifiant unique, que le service appelle le TagId
. Pendant la phase de formation du modèle, toutes les données d’interaction sont utilisées pour établir une connexion entre les UserIds et les TagIds.
Au cours de la phase de diffusion, le système peut fournir une liste personnalisée de balises en appelant « Nos choix pour vous » avec UserId
et des balises similaires en appelant « Autres contenus plébiscités » avec TagId
.
Comment utiliser les TagIds pour les recommandations :
- Préparez une liste de valeurs de métadonnées utilisateur (balises) et attribuez à chacune d’elles un
TagId
unique. - Créez les connexions pour le modèle dans le fichier de stockage de données Reco_Interactions.CSV.
- Interrogez le modèle pour obtenir l’API « balises personnalisées par utilisateur » ou « balises similaires ».
Étape 1 : Préparez une liste de valeurs de métadonnées utilisateur (balises) et attribuez à chacune d’elles un TagId unique
Lors de la construction de valeurs pour les données d’âge, le regroupement est toujours une bonne approche : Age5To11, Age12To18, etc.
Pour les autres valeurs de métadonnées, créez un TagId distinct pour chacune. Par exemple, si nous voulions une catégorie pour le statut familial : Célibataire, Couple, CoupleAvecEnfants, etc.
Étape 2 : Créez les connexions pour le modèle dans le fichier de stockage de données Reco_Interactions.CSV
Utilisez chaque interaction d’origine entre un utilisateur et un élément pour construire une ligne de données d’interaction avec le TagId
.
[!Remarque :]
Quelques rappels importants avec cette approche :
- Seules les données nouvellement construites seront utilisées dans l’entité de données Interactions pour le modèle.
- La création d’une ligne d’interaction qui connecte les utilisateurs aux TagIds ne doit pas nécessairement être basée sur une interaction. Ceci est un exemple pour illustrer comment on peut créer une interaction pour connecter les utilisateurs aux balises dans le modèle.
- Pour le
InteractionGroupingId
il peut être judicieux de réutiliser l’interaction d’origine, si elle est disponible. Sinon, essayez l’un ou l’autre groupement parUserId
. Pendant la phase de formation du modèle, toutes les données d’interaction sont utilisées pour établir une connexion entre les différents TagIds, et entre les UserIds et les TagIds. Notre suggestion est d’essayer différentes manières de regrouper, puis de voir laquelle donne les meilleurs résultats pertinents, car différents scénarios et modèles d’utilisation peuvent différer.
- Ligne d’interaction d’origine : avec
UserId
,ItemId
,InteractionGroupingId
. Contrairement à l’exemple ci-dessus avecBucketId
, NE PAS INCLURE cette ligne dans l’entrée jeu de données.- NOUVELLE ligne d’interaction : avec
UserId
,TagId
en tant queItemId
,UserId
en tant queInteractionGroupingId
.
Voici un exemple de contrat de données :
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
UserId |
TagId |
UserId |
Étape 3 : Interrogez le modèle pour obtenir des balises personnalisées par utilisateur ou des balises similaires
Avec une construction soigneuse du modèle, l’interrogation du point de terminaison en exécution en utilisant les types de liste « Sélections pour vous » et « Autres contenus plébiscités » génère les résultats souhaités.
Une requête d’API Nos choix pour vous, qui renvoie les TagIds recommandés pour un UserId
donné, ressemblerait à ceci :
<serving-endpoint>Reco/v1.0/picks?userId=<UserId>
Une requête d’API Autres contenus plébiscités où le paramètre de l’élément de départ est remplacé par le TagId
correspondant :
<serving-endpoint>/Reco/V1.0/Similar/<TagID-value>?
Exemple de sortie de réponse
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "68100",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "62500",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61504",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "65103",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "61401",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
Exemple 3 : Requête pour tagIds avec des données de démonstration
Supposons qu’un utilisateur avec UserId
=100, a indiqué qu’il est aligné avec les balises suivantes : 123 (qui représente Fan de football), Age30To40Female et FamilyWithKids.
Vous pouvez utiliser la ligne d’interaction originale pour construire les lignes suivantes dans le fichier « Reco_Interactions.csv » : o 3 nouvelles lignes d’informations d’interaction, une pour chaque balise pour cet utilisateur, qui devrait être dans le fichier « Reco_Interactions.csv » lu par le service Recommandations intelligentes :
![Remarque]
Dans cet exemple, nous avons choisi de regrouper par
UserId
et nous avons défini leInteractionGroupingId
égal auUserId
. Notez également que leItemId
représente leTagId
.
InteractionGroupingId | ItemId | ItemVariantId | UserId | InteractionType | Horodateur | Attribut futur | Attribut futur | Canal | Catalog | Point fort | IsPositive |
---|---|---|---|---|---|---|---|---|---|---|---|
100 | 123 | 100 | |||||||||
100 | Age30To40Female | 100 | |||||||||
100 | FamilyWithKids | 100 |
Requête et réponses pour les choix
Voici à quoi ressemble la requête construite Nos choix pour vous :
GET <serving-endpoint>/reco/v1.0/picks?UserId=100
La réponse Sélections renvoie une liste de 200 ItemIds (pour les balises), y compris, TagID
=FamilyWithKids en première position.
{
"id": "Picks",
"name": "Picks",
"version": "v1.0",
"items": [
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "625",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "Sports",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "611",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "Picks for you",
"longTitle": "Picks for you",
"titleId": 6,
"personalizationConfidence": 1.0,
"pagingInfo": {
"totalItems": 139
},
"status": "Success"
}
Requête et réponse pour similaire
Voici à quoi ressemble la requête Autres contenus plébiscités construite à l’aide de l’API similaire :
GET <serving-endpoint>/Reco/V1.0/Similar/FamilyWithKids?
La réponse « Autres contenus plébiscités » renvoie une liste de 200 ItemIds (pour les balises), y compris Age30To40Female en première position et FamilyWithKids en deuxième position.
{
"id": "Similar",
"name": "Similar",
"version": "v1.0",
"items": [
{
"id": "Age30To40Female",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "FamilyWithKids",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "SportsParent",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "651",
"trackingId": "00000000-0000-0000-0000-000000000003"
},
{
"id": "123",
"trackingId": "00000000-0000-0000-0000-000000000003"
}
],
"title": "People also like",
"longTitle": "People also like",
"titleId": 6,
"pagingInfo": {
"totalItems": 200
},
"status": "Success"
}
Pour en savoir plus sur notre service et les modèles que nous prenons en charge, consultez notre Guide de modélisation.
Voir aussi
Guide de démarrage rapide : créer une demande d’API
QA sur la modélisation
Guide du contrat de données
Exemples de requêtes d’API