Delen via


Context en acties

Belangrijk

Vanaf 20 september 2023 kunt u geen nieuwe Personalizer-resources maken. De Personalizer-service wordt op 1 oktober 2026 buiten gebruik gesteld.

Personalizer werkt door te leren wat uw toepassing moet laten zien aan gebruikers in een bepaalde context. Context en acties zijn de twee belangrijkste stukjes informatie die u doorgeeft aan Personalizer. De context vertegenwoordigt de informatie die u hebt over de huidige gebruiker of de status van uw systeem en de acties zijn de opties waaruit u kunt kiezen.

Context

Informatie voor de context is afhankelijk van elke toepassing en use-case, maar het kan meestal informatie bevatten zoals:

  • Demografische en profielgegevens over uw gebruiker.
  • Informatie die is geëxtraheerd uit HTTP-headers, zoals gebruikersagent, of afgeleid van HTTP-informatie, zoals omgekeerde geografische zoekopdrachten 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 is geëxtraheerd uit mobiele toepassingen, zoals locatie, beweging of accuniveau.
  • Historische aggregaties van het gedrag van gebruikers, zoals wat zijn de filmgenres die deze gebruiker het meest heeft bekeken.
  • Informatie over de status van het systeem.

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 contextgegevens niet veranderen, kunt u logica in uw toepassing toevoegen om deze gegevens in de cache op te slaan voordat u deze naar de Rank-API verzendt.

Acties

Acties vertegenwoordigen een lijst met opties.

Verzend niet meer dan 50 acties wanneer classificatieacties worden uitgevoerd. Ze kunnen elke keer dezelfde 50 acties zijn, of ze kunnen veranderen. Als u bijvoorbeeld een productcatalogus van 10.000 items voor een e-commercetoepassing hebt, kunt u een aanbeveling of filterengine gebruiken om de top 40 te bepalen die een klant leuk vindt en personalizer gebruiken om de meest beloning voor de huidige context te vinden.

Voorbeelden van acties

De acties die u naar de Rank-API verzendt, zijn afhankelijk van wat u probeert aan te passen.

Hieronder volgen een aantal voorbeelden:

Doel Actie
Aan uw persoonlijke voorkeur aanpassen welk artikel is gemarkeerd op een nieuwswebsite. Elke actie is een potentieel nieuwsartikel.
Advertentieplaatsing optimaliseren op een website. 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.
Stel elementen van de gebruikersinterface voor, zoals filters die moeten worden toegepast 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 boven aan een lijst met zoekresultaten wilt weergeven Elke actie is een van de belangrijkste zoekresultaten.

Acties laden vanuit de clienttoepassing

Functies van acties kunnen doorgaans afkomstig zijn van inhoudsbeheersystemen, 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 worden gewijzigd of elke keer worden geladen, heeft dit onnodige invloed op de prestaties, dan kunt u logica in uw toepassing toevoegen om deze informatie in de cache op te slaan.

Voorkomen dat acties worden gerangschikt

In sommige gevallen zijn er acties die u niet wilt weergeven voor gebruikers. De beste manier om te voorkomen dat een actie wordt gerangschikt, is door deze toe te voegen aan de lijst met uitgesloten acties of niet door te geven aan de rangschikkingsaanvraag.

In sommige gevallen wilt u mogelijk niet dat gebeurtenissen standaard worden getraind. Met andere woorden, u wilt alleen gebeurtenissen trainen wanneer aan een specifieke voorwaarde wordt voldaan. Het persoonlijke deel van uw webpagina bevindt zich bijvoorbeeld onder de vouw (gebruikers moeten schuiven voordat ze met de persoonlijke inhoud werken). In dit geval geeft u de hele pagina weer, maar wilt u alleen dat een gebeurtenis wordt getraind wanneer de gebruiker schuift en de mogelijkheid heeft om te communiceren met de persoonlijke inhoud. Voor deze gevallen moet u activering van gebeurtenissen uitstellen om te voorkomen dat standaardbelonings-gebeurtenissen (en training) worden toegewezen waarmee de eindgebruiker geen interactie heeft gehad.

