Kontext a akce
Důležité
Od 20. září 2023 nebudete moct vytvářet nové prostředky personalizace. Služba Personalizace se vyřadí z provozu 1. října 2026.
Personalizace funguje tak, že se naučíte, co by aplikace měla uživatelům v daném kontextu ukázat. Kontext a akce jsou dvěma nejdůležitějšími informacemi, které předáte personalizaci. Kontext představuje informace o aktuálním uživateli nebo stavu systému a akce, ze kterých se mají vybírat.
Kontext
Informace pro kontext závisí na jednotlivých aplikacích a případech použití, ale obvykle můžou obsahovat například tyto informace:
- Demografické údaje a profilové informace o vašem uživateli.
- Informace extrahované z hlaviček HTTP, jako je uživatelský agent, nebo odvozené z informací HTTP, jako jsou zpětné geografické vyhledávání na základě IP adres.
- Informace o aktuálním čase, jako je den v týdnu, víkend nebo ne, ráno nebo odpoledne, svátek nebo ne atd.
- Informace extrahované z mobilních aplikací, jako je umístění, pohyb nebo úroveň baterie.
- Historické agregace chování uživatelů – například jaké jsou filmové žánry, které si tento uživatel prohlížel nejvíce.
- Informace o stavu systému.
Vaše aplikace zodpovídá za načítání informací o kontextu z příslušných databází, senzorů a systémů, které můžete mít. Pokud se vaše kontextové informace nezmění, můžete do aplikace přidat logiku, která tyto informace uloží do mezipaměti, a teprve potom je odeslat do rozhraní Rank API.
Akce
Akce představují seznam možností.
Při akcích řazení neposílejte více než 50 akcí. Může se jednat o stejné 50 akcí pokaždé nebo se můžou změnit. Pokud máte například katalog produktů s 10 000 položkami pro aplikaci elektronického obchodování, můžete použít doporučení nebo filtrovací modul k určení 40 nejlepších zákazníků, který se může líbit, a pomocí personalizace najít ten, který vygeneruje nejvyšší odměnu pro aktuální kontext.
Příklady akcí
Akce, které odešlete do rozhraní Rank API, budou záviset na tom, co se pokoušíte přizpůsobit.
Několik příkladů:
Účel | Akce |
---|---|
Přizpůsobit, který článek je zvýrazněný na informačním webu. | Každá akce je potenciálním příspěvkem. |
Optimalizujte umístění reklam na webu. | Každá akce bude rozložení nebo pravidla pro vytvoření rozložení pro reklamy (například nahoře, vpravo, malé obrázky, velké obrázky). |
Umožňuje zobrazit přizpůsobené hodnocení doporučených položek na nákupním webu. | Každá akce je konkrétní produkt. |
Navrhněte prvky uživatelského rozhraní, jako jsou filtry, které se mají použít na konkrétní fotografii. | Každá akce může být jiný filtr. |
Zvolte odpověď chatovacího chatbota, abyste objasnili záměr uživatele nebo navrhli akci. | Každá akce je možnost, jak interpretovat odpověď. |
Zvolte, co se má zobrazit v horní části seznamu výsledků hledání. | Každá akce je jedním z prvních několika výsledků hledání. |
Načtení akcí z klientské aplikace
Funkce z akcí můžou obvykle pocházet ze systémů pro správu obsahu, katalogů a doporučených systémů. Vaše aplikace zodpovídá za načítání informací o akcích z příslušných databází a systémů, které máte. Pokud se vaše akce nemění nebo nenačítají pokaždé, když mají zbytečný dopad na výkon, můžete do aplikace přidat logiku, která tyto informace uloží do mezipaměti.
Zabránění seřazení akcí
V některých případech existují akce, které nechcete uživatelům zobrazovat. Nejlepší způsob, jak zabránit seřazení akce, je přidat ji do seznamu vyloučených akcí nebo ji nepředávejte do žádosti o pořadí.
V některých případech možná nebudete chtít, aby se události ve výchozím nastavení natrénovaly. Jinými slovy, chcete trénovat události pouze v případě splnění konkrétní podmínky. Přizpůsobená část webové stránky je například pod záhybem (uživatelé se musí před interakcí s přizpůsobeným obsahem posouvat). V takovém případě vykreslíte celou stránku, ale chcete, aby se událost natrénovala jenom tehdy, když se uživatel posune a má možnost pracovat s přizpůsobeným obsahem. V těchto případech byste měli odložit aktivaci události, abyste se vyhnuli přiřazení výchozích událostí odměny (a školení), se kterými by koncový uživatel neměl šanci pracovat.
Funkce
Kontext i možné akce jsou popsány pomocí funkcí. Funkce představují všechny informace, které si myslíte, že je důležité pro rozhodovací proces maximalizovat odměny. Dobrým výchozím bodem je představit si, že máte za úkol vybrat nejlepší akci v každém časovém razítku a zeptat se sami sebe: "Jaké informace potřebuji k informovanému rozhodnutí? Jaké informace mám k dispozici k popisu kontextu a každé možné akce?" Funkce můžou být obecné nebo specifické pro položku.
Personalizace předepisuje, omezuje ani opravuje funkce, které můžete odesílat pro akce a kontext:
- V průběhu času můžete přidávat a odebírat funkce týkající se kontextu a akcí. Personalizace se dál učí z dostupných informací.
- U kategorických funkcí není nutné předem definovat možné hodnoty.
- U číselných funkcí není nutné předem definovat rozsahy.
- Názvy funkcí začínající podtržítkem
_
budou ignorovány. - Seznam funkcí může být velký (stovky), ale doporučujeme začít stručnou sadou funkcí a podle potřeby ji rozšířit.
- Funkce akcí můžou nebo nemusí mít žádnou korelaci s kontextovými funkcemi.
- Funkce, které nejsou k dispozici, by se z požadavku neměly vynechat. Pokud pro danou žádost není k dispozici hodnota konkrétní funkce, vynecháte funkci pro tento požadavek.
- Vyhněte se odesílání funkcí s hodnotou null. Hodnota null se zpracuje jako řetězec s hodnotou null, která není žádoucí.
Je v pořádku a přirozené, aby se funkce v průběhu času měnily. Mějte ale na paměti, že model strojového učení personalizace se přizpůsobí na základě funkcí, které vidí. Pokud odešlete žádost obsahující všechny nové funkce, model Personalizace nebude moct použít minulé události k výběru nejlepší akce pro aktuální událost. Když máte sadu stabilních funkcí (s opakovanými funkcemi), pomůže vám to dosáhnout výkonu algoritmů strojového učení personalizace.
Kontextové funkce
- Některé kontextové funkce můžou být dostupné jenom v rámci času. Pokud je například uživatel přihlášený k webu online obchodu s potravinami, kontext bude obsahovat funkce popisující historii nákupů. Tyto funkce nebudou dostupné pro uživatele typu host.
- Musí existovat alespoň jedna kontextová funkce. Personalizace nepodporuje prázdný kontext.
- Pokud jsou kontextové funkce pro každý požadavek stejné, personalizace zvolí globálně nejlepší akci.
Funkce akcí
- Ne všechny akce musí obsahovat stejné funkce. Například ve scénáři online obchodu s potravinami bude mít mikrowavable popcorn funkci "doba vaření", zatímco neochvějné nebude.
- Funkce pro určité ID akce můžou být k dispozici jeden den, ale později přestanou být dostupné.
Příklady:
Následující příklady jsou vhodné pro funkce akcí. To bude záviset hodně na každé aplikaci.
- Funkce s charakteristikami akcí Jedná se například o film nebo televizní seriál?
- Funkce týkající se interakce uživatelů s touto akcí v minulosti Tento film je například většinou vidět lidmi v demografických znacích A nebo B, obvykle se nehraje víc než jednou.
- Funkce týkající se charakteristik způsobu zobrazení akcí uživatelem Obsahuje například plakát pro film zobrazený v miniaturě tváře, auta nebo krajiny?
Podporované typy funkcí
Personalizace podporuje funkce řetězců, číselných a logických typů. Je pravděpodobné, že vaše aplikace bude většinou používat funkce řetězců s několika výjimkami.
Vliv typů funkcí na strojové učení v personalizaci
- Řetězce: U typů řetězců se každá kombinace klíč-hodnota (název funkce, hodnota funkce) považuje za jednorázovou funkci (například category:"Plodiny" a kategorie:"Maso" by byla interně reprezentována jako různé funkce v modelu strojového učení).
- Číselné: Číselné hodnoty používejte pouze v případě, že je číslo velikostí, která by měla proporcionálně ovlivnit výsledek přizpůsobení. To je velmi závislé na scénáři. Funkce, které jsou založené na číselných jednotkách, ale kde význam není lineární – například Věk, Teplota nebo Výška osoby – jsou nejlépe kódované jako kategorické řetězce. Například Věk může být kódován jako "Age":"0-5", "Age":"6-10" atd. Výška může být rozdělená na výšku: "<5'0", "Výška": "5'0-5'4", "Výška": "5'5-5'11", "Výška":"6-6-4", "Výška":"6'4", "Výška":">6'4".
- Logická hodnota
- Jsou podporována pouze číselná pole.
Příprava atributů
- Pro funkce, které nejsou velikostí, použijte kategorické typy a typy řetězců.
- Ujistěte se, že je k dispozici dostatek funkcí pro přizpůsobení. Přesněji cílený obsah musí být, tím více funkcí je potřeba.
- Existují různé funkce hustoty. Funkce je hustá , pokud je mnoho položek seskupených do několika kbelíků. Například tisíce videí se dají klasifikovat jako Dlouhé (delší než 5 minut) a Krátké (méně než 5 min). To je velmi hustá funkce. Na druhé straně můžou mít stejné tisíce položek atribut s názvem "Název", který téměř nikdy nebude mít stejnou hodnotu z jedné položky do druhé. Jedná se o velmi nehotustnou nebo řídkou funkci.
Funkce s vysokou hustotou pomáhají personalizaci extrapolovat učení z jedné položky do druhé. Pokud ale existuje jen několik funkcí a jsou příliš zhuštěné, personalizace se pokusí přesně cílit na obsah s několika kbelíky, ze kterého si můžete vybrat.
Běžné problémy s návrhem a formátováním funkcí
- Odesílání funkcí s vysokou kardinalitou Funkce s jedinečnými hodnotami, které se pravděpodobně neopakují v průběhu mnoha událostí. Osobní údaje specifické například pro jednoho jednotlivce (například jméno, telefonní číslo, číslo platební karty, IP adresa) by se nemělo používat s personalizátorem.
- Odesílání ID uživatelů s velkým počtem uživatelů je nepravděpodobné, že by tyto informace byly relevantní pro výuku personalizace, aby se maximalizovalo průměrné skóre odměny. Odesílání ID uživatelů (i když není PII) pravděpodobně do modelu přidá další šum a nedoporučuje se.
- Odesílání jedinečných hodnot, které se zřídka vyskytují více než několikrát. Doporučujeme, abyste své funkce rozsaděli na vyšší úroveň podrobností. Například funkce, jako
"Context.TimeStamp.Day":"Monday"
jsou nebo"Context.TimeStamp.Hour":13
mohou být užitečné, protože existují pouze 7 a 24 jedinečných hodnot v uvedeném pořadí. Je však"Context.TimeStamp":"1985-04-12T23:20:50.52Z"
velmi přesný a má extrémně velký počet jedinečných hodnot, což velmi ztěžuje učení personalizátoru.
Vylepšení sad funkcí
Analyzujte chování uživatele spuštěním úlohy vyhodnocení funkce. Díky tomu se můžete podívat na předchozí data a zjistit, jaké funkce výrazně přispívají k pozitivním odměnám a těm, které přispívají méně. Můžete zjistit, jaké funkce pomáhají, a bude na vás a vaší aplikaci, abyste našli lepší funkce, které se mají poslat personalizaci, aby se výsledky ještě více zlepšily.
Rozšíření sad funkcí pomocí umělé inteligence a služeb Azure AI
Umělá inteligence a připravené služby Azure AI mohou být velmi výkonným doplňkem personalizace.
Předzpracováním položek pomocí služeb umělé inteligence můžete automaticky extrahovat informace, které budou pravděpodobně relevantní pro přizpůsobení.
Příklad:
- Pomocí Video Indexeru můžete spustit videosoubor, který extrahuje prvky scény, text, mínění a mnoho dalších atributů. Tyto atributy je pak možné ztěžovat tak, aby odrážely charakteristiky, které metadata původní položky neměla.
- Obrázky můžou být spouštěné rozpoznáváním objektů, tvářemi prostřednictvím mínění atd.
- Informace v textu je možné rozšířit extrahováním entit, mínění a rozbalením entit pomocí grafu znalostí Bingu.
Můžete použít několik dalších služeb Azure AI, například
Použití vkládání jako funkcí
Vkládání z různých modelů Machine Learning se ukázalo jako ovlivněné funkce pro personalizaci.
- Vkládání z rozsáhlých jazykových modelů
- Vkládání z modelů azure AI Vision
Obory názvů
Volitelně je možné funkce uspořádat pomocí oborů názvů (relevantní pro kontextové i akční funkce). Obory názvů se dají použít k seskupení funkcí podle tématu, podle zdroje nebo libovolného jiného seskupení, které ve vaší aplikaci dává smysl. Určíte, jestli se používají obory názvů a jaké mají být. Obory názvů uspořádají funkce do různých sad a nejednoznačné funkce s podobnými názvy. Obory názvů si můžete představit jako předponu přidanou do názvů funkcí. Obory názvů by neměly být vnořené.
Tady jsou příklady oborů názvů funkcí používaných aplikacemi:
- User_Profile_from_CRM
- Čas
- Mobile_Device_Info
- http_user_agent
- VideoResolution
- Informace o zařízení
- Počasí
- Product_Recommendation_Ratings
- current_time
- NewsArticle_TextAnalytics
Namespace konvence a pokyny pro vytváření názvů
- Obory názvů by neměly být vnořené.
- Obory názvů musí začínat jedinečnými znaky ASCII (doporučujeme používat názvy oborů názvů, které jsou založené na UTF-8). V současné době může mít obory názvů se stejnými prvními znaky za následek kolize, proto důrazně doporučujeme, aby vaše obory názvů začínaly znaky, které se vzájemně liší.
- Obory názvů rozlišují malá a velká písmena. Budou se například
user
User
považovat za různé obory názvů. - Názvy funkcí se dají opakovat napříč obory názvů a budou považovány za samostatné funkce.
- Následující znaky nelze použít: kódy < 32 (netisknutelné), 32 (mezera), 58 (dvojtečka), 124 (potrubí) a 126–140.
- Všechny obory názvů začínající podtržítkem
_
budou ignorovány.
Příklady JSON
Akce
Při volání Rank budete posílat více akcí, ze které si můžete vybrat:
Objekty JSON můžou zahrnovat vnořené objekty JSON a jednoduché vlastnosti/hodnoty. Pole lze zahrnout pouze v případě, že jsou položky pole čísly.
{
"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
}
]
}
]
}
Kontext
Kontext se vyjadřuje jako objekt JSON, který se odesílá do rozhraní Rank API:
Objekty JSON můžou zahrnovat vnořené objekty JSON a jednoduché vlastnosti/hodnoty. Pole lze zahrnout pouze v případě, že jsou položky pole čísly.
{
"contextFeatures": [
{
"state": {
"timeOfDay": "noon",
"weather": "sunny"
}
},
{
"device": {
"mobile":true,
"Windows":true,
"screensize": [1680,1050]
}
}
]
}
Obory názvů
V následujícím kódu JSON, user
, environment
, device
a activity
jsou obory názvů.
Poznámka:
Důrazně doporučujeme používat názvy pro obory názvů funkcí, které jsou založené na UTF-8 a začínají různými písmeny. Například , , , a začínat na u
, e
, d
, a a
.activity
device
environment
user
V současné době můžou mít obory názvů se stejnými prvními znaky za následek kolize.
{
"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
}
}
]
}