Contexto e ações

Importante

A partir de 20 de setembro de 2023, não será mais possível criar novos recursos do Personalizador. O serviço Personalizador será desativado no dia 1º de outubro de 2026.

O Personalizador funciona aprendendo o que o seu aplicativo deve mostrar aos usuários em determinado contexto. Contexto e ações são as duas informações mais importantes que você transmite ao Personalizador. O contexto representa as informações que você tem sobre o usuário atual ou o estado do sistema; 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 o usuário.
  • Informações extraídas de cabeçalhos HTTP, como o agente do usuário, ou derivadas de informações HTTP, como pesquisas geográficas inversas baseadas em endereços IP.
  • Informações sobre a hora atual, como dia da semana, fim de semana ou não, manhã ou tarde, festas de fim de ano ou não etc.
  • Informações extraídas de aplicativos móveis, como localização, movimentação ou nível da bateria.
  • Agregações históricas do comportamento dos usuários – como quais são os gêneros de filmes mais exibidos por este usuário.
  • Informações sobre o estado do sistema.

Seu aplicativo é responsável por carregar as informações sobre o contexto dos bancos de dados, dos sensores e dos sistemas relevantes que você possa ter. Se as informações de contexto não são alteradas, é possível adicionar uma lógica a 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. Elas podem ser sempre as mesmas 50 ações ou podem variar. Por exemplo, se você tiver um catálogo de produtos de 10 mil itens em um aplicativo de comércio eletrônico, poderá usar um mecanismo de recomendação ou de filtragem para determinar os 40 principais itens que possam ser do interesse de um cliente e usar o Personalizador para encontrar aquele que vai gerar a maior recompensa no contexto atual.

Exemplos de ações

As ações enviadas para a API de Classificação dependerão do que você está tentando personalizar.

Estes são alguns exemplos:

Finalidade Ação
Personalizar qual artigo é realçado em um site de notícias. Cada ação é um artigo de notícias potencial.
Otimizar o posicionamento de anúncios em um site. Cada ação será um layout ou regras para criar um layout dos anúncios (por exemplo, na parte superior, à direita, imagens pequenas, imagens grandes).
Exibir uma classificação personalizada de itens recomendados em um site de compras. Cada ação é um produto específico.
Sugerir a aplicação de elementos de interface do usuário, como filtros, a uma foto específica. Cada ação pode ser um filtro diferente.
Escolher uma resposta do chatbot para esclarecer a intenção do usuário ou sugerir uma ação. Cada ação é uma opção de como interpretar a resposta.
Escolher o que mostrar no início de uma lista de resultados da pesquisa Cada ação é um dos poucos resultados da pesquisa principais.

Carregar ações do aplicativo cliente

Normalmente, os recursos de ações podem ser provenientes 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 dos sistemas relevantes que você tem. Se as ações não são alteradas ou se o carregamento delas sempre tem um impacto desnecessário no desempenho, adicione uma lógica a seu aplicativo para armazenar essas informações em cache.

Impedir a classificação de ações

Em alguns casos, há ações que você não deseja exibir aos usuários. A melhor maneira de impedir que uma ação seja classificada é adicioná-la à lista Ações Excluídas ou não a transmitir à Solicitação de Classificação.

Em alguns casos, você pode não querer que os eventos sejam treinados por padrão. Em outras palavras, você só deseja treinar eventos quando uma condição específica é atendida. Por exemplo, a parte personalizada da página da Web está abaixo da dobra (os usuários precisam rolar antes de interagir com o conteúdo personalizado). Nesse caso, você renderiza a página inteira, mas deseja treinar apenas um evento que ocorrerá quando o usuário rolar e puder interagir com o conteúdo personalizado. Nesses casos, você deve adiar a ativação do evento para evitar a atribuição de eventos de recompensa (e treinamento) padrão com os quais o usuário final não interagiu.

Recursos

Tanto o contexto quanto as possíveis ações são descritos por meio de recursos. Os recursos representam todas as informações que você considera 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 quais informações preciso para tomar uma decisão informada? Quais 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 nem conserta os recursos que você pode enviar para ações e contexto:

  • Ao longo do tempo, você pode adicionar e remover recursos sobre ações e contexto. O Personalizador continua aprendendo com as informações disponíveis.
  • Para recursos categóricos, não é necessário predefinir os valores possíveis.
  • Para recursos numéricos, não é necessário predefinir os intervalos.
  • Os nomes de recursos que começam com um sublinhado _ serão ignorados.
  • A lista de recursos pode ser grande (centenas), mas é recomendável começar com um conjunto de recursos conciso e expandir conforme a necessidade.
  • Os recursos de ação podem ou não ter correlação com 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 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 "null", o que é indesejado.