Functies

Zowel de context als mogelijke acties worden beschreven met behulp van functies. De functies vertegenwoordigen alle informatie die u denkt, is belangrijk voor het besluitvormingsproces om beloningen te maximaliseren. Een goed uitgangspunt is om u voor te stellen dat u de taak hebt om de beste actie te selecteren bij elke tijdstempel en zich af te vragen: "Welke informatie moet ik nemen om een geïnformeerde beslissing te nemen? Welke informatie heb ik beschikbaar om de context en elke mogelijke actie te beschrijven?" Functies kunnen algemeen zijn of specifiek zijn voor een item.

Personalizer schrijft niet voor welke functies u kunt verzenden voor acties en context:

  • Na verloop van tijd kunt u functies over context en acties toevoegen en verwijderen. Personalizer blijft leren van beschikbare informatie.
  • Voor categorische functies hoeft u de mogelijke waarden niet vooraf te definiëren.
  • Voor numerieke functies hoeft u geen bereiken vooraf te definiëren.
  • Functienamen die beginnen met een onderstrepingsteken _ , worden genegeerd.
  • De lijst met functies kan groot zijn (honderden), maar we raden u aan te beginnen met een beknopte functieset en indien nodig uit te breiden.
  • actiefuncties hebben al dan niet een correlatie met contextfuncties .
  • Functies die niet beschikbaar zijn, moeten worden weggelaten uit de aanvraag. Als de waarde van een specifieke functie niet beschikbaar is voor een bepaalde aanvraag, laat u de functie voor deze aanvraag weg.
  • Vermijd het verzenden van functies met een null-waarde. Een null-waarde wordt verwerkt als een tekenreeks met een waarde 'null' die niet gewenst is.

Het is ok en natuurlijk voor functies om in de loop van de tijd te veranderen. Houd er echter rekening mee dat het machine learning-model van Personalizer wordt aangepast op basis van de functies die het ziet. Als u een aanvraag met alle nieuwe functies verzendt, kan het model van Personalizer geen gebruik maken van eerdere gebeurtenissen om de beste actie voor de huidige gebeurtenis te selecteren. Het hebben van een 'stabiele' functieset (met terugkerende functies) helpt de prestaties van de machine learning-algoritmen van Personalizer.

Contextfuncties

  • Sommige contextfuncties zijn mogelijk slechts een deel van de tijd beschikbaar. Als een gebruiker bijvoorbeeld is aangemeld bij de website van de online supermarkt, bevat de context functies die de aankoopgeschiedenis beschrijven. Deze functies zijn niet beschikbaar voor een gastgebruiker.
  • Er moet ten minste één contextfunctie zijn. Personalizer biedt geen ondersteuning voor een lege context.
  • Als de contextfuncties identiek zijn voor elke aanvraag, kiest Personalizer de beste actie.

Actiefuncties

  • Niet alle acties moeten dezelfde functies bevatten. In het scenario van de online supermarkt heeft microwavable popcorn bijvoorbeeld een "kooktijd" functie, terwijl een komkommer dat niet doet.
  • Functies voor een bepaalde actie-id zijn mogelijk één dag beschikbaar, maar later niet meer beschikbaar.

Voorbeelden:

Hieronder vindt u goede voorbeelden voor actiefuncties. Deze zijn afhankelijk van elke toepassing.

  • Kenmerken met kenmerken van de acties. Is het bijvoorbeeld een film of een tv-serie?
  • Functies over hoe gebruikers in het verleden met deze actie kunnen communiceren. Deze film wordt bijvoorbeeld meestal gezien door mensen in demografische gegevens A of B. Deze film wordt meestal niet meer dan één keer afgespeeld.
  • Functies over de kenmerken van hoe de gebruiker de acties ziet . Bevat de poster voor de film die in de miniatuur wordt weergegeven bijvoorbeeld gezichten, auto's of landschappen?

Ondersteunde functietypen

