Contexto e ações
Importante
A partir de 20 de setembro de 2023, você não poderá criar novos recursos do Personalizador. O serviço de Personalizador será aposentado no dia 1º de outubro de 2026.
O Personalizer funciona aprendendo o que seu aplicativo deve mostrar aos usuários em um determinado contexto. Contexto e ações são as duas informações mais importantes que você passa para o Personalizador. O contexto representa as informações que você tem sobre o usuário atual ou o estado do seu sistema, e as ações são as opções a serem escolhidas.
Contexto
As informações para o contexto dependem de cada aplicativo e caso de uso, mas normalmente podem incluir informações como:
- Informações demográficas e de perfil sobre seu usuário.
- Informações extraídas de cabeçalhos HTTP, como agente de usuário, ou derivadas de informações HTTP, como pesquisas geográficas inversas com base em endereços IP.
- Informações sobre o horário atual, como dia da semana, fim de semana ou não, manhã ou tarde, feriado ou não, etc.
- Informações extraídas de aplicativos móveis, como localização, movimento ou nível de bateria.
- Agregados históricos do comportamento dos usuários - como quais são os gêneros de filmes que esse usuário mais visualizou.
- Informações sobre o estado do sistema.
Seu aplicativo é responsável por carregar as informações sobre o contexto dos bancos de dados, sensores e sistemas relevantes que você possa ter. Se as informações de contexto não forem alteradas, você poderá adicionar lógica em seu aplicativo para armazenar essas informações em cache antes de enviá-las para a API de classificação.
Ações
As ações representam uma lista de opções.
Não envie mais de 50 ações ao classificar ações. Podem ser as mesmas 50 ações de cada vez, ou podem mudar. Por exemplo, se você tiver um catálogo de produtos de 10.000 itens para um aplicativo de comércio eletrônico, poderá usar um mecanismo de recomendação ou filtragem para determinar os 40 principais itens que um cliente pode gostar e usar o Personalizador para encontrar aquele que gerará mais recompensa para o contexto atual.
Exemplos de ações
As ações que você enviar para a API de classificação dependerão do que você está tentando personalizar.
Seguem-se alguns exemplos:
Propósito | Ação |
---|---|
Personalize qual artigo está destacado em um site de notícias. | Cada ação é uma potencial notícia. |
Otimize o posicionamento do anúncio em um site. | Cada ação será um layout ou regras para criar um layout para os anúncios (por exemplo, na parte superior, à direita, imagens pequenas, imagens grandes). |
Exiba uma classificação personalizada dos itens recomendados em um site de compras. | Cada ação é um produto específico. |
Sugira elementos da interface do usuário, como filtros, para aplicar a uma foto específica. | Cada ação pode ser um filtro diferente. |
Escolha a resposta de um bot de chat para esclarecer a intenção do usuário ou sugerir uma ação. | Cada ação é uma opção de como interpretar a resposta. |
Escolha o que mostrar na parte superior de uma lista de resultados de pesquisa | Cada ação é um dos principais resultados de pesquisa. |
Carregar ações do aplicativo cliente
Os recursos das ações normalmente podem vir de sistemas de gerenciamento de conteúdo, catálogos e sistemas de recomendação. Seu aplicativo é responsável por carregar as informações sobre as ações dos bancos de dados e sistemas relevantes que você tem. Se suas ações não forem alteradas ou carregá-las toda vez tiver um impacto desnecessário no desempenho, você poderá adicionar lógica em seu aplicativo para armazenar essas informações em cache.
Impedir que as ações sejam classificadas
Em alguns casos, há ações que você não deseja exibir aos usuários. A melhor maneira de evitar que uma ação seja classificada é adicioná-la à lista Ações excluídas ou não passá-la para a Solicitação de classificação.
Em alguns casos, talvez você não queira que os eventos sejam treinados por padrão. Em outras palavras, você só quer treinar eventos quando uma condição específica é atendida. Por exemplo, a parte personalizada da sua página da Web está abaixo da dobra (os usuários precisam rolar antes de interagir com o conteúdo personalizado). Nesse caso, você renderizará a página inteira, mas só desejará que um evento seja treinado quando o usuário rolar e tiver a chance de interagir com o conteúdo personalizado. Para esses casos, você deve adiar a ativação de eventos para evitar atribuir eventos de recompensa (e treinamento) padrão com os quais o usuário final não teve a chance de interagir.
Funcionalidades
Tanto o contexto quanto as possíveis ações são descritas usando recursos. Os recursos representam todas as informações que você acha importantes para o processo de tomada de decisão para maximizar as recompensas. Um bom ponto de partida é imaginar que você tem a tarefa de selecionar a melhor ação em cada carimbo de data/hora e se perguntar: "De que informações preciso para tomar uma decisão informada? Que informações tenho disponíveis para descrever o contexto e cada ação possível?" Os recursos podem ser genéricos ou específicos de um item.
O Personalizador não prescreve, limita ou corrige quais recursos você pode enviar para ações e contexto:
- Com o tempo, você pode adicionar e remover recursos sobre contexto e ações. O personalizador continua a aprender com as informações disponíveis.
- Para recursos categóricos, não há necessidade de pré-definir os valores possíveis.
- Para recursos numéricos, não há necessidade de pré-definir intervalos.
- Os nomes de recursos que começam com um sublinhado
_
serão ignorados. - A lista de recursos pode ser grande (centenas), mas recomendamos começar com um conjunto de recursos conciso e expandir conforme necessário.
- Os recursos de ação podem ou não ter qualquer correlação com os recursos de contexto .
- Os recursos que não estão disponíveis devem ser omitidos da solicitação. Se o valor de um recurso específico não estiver disponível para uma determinada solicitação, omita o recurso para essa solicitação.
- Evite enviar recursos com um valor nulo. Um valor nulo será processado como uma cadeia de caracteres com um valor de "null" que não é desejado.
É ok e natural que os recursos mudem ao longo do tempo. No entanto, tenha em mente que o modelo de aprendizado de máquina do Personalizer se adapta com base nos recursos que ele vê. Se você enviar uma solicitação contendo todos os novos recursos, o modelo do Personalizador não poderá usar eventos anteriores para selecionar a melhor ação para o evento atual. Ter um conjunto de recursos "estável" (com recursos recorrentes) ajudará no desempenho dos algoritmos de aprendizado de máquina do Personalizer.
Recursos de contexto
- Alguns recursos de contexto podem estar disponíveis apenas parte do tempo. Por exemplo, se um usuário estiver conectado ao site do supermercado online, o contexto conterá recursos que descrevem o histórico de compras. Esses recursos não estarão disponíveis para um usuário convidado.
- Deve haver pelo menos um recurso de contexto. O personalizador não suporta um contexto vazio.
- Se os recursos de contexto forem idênticos para cada solicitação, o Personalizador escolherá a melhor ação globalmente.
Recursos de ação
- Nem todas as ações precisam conter os mesmos recursos. Por exemplo, no cenário de mercearia online, a pipoca microondulável terá um recurso de "tempo de cozimento", enquanto um pepino não.
- Os recursos para um determinado ID de ação podem estar disponíveis um dia, mas mais tarde se tornam indisponíveis.
Exemplos:
Seguem-se bons exemplos de funcionalidades de ação. Estes vão depender muito de cada aplicação.
- Características com características das ações. Por exemplo, é um filme ou uma série de TV?
- Recursos sobre como os usuários podem ter interagido com essa ação no passado. Por exemplo, este filme é visto principalmente por pessoas na demografia A ou B, normalmente não é exibido mais do que uma vez.
- Recursos sobre as características de como o usuário vê as ações. Por exemplo, o cartaz do filme mostrado na miniatura inclui rostos, carros ou paisagens?
Tipos de recursos suportados
O Personalizer suporta recursos dos tipos string, numérico e booleano. É provável que seu aplicativo use principalmente recursos de cadeia de caracteres, com algumas exceções.
Como os tipos de recursos afetam o aprendizado de máquina no Personalizer
- Strings: Para tipos de string, cada combinação de valor-chave (nome do recurso, valor do recurso) é tratada como um recurso One-Hot (por exemplo, category:"Produce" e category:"Meat" seriam representados internamente como recursos diferentes no modelo de aprendizado de máquina).
- Numérico: use valores numéricos apenas quando o número for uma magnitude que deve afetar proporcionalmente o resultado da personalização. Isso depende muito do cenário. Recursos que se baseiam em unidades numéricas, mas onde o significado não é linear - como Idade, Temperatura ou Altura da Pessoa - são melhor codificados como cadeias categóricas. Por exemplo, Idade pode ser codificada como "Idade":"0-5", "Idade":"6-10", etc. A altura pode ser classificada como "Altura": "<5'0", "Altura": "5'0-5'4", "Altura": "5'5-5'11", "Altura":"6'0-6-4", "Altura":">6'4".
- Booleano
- Matrizes Apenas matrizes numéricas são suportadas.
Desenvolvimento de funcionalidades
- Use tipos categóricos e de cadeia de caracteres para recursos que não são de magnitude.
- Certifique-se de que existem funcionalidades suficientes para impulsionar a personalização. Quanto mais precisamente direcionado for o conteúdo, mais recursos serão necessários.
- Há características de densidades diversas. Um recurso é denso se muitos itens forem agrupados em alguns buckets. Por exemplo, milhares de vídeos podem ser classificados como "Longos" (com mais de 5 minutos de duração) e "Curtos" (com menos de 5 minutos de duração). Esta é uma característica muito densa . Por outro lado, os mesmos milhares de itens podem ter um atributo chamado "Título", que quase nunca terá o mesmo valor de um item para outro. Esta é uma característica muito não-densa ou esparsa .
Ter recursos de alta densidade ajuda o Personalizer a extrapolar o aprendizado de um item para outro. Mas se houver apenas alguns recursos e eles forem muito densos, o Personalizer tentará segmentar o conteúdo com precisão com apenas alguns buckets para escolher.
Problemas comuns com o design e a formatação de recursos
- Envio de recursos com alta cardinalidade. Recursos que têm valores exclusivos que provavelmente não se repetirão em muitos eventos. Por exemplo, PII específicas para um indivíduo (como nome, número de telefone, número de cartão de crédito, endereço IP) não devem ser usadas com o Personalizador.
- Enviando IDs de usuário Com um grande número de usuários, é improvável que essas informações sejam relevantes para o Personalizer aprender a maximizar a pontuação média de recompensa. O envio de IDs de usuário (mesmo que não sejam PII) provavelmente adicionará mais ruído ao modelo e não é recomendado.
- Envio de valores exclusivos que raramente ocorrerão mais do que algumas vezes. Recomenda-se segmentar seus recursos para um nível mais alto de detalhes. Por exemplo, ter recursos como
"Context.TimeStamp.Day":"Monday"
ou"Context.TimeStamp.Hour":13
pode ser útil, pois há apenas 7 e 24 valores exclusivos, respectivamente. No entanto,"Context.TimeStamp":"1985-04-12T23:20:50.52Z"
é muito preciso e tem um número extremamente grande de valores únicos, o que torna muito difícil para o Personalizador aprender com ele.
Melhorar conjuntos de recursos
Analise o comportamento do usuário executando um trabalho de avaliação de recursos. Isso permite que você olhe para dados passados para ver quais recursos estão contribuindo fortemente para recompensas positivas versus aqueles que estão contribuindo menos. Você pode ver quais recursos estão ajudando, e caberá a você e seu aplicativo encontrar melhores recursos para enviar ao Personalizer para melhorar ainda mais os resultados.
Expanda conjuntos de recursos com inteligência artificial e serviços de IA do Azure
A Inteligência Artificial e os serviços de IA do Azure prontos a executar podem ser uma adição muito poderosa ao Personalizador.
Ao pré-processar seus itens usando serviços de inteligência artificial, você pode extrair automaticamente informações que provavelmente serão relevantes para a personalização.
Por exemplo:
- Você pode executar um arquivo de filme via Video Indexer para extrair elementos de cena, texto, sentimento e muitos outros atributos. Esses atributos podem então ser tornados mais densos para refletir características que os metadados do item original não tinham.
- As imagens podem ser executadas através da deteção de objetos, rostos através do sentimento, etc.
- As informações em texto podem ser aumentadas extraindo entidades, sentimento e entidades em expansão com o gráfico de conhecimento do Bing.
Você pode usar vários outros serviços de IA do Azure, como
Usar incorporações como recursos
Incorporações de vários modelos de Machine Learning provaram ser recursos afetivos para o Personalizer
- Incorporações a partir de modelos de linguagem grande
- Incorporações a partir de Modelos de Visão de IA do Azure
Espaços de nomes
Opcionalmente, os recursos podem ser organizados usando namespaces (relevantes para recursos de contexto e ação). Os namespaces podem ser usados para agrupar recursos por tópico, por origem ou qualquer outro agrupamento que faça sentido em seu aplicativo. Você determina se os namespaces são usados e quais devem ser. Os namespaces organizam recursos em conjuntos distintos e desambiguam recursos com nomes semelhantes. Você pode pensar em namespaces como um 'prefixo' que é adicionado aos nomes de recursos. Os namespaces não devem ser aninhados.
A seguir estão exemplos de namespaces de recursos usados por aplicativos:
- User_Profile_from_CRM
- Hora
- Mobile_Device_Info
- http_user_agent
- VideoResolução
- DeviceInfo
- Meteorologia
- Product_Recommendation_Ratings
- current_time
- NewsArticle_TextAnalytics
Convenções e diretrizes de nomenclatura de namespace
- Os namespaces não devem ser aninhados.
- Os namespaces devem começar com caracteres ASCII exclusivos (recomendamos o uso de namespaces de nomes baseados em UTF-8). Atualmente, ter namespaces com os mesmos primeiros caracteres pode resultar em colisões, portanto, é altamente recomendável que seus namespaces comecem com caracteres distintos uns dos outros.
- Os namespaces diferenciam maiúsculas de minúsculas. Por exemplo
user
eUser
serão considerados namespaces diferentes. - Os nomes de recursos podem ser repetidos entre namespaces e serão tratados como recursos separados
- Os seguintes caracteres não podem ser usados: códigos < 32 (não imprimível), 32 (espaço), 58 (dois pontos), 124 (tubo) e 126–140.
- Todos os namespaces que começam com um sublinhado
_
serão ignorados.
Exemplos de JSON
Ações
Ao chamar Rank, você enviará várias ações para escolher:
Os objetos JSON podem incluir objetos JSON aninhados e propriedades/valores simples. Uma matriz só pode ser incluída se os itens da matriz forem números.
{
"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
}
]
}
]
}
Contexto
O contexto é expresso como um objeto JSON que é enviado para a API Rank:
Os objetos JSON podem incluir objetos JSON aninhados e propriedades/valores simples. Uma matriz só pode ser incluída se os itens da matriz forem números.
{
"contextFeatures": [
{
"state": {
"timeOfDay": "noon",
"weather": "sunny"
}
},
{
"device": {
"mobile":true,
"Windows":true,
"screensize": [1680,1050]
}
}
]
}
Espaços de nomes
No seguinte JSON, user
, environment
, device
, e activity
são namespaces.
Nota
É altamente recomendável usar nomes para namespaces de recursos baseados em UTF-8 e que comecem com letras diferentes. Por exemplo, user
, environment
, device
, e activity
comece com u
, e
, d
, e a
. Atualmente, ter namespaces com os mesmos primeiros caracteres pode resultar em colisões.
{
"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
}
}
]
}