Funktioner är information om åtgärder och kontext
Tjänsten Personanpassare fungerar genom att lära sig vad ditt program ska visa för användare i en viss kontext.
Personanpassaren använder funktioner, som är information om den aktuella kontexten för att välja den bästa åtgärden. Funktionerna representerar all information som du tror kan hjälpa dig att anpassa för att uppnå högre förmåner. Funktioner kan vara mycket allmänna eller specifika för ett objekt.
Du kan till exempel ha en funktion om:
- Användarens persona, till exempel
Sports_Shopperen . Detta ska inte vara ett enskilt användar-ID. - Innehållet, till exempel om en video är en , en , eller en , eller om ett
DocumentaryMovieTV Seriesdetaljhandelsobjekt är tillgängligt i butiken. - Den aktuella tidsperioden, till exempel vilken dag i veckan det är.
Personanpassaren begränsar inte, begränsar eller åtgärdar inte vilka funktioner du kan skicka för åtgärder och kontext:
- Du kan skicka vissa funktioner för vissa åtgärder och inte för andra, om du inte har dem. TV-serien kan till exempel ha attribut som filmer inte har.
- Du kan ha vissa funktioner som bara är tillgängliga vissa gånger. Ett mobilprogram kan till exempel ge mer information än en webbsida.
- Med tiden kan du lägga till och ta bort funktioner om kontext och åtgärder. Personanpassare fortsätter att lära sig av tillgänglig information.
- Det måste finnas minst en funktion för kontexten. Personanpassaren stöder inte en tom kontext. Om du bara skickar en fast kontext varje gång väljer Personanpassaren åtgärden för rangordning endast för funktionerna i åtgärderna.
- För kategoriska funktioner behöver du inte definiera möjliga värden och du behöver inte definiera intervall för numeriska värden i förväg.
Funktionstyper som stöds
Personanpassare stöder funktioner för strängtyper, numeriska och booleska typer. Det är mycket troligt att programmet främst kommer att använda strängfunktioner, med några få undantag.
Hur val av funktionstyp påverkar Machine Learning i Personanpassare
- Strängar: För strängtyper behandlas varje kombination av nyckel och värde som en One-Hot-funktion (t.ex. genre:"ScienceFiction" och genre:"Documentary" skulle skapa två nya indatafunktioner för maskininlärningsmodellen.
- Numeriskt: Du bör använda numeriska värden när talet är en omfattning som proportionellt bör påverka anpassningsresultatet. Detta är mycket scenarioberoende. I ett förenklat exempel, till exempel när du personiserar en detaljhandelsupplevelse, kan NumberOfPetsOwned vara en funktion som är numerisk eftersom du kanske vill att personer med 2 eller 3 husdjur ska påverka anpassningsresultatet två gånger eller tre gånger så mycket som att ha ett husdjur. Funktioner som baseras på numeriska enheter men där innebörden inte är linjär – till exempel Ålder, Temperatur eller Personhöjd – är bäst kodade som strängar. DayOfMonth skulle till exempel vara en sträng med "1","2"..."31". Om du har många kategorier kan funktionskvaliteten vanligtvis förbättras med hjälp av intervall. Ålder kan till exempel kodas som "Ålder":"0-5", "Ålder":"6-10" osv.
- Booleska värden som skickas med värdet "false" fungerar som om de inte hade skickats alls.
Funktioner som inte finns bör utelämnas från begäran. Undvik att skicka funktioner med ett null-värde, eftersom det bearbetas som befintligt och med värdet "null" när modellen tränas.
Kategorisera funktioner med namnområden
Personanpassaren tar in funktioner som är ordnade i namnrymder. I ditt program avgör du om namnrymder används och vad de ska vara. Namnrymder används för att gruppera funktioner om ett liknande ämne eller funktioner som kommer från en viss källa.
Följande är exempel på funktionsnamnrymder som används av program:
- User_Profile_from_CRM
- Tid
- Mobile_Device_Info
- http_user_agent
- VideoResolution
- UserDeviceInfo
- Vädret
- Product_Recommendation_Ratings
- current_time
- NewsArticle_TextAnalytics
Du kan namnge funktionsnamnrymder enligt dina egna konventioner så länge de är giltiga JSON-nycklar. Namnrymder används för att organisera funktioner i distinkta uppsättningar och för att särskilja funktioner med liknande namn. Du kan tänka på namnrymder som ett "prefix" som läggs till i funktionsnamnen. Namnrymder kan inte kapslas.
I följande JSON är user , environment , och device activity funktionsnamnrymder.
Anteckning
För närvarande rekommenderar vi starkt att du använder namn för funktionsnamnrymder som är UTF-8-baserade och börjar med olika bokstäver. Till exempel user , , och börja med , , och environment device activity u e d a . För närvarande kan namnrymder med samma första tecken resultera i kollisioner i index som används för maskininlärning.
JSON-objekt kan innehålla kapslade JSON-objekt och enkla egenskap/värden. En matris kan bara inkluderas om matrisobjekten är tal.
{
"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
}
}
]
}
Begränsningar i teckenuppsättningar för namnområden
Strängen som du använder för att namnge namnområdet måste följa vissa begränsningar:
- Det kan inte vara Unicode.
- Du kan använda några av de utskrivbara symbolerna med koderna < 256 som namnområdesnamn.
- Du kan inte använda symboler med koderna < 32 (kan inte skrivas ut), 32 (blanksteg), 58 (kolon), 124 (pipe) och 126–140.
- Det bör inte börja med ett understreck "_" annars ignoreras funktionen.
Så här gör du funktionsuppsättningar mer effektiva för personanpassare
En bra funktionsuppsättning hjälper Personanpassare att lära sig att förutsäga vilken åtgärd som kommer att ge högsta möjliga belöning.
Överväg att skicka funktioner till API:et För personanpassare rankning som följer dessa rekommendationer:
Använd kategoriska typer och strängtyper för funktioner som inte är så stora.
Det finns tillräckligt med funktioner för anpassning. Ju mer exakt riktad innehållet måste vara, desto fler funktioner behövs.
Det finns tillräckligt med funktioner för olika tätheter. En funktion är kompakt om många objekt grupperas i några buckets. Till exempel kan tusentals videor klassificeras som "Long" (över 5 min lång) och "Kort" (mindre än 5 min lång). Det här är en mycket kompakt funktion. Å andra sidan kan samma tusentals objekt ha ett attribut som kallas "Rubrik", som nästan aldrig har samma värde från ett objekt till ett annat. Det här är en mycket icke-kompakt eller gles funktion.
Med funktioner med hög densitet kan Personanpassaren extrapolera inlärningen från ett objekt till ett annat. Men om det bara finns några få funktioner och de är för kompakta försöker Personanpassaren rikta in sig på innehåll med bara några få buckets att välja mellan.
Förbättra funktionsuppsättningar
Analysera användarbeteendet genom att göra en offlineutvärdering. På så sätt kan du titta på tidigare data för att se vilka funktioner som kraftigt bidrar till positiva förmåner jämfört med de som bidrar mindre. Du kan se vilka funktioner som hjälper och det är upp till dig och ditt program att hitta bättre funktioner att skicka till Personanpassare för att förbättra resultaten ytterligare.
Följande avsnitt är vanliga metoder för att förbättra funktioner som skickas till Personanpassare.
Gör funktionerna mer kompakta
Du kan förbättra funktionsuppsättningarna genom att redigera dem så att de blir större och mer eller mindre kompakta.
En tidsstämpel ned till den andra är till exempel en mycket gles funktion. Den kan göras mer kompakt (effektiv) genom att klassificera tiderna till "morgon", "midday", "lunch" osv.
Platsinformation har också vanligtvis fördelar med att skapa bredare klassificeringar. Till exempel är en Latitude-Longitude koordinat som Lat: 47.67402° N, Long: 122.12154° W för exakt och tvingar modellen att lära sig latitud och longitud som distinkta dimensioner. När du försöker anpassa baserat på platsinformation hjälper det till att gruppera platsinformation i större sektorer. Ett enkelt sätt att göra det är att välja en lämplig avrundningsprecision för Lat-Long-talen och kombinera latitud och longitud i "områden" genom att göra dem till en sträng. Ett bra sätt att representera 47,67402° N, Long: 122.12154° W i regioner som är cirka ett par kilometer brett är till exempel "location":"34.3 , 12.1".
Expandera funktionsuppsättningar med extrapolerad information
Du kan också få fler funktioner genom att tänka på outforskade attribut som kan härledas från information som du redan har. Är det till exempel möjligt i en fiktiv personanpassning av filmlistan att ett helg- eller veckodagsbeteende skiljer sig från användarna? Tiden kan utökas med attributet "helg" eller "weekday". Kan vissa filmtyper uppmärksammas på nationella kulturella helgdagar? Till exempel är attributet "Attribut" användbart på platser där det är relevant. Är det möjligt att regnvädret har stor inverkan på många personers val av film? Med tid och plats kan en vädertjänst tillhandahålla den informationen och du kan lägga till den som en extra funktion.
Utöka funktionsuppsättningar med artificiell intelligens och kognitiva tjänster
Artificiell intelligens och körklara Cognitive Services kan vara ett mycket kraftfullt tillägg till Personanpassaren.
Genom att förbearbeta dina objekt med hjälp av tjänster för artificiell intelligens kan du automatiskt extrahera information som sannolikt är relevant för personanpassning.
Exempel:
- Du kan köra en filmfil via Video Indexer för att extrahera scenelement, text, sentiment och många andra attribut. Dessa attribut kan sedan göras mer kompakta för att återspegla egenskaper som det ursprungliga objektets metadata inte hade.
- Bilder kan köras genom objektidentifiering, ansikten via sentiment osv.
- Information i text kan utökas genom att extrahera entiteter, sentiment, expanderande entiteter Bing ett kunskapsdiagram osv.
Du kan använda flera andra Azure Cognitive Services,som
Åtgärder representerar en lista med alternativ
Varje åtgärd:
- Har ett händelse-ID. Om du redan har ett händelse-ID bör du skicka det. Om du inte har ett händelse-ID ska du inte skicka ett. Personanpassare skapar ett åt dig och returnerar det som svar på Rank-begäran. ID:t är associerat med Rank-händelsen, inte användaren. Om du skapar ett ID fungerar guid bäst.
- Innehåller en lista över funktioner.
- Listan över funktioner kan vara stor (hundratals), men vi rekommenderar att du utvärderar funktionseffektivitet för att ta bort funktioner som inte bidrar till att få förmåner.
- Funktionerna i åtgärderna kanske eller kanske inte har någon korrelation med funktioner i den kontext som används av Personanpassaren.
- Funktioner för åtgärder kan finnas i vissa åtgärder och inte andra.
- Funktioner för ett visst åtgärds-ID kan vara tillgängliga en dag, men senare blir otillgängliga.
Personanpassarnas maskininlärningsalgoritmer presterar bättre när det finns stabila funktionsuppsättningar, men Rank-anrop misslyckas inte om funktionsuppsättningen ändras över tid.
Skicka inte in fler än 50 åtgärder när du rangordnar åtgärder. Det kan vara samma 50 åtgärder varje gång, eller så kan de ändras. Om du till exempel har en produktkatalog med 10 000 objekt för ett e-handelsprogram kan du använda en rekommendations- eller filtreringsmotor för att fastställa de 40 främsta som en kund kan gilla och använda Personanpassare för att hitta den som genererar mest belöning (till exempel lägger användaren till i kundvagnen) för den aktuella kontexten.
Exempel på åtgärder
Vilka åtgärder du skickar till Rank-API:et beror på vad du försöker anpassa.
Här är några exempel:
| Syfte | Åtgärd |
|---|---|
| Anpassa vilken artikel som är markerad på en nyhetswebbplats. | Varje åtgärd är en potentiell nyhetsartikel. |
| Optimera annonsplacering på en webbplats. | Varje åtgärd är en layout eller regler för att skapa en layout för annonserna (till exempel överst, till höger, små bilder, stora bilder). |
| Visa anpassad rangordning av rekommenderade objekt på en shoppingwebbplats. | Varje åtgärd är en specifik produkt. |
| Föreslå element i användargränssnittet, till exempel filter som ska tillämpas på ett visst foto. | Varje åtgärd kan vara ett annat filter. |
| Välj en chattrobots svar för att förtydliga användarens avsikt eller föreslå en åtgärd. | Varje åtgärd är ett alternativ för att tolka svaret. |
| Välj vad som ska visas överst i en lista med sökresultat | Varje åtgärd är ett av de främsta sökresultaten. |
Exempel på funktioner för åtgärder
Följande är bra exempel på funktioner för åtgärder. Dessa beror mycket på varje program.
- Funktioner med egenskaper för åtgärderna. Är det till exempel en film eller en TV-serie?
- Funktioner om hur användare kan ha interagerat med den här åtgärden tidigare. Den här filmen visas till exempel främst av personer i demografi A eller B, den spelas vanligtvis inte mer än en gång.
- Funktioner om egenskaperna för hur användaren ser åtgärderna. Innehåller till exempel affischen för filmen som visas i miniatyrbilden ansikten, bilar eller landskap?
Läs in åtgärder från klientprogrammet
Funktioner från åtgärder kan vanligtvis komma från innehållshanteringssystem, kataloger och rekommendationssystem. Ditt program ansvarar för att läsa in information om åtgärderna från relevanta databaser och system som du har. Om dina åtgärder inte ändras eller läses in varje gång har en onödig inverkan på prestanda kan du lägga till logik i ditt program för att cachelagra den här informationen.
Förhindra att åtgärder rangordnas
I vissa fall finns det åtgärder som du inte vill visa för användarna. Det bästa sättet att förhindra att en åtgärd rangordnas som den översta är att inte inkludera den i åtgärdslistan till Rank-API:et från början.
I vissa fall kan det bara fastställas senare i din affärslogik om en resulterande åtgärd av ett Rank API-anrop ska visas för en användare. I dessa fall bör du använda Inaktiva händelser.
JSON-format för åtgärder
När du anropar Rank skickar du flera åtgärder att välja mellan:
JSON-objekt kan innehålla kapslade JSON-objekt och enkla egenskap/värden. En matris kan bara inkluderas om matrisobjekten är tal.
{
"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
}
]
}
]
}
Exempel på kontextinformation
Information för kontexten beror på varje program och användningsfall, men den kan vanligtvis innehålla information som:
- Demografisk information och profilinformation om din användare.
- Information som extraheras från HTTP-huvuden som användaragent eller härleds från HTTP-information, till exempel omvända geografiska uppslag baserat på IP-adresser.
- Information om aktuell tid, till exempel veckodag, helg eller inte, morgon eller helgdag, helgdag eller inte osv.
- Information som extraheras från mobila program, till exempel plats, rörelse eller batterinivå.
- Historiska aggregat av användarnas beteende – till exempel vilka filmgenreer som användaren har sett mest.
Programmet ansvarar för att läsa in information om kontexten från relevanta databaser, sensorer och system som du kan ha. Om kontextinformationen inte ändras kan du lägga till logik i ditt program för att cachelagra den här informationen innan du skickar den till Rank-API:et.
JSON-format för kontext
Kontexten uttrycks som ett JSON-objekt som skickas till Rank-API:et:
JSON-objekt kan innehålla kapslade JSON-objekt och enkla egenskap/värden. En matris kan bara inkluderas om matrisobjekten är tal.
{
"contextFeatures": [
{
"user": {
"name":"Doug"
}
},
{
"state": {
"timeOfDay": "noon",
"weather": "sunny"
}
},
{
"device": {
"mobile":true,
"Windows":true,
"screensize": [1680,1050]
}
}
}
]
}