Personalizer ondersteunt functies van tekenreeks-, numerieke en Booleaanse typen. Het is waarschijnlijk dat uw toepassing meestal tekenreeksfuncties gebruikt, met een paar uitzonderingen.

Hoe functietypen van invloed zijn op machine learning in Personalizer

  • Tekenreeksen: Voor tekenreekstypen wordt elke combinatie van sleutelwaarde (functienaam, functiewaarde) behandeld als een one-hot-functie (bijvoorbeeld categorie:"Produceren" en categorie:"Vlees" wordt intern weergegeven als verschillende functies in het machine learning-model).
  • Numeriek: gebruik alleen numerieke waarden wanneer het getal een grootte is die proportioneel van invloed moet zijn op het persoonlijke resultaat. Dit is zeer afhankelijk van het scenario. 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 categorische tekenreeksen. Leeftijd kan bijvoorbeeld worden gecodeerd als 'Leeftijd':'0-5', 'Leeftijd':'6-10', enzovoort. Hoogte kan worden gesorteerd als 'Hoogte': '<5'0', 'Hoogte': '5'0-5'4', 'Hoogte': '5'5-5'11', 'Hoogte':'6'0-6-4', 'Hoogte':'>6'4'.
  • Booleaanse waarde
  • Alleen numerieke matrices worden ondersteund.

Functie-engineering

  • Gebruik categorische en tekenreekstypen voor functies die geen grootte hebben.
  • Zorg ervoor dat er voldoende functies zijn om persoonlijke instellingen te stimuleren. Hoe nauwkeuriger de inhoud moet zijn, hoe meer functies nodig zijn.
  • Er zijn functies van diverse dichtheden. Een functie is dicht als veel items in een paar buckets zijn gegroepeerd. Duizenden video's kunnen bijvoorbeeld worden geclassificeerd als 'Lang' (meer dan 5 minuten) en 'Kort' (minder dan 5 min. lang). Dit is een zeer dichte functie. Aan de andere kant kunnen dezelfde duizenden items een kenmerk hebben met de naam 'Titel', dat bijna nooit dezelfde waarde van het ene item naar het andere heeft. Dit is een zeer niet-dichte of sparse functie.

Als u functies van high-density hebt, kan Personalizer het leren van het ene item naar het andere extrapoleren. Maar als er slechts een paar functies zijn en ze te dicht zijn, probeert Personalizer inhoud nauwkeurig te richten met slechts een paar buckets waaruit u kunt kiezen.

Veelvoorkomende problemen met het ontwerp en de opmaak van functies

  • Functies met een hoge kardinaliteit verzenden. Functies met unieke waarden die waarschijnlijk niet worden herhaald over veel gebeurtenissen. PiI die bijvoorbeeld specifiek is voor één persoon (zoals naam, telefoonnummer, creditcardnummer, IP-adres) mag niet worden gebruikt met Personalizer.
  • Het is onwaarschijnlijk dat deze informatie relevant is voor Personalizer om de gemiddelde beloningsscore te maximaliseren door gebruikers-id's te verzenden met een groot aantal gebruikers. Het verzenden van gebruikers-id's (zelfs als niet-PII) waarschijnlijk meer ruis toevoegt aan het model en wordt niet aanbevolen.
  • Het verzenden van unieke waarden die zelden meer dan een paar keer voorkomen. Het is raadzaam om uw functies te bucketen naar een hoger detailniveau. Als u bijvoorbeeld functies zoals "Context.TimeStamp.Day":"Monday" of "Context.TimeStamp.Hour":13 nuttig hebt, zijn er slechts 7 en 24 unieke waarden. "Context.TimeStamp":"1985-04-12T23:20:50.52Z" Is echter zeer nauwkeurig en heeft een extreem groot aantal unieke waarden, waardoor het erg moeilijk is voor Personalizer om ermee te leren.

Functiesets verbeteren

Analyseer het gebruikersgedrag door een functie-evaluatietaak uit te voeren. Zo kunt u eerdere gegevens bekijken om te zien welke functies sterk bijdragen aan positieve beloningen versus 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 naar Personalizer moeten worden verzonden om de resultaten nog verder te verbeteren.