Tudo bem e é normal os recursos mudarem ao longo do tempo. No entanto, tenha em mente que o modelo de machine learning do Personalizador 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 indicada ao evento atual. Ter um conjunto de recursos 'estável' (com recursos recorrentes) ajudará no desempenho dos algoritmos de aprendizado de máquina do Personalizador.

Recursos de contexto

  • Alguns recursos de contexto só podem estar disponíveis parte do tempo. Por exemplo, se um usuário estiver conectado ao site online do supermercado, o contexto conterá recursos que descrevem o histórico de compras. Esses recursos não estarão disponíveis para um usuário convidado.
  • É necessário ter pelo menos um recurso de contexto. O Personalizador não dá suporte a 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ções

  • Nem todas as ações precisam conter os mesmos recursos. Por exemplo, no cenário de supermercado online, pipoca de micro-ondas terá um recurso de "tempo de cozimento", já um pepino não terá esse recurso.
  • Os recursos para determinada ID de ação podem estar disponíveis um dia, mas posteriormente podem ficar indisponíveis.

Exemplos:

Veja a seguir bons exemplos de recursos de ações. Eles dependem muito de cada aplicativo.

  • Recursos com características das ações. Por exemplo, ele é um filme ou uma série de TV?
  • Recursos sobre como os usuários podem ter interagido com esta ação no passado. Por exemplo, esse filme é visto principalmente por pessoas com perfil demográfico A ou B e normalmente não é reproduzido mais de uma vez.
  • Recursos sobre as características de como o usuário as ações. Por exemplo, o cartaz do filme mostrado na miniatura inclui rostos, carros ou paisagens?

Tipos de recursos compatíveis

O Personalizador dá suporte a recursos de tipos de cadeia de caracteres, numéricos e boolianos. É provável que o aplicativo use principalmente recursos de cadeia de caracteres, com algumas exceções.

Como os tipos de recursos afetam o aprendizado de máquina no Personalizador

  • Cadeias de caracteres: para tipos de cadeia de caracteres, cada combinação chave-valor (nome do recurso, valor do recurso) é tratada como um recurso One-Hot (por exemplo, categoria:"Produzir" e categoria:"Carne" seriam representadas internamente como recursos diferentes no modelo de machine learning).
  • Numérico: use valores numéricos somente quando o número for uma magnitude que deve afetar proporcionalmente o resultado da personalização. Isso depende muito do cenário. Recursos que são baseados em unidades numéricas, mas nas quais o significado não é linear, como Age, Temperature ou Person Height, são mais bem codificados como cadeias de caracteres categóricas. Por exemplo, Idade pode ser codificada como "Idade":"0-5", "Idade":"6-10", etc. A altura pode ser agrupada como "Altura": "<5'0", "Altura": "5'0-5'4", "Altura": "5'5-5'11", "Altura":"6'0-6-4", "Altura":">6'4".
  • Booliano
  • Matrizes Há suporte apenas a matrizes numéricas.

Engenharia de recursos

  • Use tipos categóricos e de cadeia de caracteres para recursos que não são uma magnitude.
  • Verifique se há recursos suficientes para orientar a personalização. Quanto mais rigorosamente direcionado o conteúdo precisar ser, mais recursos serão necessários.
  • Há recursos de densidades diversas. Um recurso é denso se muitos itens são agrupados em alguns buckets. Por exemplo, milhares de vídeos podem ser classificados como "Longos" (mais de 5 minutos de duração) e "Curtos" (menos em 5 minutos de duração). Esse é um recurso muito denso. Por outro lado, os mesmos milhares de itens podem ter um atributo chamado "Title", que quase nunca terá o mesmo valor de um item para outro. Esse é um recurso não muito denso ou esparso.

Ter recursos de alta densidade ajuda o Personalizador a extrapolar o aprendizado de um item para outro. Porém, se houver apenas alguns recursos e eles forem muito densos, o Personalizador tentará direcionar precisamente o conteúdo com apenas alguns buckets à sua escolha.

