Functies zijn informatie over acties en context
De Personalizer-service werkt door te leren wat uw toepassing moet laten zien aan gebruikers in een bepaalde context.
Personalizer maakt gebruik van functies. Dit is informatie over de huidige context om de beste actie te kiezen. De functies vertegenwoordigen alle informatie die u denkt te kunnen personaliseren om hogere beloningen te behalen. Functies kunnen zeer algemeen zijn of specifiek zijn voor een item.
U hebt bijvoorbeeld een functie over:
- De persona van de gebruiker, zoals een
Sports_Shopper. Dit mag geen afzonderlijke gebruikers-id zijn. - De inhoud, bijvoorbeeld als een video een , een of een is, of of
DocumentaryeenMovieTV Seriesretailitem beschikbaar is in de store. - De huidige periode, zoals de dag van de week.
Personalizer staat niet vast, beperkt of herstelt niet welke functies u kunt verzenden voor acties en context:
- U kunt bepaalde functies verzenden voor bepaalde acties en niet voor andere, als u deze niet hebt. Tv-reeksen hebben bijvoorbeeld kenmerken die films niet hebben.
- Mogelijk hebt u een aantal functies slechts enkele keren beschikbaar. Een mobiele toepassing kan bijvoorbeeld meer informatie bieden dan een webpagina.
- Na een periode kunt u functies over context en acties toevoegen en verwijderen. Personalizer blijft leren van beschikbare informatie.
- Er moet ten minste één functie voor de context zijn. Personalizer biedt geen ondersteuning voor een lege context. Als u alleen elke keer een vaste context verzendt, kiest Personalizer de actie voor classificaties alleen met betrekking tot de functies in de acties.
- Voor categorische functies hoeft u de mogelijke waarden niet te definiëren en hoeft u geen vooraf bepaalde reeksen voor numerieke waarden te definiëren.
Ondersteunde functietypen
Personalizer ondersteunt functies van tekenreeks-, numerieke en Booleaanse typen. Het is zeer waarschijnlijk dat uw toepassing voornamelijk tekenreeksfuncties gebruikt, met enkele uitzonderingen.
Hoe de keuze van het functietype van invloed is Machine Learning in Personalizer
- Tekenreeksen: Voor tekenreekstypen wordt elke combinatie van sleutel en waarde behandeld als een One-Hot-functie (bijvoorbeeld genre:"ScienceFiction" en genre:"Kante" twee nieuwe invoerfuncties maken voor het machine learning-model.
- Numeriek: u moet numerieke waarden gebruiken wanneer het getal een magnitude is die proportioneel van invloed moet zijn op het personalisatieresultaat. Dit is zeer afhankelijk van een scenario. In een vereenvoudigd voorbeeld, bijvoorbeeld bij het personaliseren van een retailervaring, kan NumberOfPetsOwned een functie zijn die numeriek is, omdat u misschien wilt dat mensen met 2 of 3 huisdieren het personalisatieresultaat twee keer of drie keer zo vaak beïnvloeden als één huisdier. Functies die zijn gebaseerd op numerieke eenheden, maar waarbij de betekenis niet lineair is, zoals Leeftijd, Temperatuur of Hoogte van persoon, kunnen het beste worden gecodeerd als tekenreeksen. DayOfMonth is bijvoorbeeld een tekenreeks met '1', '2'...31'. Als u veel categorieën hebt, kan de kwaliteit van de functie doorgaans worden verbeterd met behulp van reeksen. Leeftijd kan bijvoorbeeld worden gecodeerd als 'Leeftijd':'0-5', 'Leeftijd':'6-10', enzovoort.
- Booleaanse waarden die worden verzonden met de waarde 'false' fungeren alsof ze helemaal niet waren verzonden.
Functies die niet aanwezig zijn, moeten worden weggelaten uit de aanvraag. Vermijd het verzenden van functies met een null-waarde, omdat deze worden verwerkt als bestaande en met de waarde 'null' bij het trainen van het model.
Functies categoriseren met naamruimten
Personalizer maakt gebruik van functies die zijn ingedeeld in naamruimten. U bepaalt in uw toepassing of naamruimten worden gebruikt en wat ze moeten zijn. Naamruimten worden gebruikt om functies te groepen over een vergelijkbaar onderwerp of functies die afkomstig zijn van een bepaalde bron.
Hier volgen enkele voorbeelden van functienaamruimten die door toepassingen worden gebruikt:
- User_Profile_from_CRM
- Tijd
- Mobile_Device_Info
- http_user_agent
- VideoResolution
- UserDeviceInfo
- Weer
- Product_Recommendation_Ratings
- current_time
- NewsArticle_TextAnalytics
U kunt functienaamruimten een naam geven volgens uw eigen conventies, zolang dit geldige JSON-sleutels zijn. Naamruimten worden gebruikt om functies in afzonderlijke sets te ordenen en om functies met vergelijkbare namen ondubbelzinnig te maken. U kunt naamruimten zien als een voorvoegsel dat wordt toegevoegd aan functienamen. Naamruimten kunnen niet worden genest.
In de volgende JSON zijn user environment , , en device activity functienaamruimten.
Notitie
Momenteel raden we u ten zeerste aan namen te gebruiken voor functienaamruimten die zijn gebaseerd op UTF-8 en beginnen met verschillende letters. Bijvoorbeeld, user , environment , en beginnen met , , en device activity u e d a . Op dit moment kunnen naamruimten met dezelfde eerste tekens leiden tot aanrijdingen in indexen die worden gebruikt voor machine learning.
JSON-objecten kunnen geneste JSON-objecten en eenvoudige eigenschap/waarden bevatten. Een matrix kan alleen worden opgenomen als de matrixitems getallen zijn.
{
"contextFeatures": [
{
"user": {
"profileType":"AnonymousUser",
"latlong": ["47.6,-122.1"]
}
},
{
"environment": {
"dayOfMonth": "28",
"monthOfYear": "8",
"timeOfDay": "13:00",
"weather": "sunny"
}
},
{
"device": {
"mobile":true,
"Windows":true
}
},
{
"activity" : {
"itemsInCart": 3,
"cartValue": 250,
"appliedCoupon": true
}
}
]
}
Beperkingen in tekensets voor naamruimten
De tekenreeks die u gebruikt voor de naamgeving van de naamruimte moet een aantal beperkingen volgen:
- Dit mag geen unicode zijn.
- U kunt enkele van de afdrukbare symbolen met codes < 256 gebruiken voor de naamruimtenamen.
- U kunt geen symbolen gebruiken met codes < 32 (niet afdrukbaar), 32 (spatie), 58 (dubbele punt), 124 (pipe) en 126–140.
- Het mag niet beginnen met een onderstrepingsteken '_' of de functie wordt genegeerd.
Functiesets effectiever maken voor Personalizer
Een goede functieset helpt Personalizer bij het voorspellen van de actie die de hoogste beloning zal aanrijden.
U kunt functies verzenden naar de Personalizer Rank-API die deze aanbevelingen volgt:
Categorische en tekenreekstypen gebruiken voor functies die geen magnitude zijn.
Er zijn voldoende functies om personalisatie mogelijk te maken. Hoe preciezer de inhoud moet zijn, hoe meer functies nodig zijn.
Er zijn voldoende functies van diverse dichtheiden. Een functie is compact als veel items in een paar buckets zijn gegroepeerd. Duizenden video's kunnen bijvoorbeeld worden geclassificeerd als 'Lang' (meer dan 5 minuten lang) en 'Kort' (minder dan 5 minuten). Dit is een zeer compacte functie. Aan de andere kant kunnen dezelfde duizenden items een kenmerk met de naam Titel hebben, dat bijna nooit dezelfde waarde van het ene item naar het andere heeft. Dit is een zeer niet-compacte of verspreide functie.
Het gebruik van high-densityfuncties helpt de Personalizer om het leren van het ene item naar het andere te extrapoleren. Maar als er slechts enkele functies zijn en ze te compact zijn, probeert de Personalizer inhoud nauwkeurig te targeten met slechts enkele buckets waar u uit kunt kiezen.
Functiesets verbeteren
Analyseer het gedrag van de gebruiker door een offline-evaluatie uit te voeren. Zo kunt u naar eerdere gegevens kijken om te zien welke functies sterk bijdragen aan positieve beloningen ten opzichte van functies die minder bijdragen. U kunt zien welke functies u helpen en het is aan u en uw toepassing om betere functies te vinden die u naar Personalizer kunt verzenden om de resultaten nog verder te verbeteren.
Deze volgende secties zijn algemene procedures voor het verbeteren van functies die naar Personalizer worden verzonden.
Functies compacter maken
Het is mogelijk om uw functiesets te verbeteren door ze te bewerken, om ze groter te maken en meer of minder compact te maken.
Een tijdstempel tot de tweede is bijvoorbeeld een zeer verspreide functie. Het kan compacter (effectief) worden gemaakt door tijden te classificeren in 'ochtend', 'middag', 'middag', enzovoort.
Locatiegegevens profiteren doorgaans ook van het maken van bredere classificaties. Een Latitude-Longitude-coördinaat zoals Lat: 47.67402° N, Long: 122.12154° W is bijvoorbeeld te nauwkeurig en dwingt het model om breedtegraad en lengtegraad als afzonderlijke dimensies te leren. Wanneer u probeert te personaliseren op basis van locatiegegevens, helpt het bij het groeperen van locatiegegevens in grotere sectoren. Een eenvoudige manier om dat te doen, is door een geschikte afrondingsprecisie voor de Lat-Long-getallen te kiezen en breedtegraad en lengtegraad te combineren in 'gebieden' door ze in één tekenreeks te maken. Een goede manier om bijvoorbeeld 47,67402° N, Long: 122.12154° W in regio's van ongeveer een paar kilometer breed weer te geven, is 'location':'34.3, 12.1'.
Functiesets uitbreiden met extrapolatiegegevens
U kunt ook meer functies krijgen door te denken aan niet-gedetecteerde kenmerken die kunnen worden afgeleid van informatie die u al hebt. Is het bijvoorbeeld in een fictieve filmlijst mogelijk dat een weekend versus doordeweekse dag ander gedrag van gebruikers vertonen? Tijd kan worden uitgebreid met een kenmerk 'weekend' of 'weekdag'. Zijn er nationale culturele feestdagen die de aandacht vestigen op bepaalde filmtypen? Zo is het kenmerk 'Moet' handig op plaatsen waar het relevant is. Is het mogelijk dat regenachtig weer een aanzienlijke invloed heeft op de keuze van een film voor veel mensen? Met tijd en plaats kan een weerservice die informatie bieden en u kunt deze toevoegen als een extra functie.
Functiesets uitbreiden met kunstmatige intelligentie en cognitieve services
Kunstmatige intelligentie en kant-en-Cognitive Services kunnen een zeer krachtige aanvulling op de Personalizer zijn.
Door uw items vooraf te verwerken met behulp van services voor kunstmatige intelligentie, kunt u automatisch informatie extraheren die waarschijnlijk relevant is voor personalisatie.
Bijvoorbeeld:
- U kunt een filmbestand uitvoeren via Video Indexer om scène-elementen, tekst, sentiment en veel andere kenmerken te extraheren. Deze kenmerken kunnen vervolgens compacter worden gemaakt om kenmerken weer te geven die de metagegevens van het oorspronkelijke item niet hadden.
- Afbeeldingen kunnen worden uitgevoerd via objectdetectie, gezichten via gevoel, enzovoort.
- Informatie in tekst kan worden uitgebreid door entiteiten, sentiment te extraheren, entiteiten uit te breiden met Bing kennisgrafiek, enzovoort.
U kunt verschillende andereAzure Cognitive Services, zoals
Acties vertegenwoordigen een lijst met opties
Elke actie:
- Heeft een gebeurtenis-id. Als u al een gebeurtenis-id hebt, moet u deze indienen. Als u geen gebeurtenis-id hebt, verzendt u er geen, personalizer maakt er een voor u en retourneert deze in het antwoord van de Rank-aanvraag. De id is gekoppeld aan de rank-gebeurtenis, niet aan de gebruiker. Als u een id maakt, werkt een GUID het beste.
- Heeft een lijst met functies.
- De lijst met functies kan groot zijn (honderden), maar we raden u aan om de effectiviteit van functies te evalueren om functies te verwijderen die niet bijdragen aan het verkrijgen van beloningen.
- De functies in de acties kunnen al dan niet correlatie hebben met functies in de context die door Personalizer wordt gebruikt.
- Functies voor acties kunnen aanwezig zijn in sommige acties en niet in andere.
- Functies voor een bepaalde actie-id zijn mogelijk op een dag beschikbaar, maar zijn later niet meer beschikbaar.
De algoritmen van Personalizer machine learning beter wanneer er stabiele functiesets zijn, maar Rank-aanroepen mislukken niet als de functieset na een periode verandert.
Verzend niet meer dan 50 acties bij classificatieacties. Dit kunnen elke keer dezelfde 50 acties zijn, of ze kunnen worden gewijzigd. Als u bijvoorbeeld een productcatalogus hebt van 10.000 items voor een e-commerce-toepassing, kunt u een aanbevelings- of filterenent engine gebruiken om de top 40 te bepalen die een klant mogelijk bewaarde, en Personalizer gebruiken om het product te vinden dat de meeste beloning genereert (bijvoorbeeld de gebruiker voegt toe aan de winkelwagen) voor de huidige context.
Voorbeelden van acties
De acties die u naar de Rank-API verzendt, zijn afhankelijk van wat u wilt personaliseren.
Hier volgen enkele voorbeelden:
| Doel | Actie |
|---|---|
| Personaliseer welk artikel is gemarkeerd op een nieuwswebsite. | Elke actie is een mogelijk nieuwsartikel. |
| Advertentieplaatsing op een website optimaliseren. | Elke actie is een indeling of regels voor het maken van een indeling voor de advertenties (bijvoorbeeld bovenaan, aan de rechterkant kleine afbeeldingen, grote afbeeldingen). |
| Persoonlijke rangschikking van aanbevolen items weergeven op een winkelwebsite. | Elke actie is een specifiek product. |
| Gebruikersinterface-elementen, zoals filters, voorstellen om toe te passen op een specifieke foto. | Elke actie kan een ander filter zijn. |
| Kies het antwoord van een chatbot om de intentie van de gebruiker te verduidelijken of een actie voor te stellen. | Elke actie is een optie voor het interpreteren van het antwoord. |
| Kies wat u bovenaan een lijst met zoekresultaten wilt zien | Elke actie is een van de belangrijkste zoekresultaten. |
Voorbeelden van functies voor acties
Hier volgen goede voorbeelden van functies voor acties. Deze zijn afhankelijk van elke toepassing.
- Functies met kenmerken van de acties. Is het bijvoorbeeld een film of een tv-serie?
- Functies over hoe gebruikers in het verleden met deze actie hebben ge interactie gehad. Deze film wordt bijvoorbeeld vooral gezien door mensen met demografische gegevens A of B, die doorgaans niet vaker dan één keer worden afgespeeld.
- Functies over de kenmerken van de manier waarop de gebruiker de acties ziet. Bevat de poster voor de film die in de miniatuur wordt weergegeven bijvoorbeeld gezichten, auto's of landschappen?
Acties laden vanuit de clienttoepassing
Functies van acties zijn doorgaans afkomstig van systemen voor inhoudsbeheer, catalogi en aanbevelingssystemen. Uw toepassing is verantwoordelijk voor het laden van de informatie over de acties van de relevante databases en systemen die u hebt. Als uw acties niet telkens worden gewijzigd of geladen, heeft dit een onnodige invloed op de prestaties, kunt u logica in uw toepassing toevoegen om deze informatie in de cache op te nemen.
Voorkomen dat acties worden gerangschikt
In sommige gevallen zijn er acties die u niet aan gebruikers wilt weergeven. De beste manier om te voorkomen dat een actie als meest bovenaan wordt geclassificeerd, is om deze in de eerste plaats niet op te nemen in de actielijst voor de Rank-API.
In sommige gevallen kan deze pas later in uw bedrijfslogica worden bepaald als een resulterende actie van een Rank API-aanroep aan een gebruiker moet worden weergegeven. Voor deze gevallen moet u Inactieve gebeurtenissen gebruiken.
JSON-indeling voor acties
Wanneer u Rank aanroept, verzendt u meerdere acties om uit te kiezen:
JSON-objecten kunnen geneste JSON-objecten en eenvoudige eigenschap/waarden bevatten. Een matrix kan alleen worden opgenomen als de matrixitems getallen zijn.
{
"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
}
]
}
]
}
Voorbeelden van contextinformatie
Informatie voor de context is afhankelijk van elke toepassing en use-case, maar kan doorgaans informatie bevatten zoals:
- Demografische en profielinformatie over uw gebruiker.
- Informatie die is geëxtraheerd uit HTTP-headers, zoals gebruikersagent, of afgeleid van HTTP-informatie, zoals reverse geographic lookups op basis van IP-adressen.
- Informatie over de huidige tijd, zoals dag van de week, weekend of niet, ochtend of middag, feestdagen of niet, enzovoort.
- Informatie die wordt geëxtraheerd uit mobiele toepassingen, zoals locatie, beweging of accuniveau.
- Historische aggregatie van het gedrag van gebruikers, zoals wat zijn de films die deze gebruiker het meest heeft bekeken.
Uw toepassing is verantwoordelijk voor het laden van de informatie over de context van de relevante databases, sensoren en systemen die u mogelijk hebt. Als uw contextinformatie niet verandert, kunt u logica toevoegen aan uw toepassing om deze informatie in de cache op te nemen voordat u deze naar de Rank-API verstuurt.
JSON-indeling voor context
Context wordt uitgedrukt als een JSON-object dat wordt verzonden naar de Rank API:
JSON-objecten kunnen geneste JSON-objecten en eenvoudige eigenschap/waarden bevatten. Een matrix kan alleen worden opgenomen als de matrixitems getallen zijn.
{
"contextFeatures": [
{
"user": {
"name":"Doug"
}
},
{
"state": {
"timeOfDay": "noon",
"weather": "sunny"
}
},
{
"device": {
"mobile":true,
"Windows":true,
"screensize": [1680,1050]
}
}
}
]
}