Functiesets uitbreiden met kunstmatige intelligentie en Azure AI-services

Kunstmatige intelligentie en kant-en-klare Azure AI-services kunnen een zeer krachtige aanvulling zijn op Personalizer.

Door uw items vooraf te verwerken met behulp van kunstmatige intelligentieservices, kunt u automatisch informatie extraheren die waarschijnlijk relevant is voor persoonlijke instellingen.

Bijvoorbeeld:

  • U kunt een filmbestand uitvoeren via Video Indexer om scène-elementen, tekst, sentiment en vele andere kenmerken te extraheren. Deze kenmerken kunnen vervolgens dichter worden gemaakt om kenmerken weer te geven die de oorspronkelijke metagegevens van het item niet hebben.
  • Afbeeldingen kunnen worden uitgevoerd via objectdetectie, gezichten via gevoel, enzovoort.
  • Informatie in tekst kan worden uitgebreid door entiteiten, sentiment en uitbreidende entiteiten te extraheren met Bing-kennisgrafiek.

U kunt verschillende andere Azure AI-services gebruiken, zoals

Insluitingen gebruiken als functies

Insluitingen van verschillende Machine Learning-modellen hebben bewezen invloed te hebben op functies voor Personalizer

  • Insluitingen van grote taalmodellen
  • Insluitingen van Azure AI Vision-modellen

Naamruimten

Optioneel kunnen functies worden georganiseerd met behulp van naamruimten (relevant voor zowel context- als actiefuncties). Naamruimten kunnen worden gebruikt om functies te groeperen op onderwerp, op bron of andere groeperingen die zinvol zijn in uw toepassing. U bepaalt of naamruimten worden gebruikt en wat ze moeten zijn. Naamruimten organiseren functies in verschillende sets en ondubbelzinnige functies met vergelijkbare namen. U kunt naamruimten beschouwen als een voorvoegsel dat wordt toegevoegd aan functienamen. Naamruimten mogen niet worden genest.

Hieronder ziet u voorbeelden van functienaamruimten die worden gebruikt door toepassingen:

  • User_Profile_from_CRM
  • Tijd
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • Weer
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Naamconventies en richtlijnen voor naamruimten

  • Naamruimten mogen niet worden genest.
  • Naamruimten moeten beginnen met unieke ASCII-tekens (we raden u aan namennaamruimten te gebruiken die zijn gebaseerd op UTF-8). Als u op dit moment naamruimten met dezelfde eerste tekens hebt, kan dit tot conflicten leiden. Het wordt daarom sterk aanbevolen om uw naamruimten te laten beginnen met tekens die van elkaar verschillen.
  • Naamruimten zijn hoofdlettergevoelig. Dit wordt bijvoorbeeld userUser beschouwd als verschillende naamruimten.
  • Functienamen kunnen worden herhaald in naamruimten en worden behandeld als afzonderlijke functies
  • De volgende tekens kunnen niet worden gebruikt: codes < 32 (niet afdrukbaar), 32 (spatie), 58 (dubbele punt), 124 (pijp) en 126-140.
  • Alle naamruimten die beginnen met een onderstrepingsteken _ , worden genegeerd.

JSON-voorbeelden

Acties

Wanneer u Rank aanroept, verzendt u meerdere acties waaruit u kunt 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
        }
      ]
    }
  ]
}

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": [
        {
            "state": {
                "timeOfDay": "noon",
                "weather": "sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true,
                "screensize": [1680,1050]
            }
        }
    ]
}

Naamruimten

In de volgende JSON, user, , environmenten deviceactivity zijn naamruimten.

Notitie

We raden u ten zeerste aan namen te gebruiken voor functienaamruimten die zijn gebaseerd op UTF-8 en beginnen met verschillende letters. Bijvoorbeeld, , , , en activity beginnen met u, e, d, en a. deviceenvironmentuser Het gebruik van naamruimten met dezelfde eerste tekens kan leiden tot conflicten.

{
    "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
            }
        }
    ]
}

Volgende stappen

Versterking leren