Problemas comuns com design e formatação de recursos

  • Envio de recursos com alta cardinalidade. Recursos com valores exclusivos que provavelmente não serão repetidos em muitos eventos. Por exemplo, PII de uma pessoa específica (como nome, número de telefone, números de cartão de crédito, endereço IP) não devem ser usadas com o Personalizador.
  • Envio de IDs de usuário Com um grande número de usuários, é improvável que essas informações sejam relevantes para o aprendizado do Personalizador a fim de maximizar a pontuação média de recompensa. O envio de IDs de usuário (mesmo que não seja PII) provavelmente adicionará mais ruído ao modelo e não é recomendado.
  • Envio de valores exclusivos que raramente ocorrerão mais de algumas vezes. É recomendável colocar seus recursos em 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 exclusivos, o que torna muito difícil para o Personalizador aprender com ele.

Melhorar os conjuntos de recursos

Analise o comportamento do usuário executando um Trabalho de Avaliação de Recursos. Isso permite que você examine os dados passados para ver quais recursos estão contribuindo intensamente para recompensas positivas versus aqueles que estão contribuindo menos. É possível ver quais recursos estão ajudando, e caberá a você e seu aplicativo encontrar recursos melhores para enviar ao Personalizador a fim de melhorar ainda mais os resultados.

Expandir 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 para execução podem ser uma adição muito eficiente ao Personalizador.

Ao fazer o pré-processamento dos itens usando os serviços de inteligência artificial, você pode extrair de forma automática informações que provavelmente serão relevantes para a personalização.

Por exemplo:

  • Você pode executar um arquivo de filme por meio do Video Indexer para extrair elementos de cena, texto, sentimento e muitos outros atributos. Esses atributos podem então se tornar mais densos para refletir características que os metadados do item original não tinham.
  • As imagens podem ser executadas por meio da detecção de objeto, os rostos, por meio de sentimento etc.
  • As informações no texto podem ser aumentadas com a extração de entidades e sentimento e expansão de entidades com o grafo de conhecimento do Bing.

Você pode usar vários outros Serviços de IA do Azure, como

Usar inserções como recursos

As inserções de vários modelos de Machine Learning provaram ser recursos eficazes para o Personalizador

  • Inserções de modelos de linguagem grandes
  • Inserções de Modelos da Visão de IA do Azure

Namespaces

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 por qualquer outro agrupamento que faça sentido em seu aplicativo. Você define se os namespaces são usados e o que eles devem ser. Os namespaces organizam recursos em conjuntos distintos e fazem desambiguação de recursos com nomes semelhantes. Pense nos namespaces como 'prefixos' que são adicionados aos nomes de recursos. Os namespaces não devem ser aninhados.

Estes são exemplos de namespaces de recurso usados por aplicativos:

  • User_Profile_from_CRM
  • Hora
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • Clima
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Convenções e diretrizes de nomenclatura de namespace

  • Os namespaces não devem ser aninhados.
  • Os namespaces precisam começar com caracteres ASCII exclusivos (é recomendável usar namespaces de nomes baseados em UTF-8). Atualmente, ter namespaces com os mesmos primeiros caracteres pode resultar em colisões, ou seja, é altamente recomendável que seus namespaces comecem com caracteres distintos uns dos outros.
  • Os namespaces diferenciam maiúsculas de minúsculas. Por exemplo, user e User 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 podem ser impressos), 32 (espaço), 58 (vírgula), 124 (barra vertical) e 126–140.
  • Todos os namespaces que começam com um sublinhado _ serão ignorados.

Exemplos de JSON

Ações

Ao chamar a Classificação, você enviará várias ações para sua escolha:

Os objetos JSON podem incluir objetos JSON aninhados e propriedades/valores simples. Uma matriz só poderá ser incluída se os itens de 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 de Classificação:

Os objetos JSON podem incluir objetos JSON aninhados e propriedades/valores simples. Uma matriz só poderá ser incluída se os itens de matriz forem números.

{
    "contextFeatures": [
        {
            "state": {
                "timeOfDay": "noon",
                "weather": "sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true,
                "screensize": [1680,1050]
            }
        }
    ]
}

Namespaces

No JSON a seguir, user, environment, device e activity são namespaces.

Observação

Recomendamos usar nomes para os namespaces de recursos que são baseados em UTF-8 e começam com letras diferentes. Por exemplo, user, environment, device estrela activity começam com u, e, d e a. No momento, ter namespaces com os mesmos caracteres iniciais 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
            }
        }
    ]
}

Próximas etapas

Aprendizado de reforço