你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

上下文和操作

重要

从 2023 年 9 月 20 日开始,将无法创建新的个性化体验创建服务资源。 个性化体验创建服务将于 2026 年 10 月 1 日停用。

个性化体验创建服务的工作原理是学习应用程序在给定的上下文中应向用户显示哪些内容。 上下文和操作是传递到个性化体验创建服务中的两条最重要的信息。 上下文表示拥有的有关当前用户或系统状态的信息,操作是可供选择的选项。

上下文

上下文信息取决于每个应用程序和用例,但往往包括如下所述的信息:

  • 有关用户的人口统计和档案信息。
  • 从 HTTP 标头提取的信息(例如用户代理),或派生自 HTTP 信息的信息,例如基于 IP 地址的反向地理查找。
  • 有关当前时间的信息,例如星期几、是否为周末、上午还是下午、是否为长假期,等等。
  • 从移动应用程序提取的信息,例如位置、动作或电池电量。
  • 用户行为的历史聚合 - 例如,此用户最喜欢观看的电影流派是什么。
  • 有关系统状态的信息。

应用程序负责从现有的相关数据库、传感器和系统中加载有关上下文的信息。 如果上下文信息不会更改,则可以在应用程序中添加逻辑,以便在将此信息发送到排名 API 之前将其缓存。

操作

操作表示选项列表。

为操作排名时,请勿发送超过 50 个操作。 可以是相同的 50 个操作,也可以是不同的操作。 例如,如果你为某个电子商务应用程序创建了一个包含 10,000 个商品的产品目录,则可以使用建议或筛选引擎来确定客户可能最喜欢的 40 个商品,并使用个性化体验创建服务找到在当前上下文中会产生最大回报的商品。

操作示例

发送到排名 API 的操作取决于尝试个性化的内容。

下面是一些示例:

用途 操作
个性化要在新闻网站上突出显示的文章。 每个操作是一篇潜在的新闻文章。
优化网站上的广告位置。 每个操作是一个布局或有关创建广告布局的规则(例如,在顶部排列、在右侧排列、使用小图像、使用大图像)。
在购物网站上显示推荐商品的个性化排名。 每个操作是一个具体的产品。
建议要应用到特定照片的用户界面元素(例如筛选器)。 每个操作可以是不同的筛选器。
选择用于澄清用户意向或建议操作的聊天机器人响应。 每个操作是一个有关如何解释响应的选项。
选择要在搜索结果列表顶部显示的内容 每个操作是最相关的少数几条搜索结果之一。

从客户端应用程序加载操作

操作中的特征往往来自于内容管理系统、目录和推荐器系统。 应用程序负责从现有的相关数据库和系统中加载有关操作的信息。 如果操作不会更改,或者每次加载操作都会对性能产生不必要的影响,则你可以在应用程序中添加逻辑用于缓存此信息。

防止为操作排名

在某些情况下,你不希望向用户显示某些操作。 防止对操作进行排名的最佳方式是将其添加到排除的操作列表,或者不将其传递给排名请求。

在某些情况下,你可能不想默认训练事件。 换句话说,你只想在满足特定条件时训练事件。 例如,网页的个性化部分被折叠隐藏(用户必须滚动才能与个性化内容交互)。 在这种情况下,会呈现整个页面,但你只想在用户滚动并有机会与个性化内容交互时训练事件。 对于上述情况,应延迟事件激活,从而避免分配最终用户没有机会与之交互的默认奖励(和训练)事件。

功能

上下文和可能的操作均使用特征进行描述。 特征表示你认为对决策制定过程至关重要,可最大限度提高奖励的所有信息。 一个好的起点是假设你的任务是在每个时间戳选择最佳操作,并询问自己:“我需要什么信息才能做出明智的决定? 我可以使用哪些信息来描述上下文和每个可能的操作?特征可以是一般通用的,也可以特定于某个商品。

个性化体验创建服务不会规定、限制或固定可为操作和上下文发送的特征:

  • 可以不断地添加和删除有关上下文与操作的特征。 个性化体验创建服务会持续从提供的信息中学习。
  • 对于分类特征,无需预先定义可能的值。
  • 对于数字特征,无需预先定义范围。
  • 将忽略以下划线 _ 开头的特征名。
  • 特征列表可能包含很多特征(数百个),但我们建议从简明的特征集开始,再按需扩展。
  • 操作特征可能与上下文特征关联,也可能毫无关联。
  • 应在请求中省略不可用的特征。 如果特定特征的值对于给定请求不可用,请忽略该请求的特征。
  • 避免发送带有 null 值的特征。 Null 值将被处理为值为“null”的字符串,不符合需要。

特征随着时间的推移而发生更改是正常且自然的。 但请记住,个性化体验创建服务的机器学习模型会根据它看到的特征进行调整。 如果发送包含所有新特征的请求,个性化体验创建服务的模型将无法利用过去的事件来为当前事件选择最佳操作。 拥有“稳定”的特征集(包含重复出现的特征)将有助于提高个性化体验创建服务机器学习算法的性能。

上下文特征

  • 某些上下文特征可能仅在部分时间可用。 例如,如果用户登录在线杂货店网站,上下文将包含描述购买历史记录的特征。 这些特征对来宾用户不可用。
  • 必须至少有一个上下文特征。 个性化体验创建服务不支持空上下文。
  • 如果每个请求的上下文特征都相同,个性化体验创建服务将选择全局最佳操作。

操作特征

  • 并非所有操作都需要包含相同的特征。 例如,在线上杂货店场景中,微波爆米花具有“烹饪时间”特征,而黄瓜却没有。
  • 特定操作 ID 的特征可能只会在某一天才提供,过后就不会提供。

示例:

下面是典型的操作特征示例。 具体的特征在很大程度上取决于每个应用程序。

  • 包含操作特征的特征。 例如,这是一部电影还是电视连续剧?
  • 有关用户在过去如何与此操作交互的特征。 例如,人口统计特征 A 和 B 的人员基本上都看过这部电影,该电影往往上映过多次。
  • 有关用户如何查看操作的特征。 例如,缩略图中显示的电影海报是否包含人脸、汽车或布局?

支持的特征类型

个性化体验创建服务支持字符串、数字和布尔类型的特征。 应用程序可能会经常使用字符串特征,但有一些例外情况。

特征类型如何影响个性化体验创建服务中的机器学习

  • 字符串:对于字符串类型,每个键值(特征名、特征值)组合都被视为独热特征(例如,category:"Produce" 和 category:"Meat" 在机器学习模型内部表示为不同的特征)。
  • 数值:仅当数值应按比例对个性化设置结果产生影响时,才使用数值。 这取决于具体情况。 基于数字单位但含义不是线性的特征(例如年龄、温度或人物身高)最好编码为分类字符串。 例如,可将年龄编码为 "Age":"0-5"、"Age":"6-10",依次类推。可将高度通过 Bucket 存储为 "Height": "<5'0"、"Height": "5'0-5'4"、"Height": "5'5-5'11"、"Height":"6'0-6-4"、"Height":">6'4"。
  • 布尔值
  • 阵列:仅支持数值阵列。

特性工程

  • 对不是量级的特征使用分类和字符串类型。
  • 确保有足够的特征可以促成个性化。 针对内容的精度越高,所需的特征就越多。
  • 有多样化密度特征。 如果将许多的项分组到少数几个桶中,则认为特征是密集的。 例如,可将数千个视频分类为“长”(时长超过 5 分钟)和“短”(时长短于 5 分钟)。 这是一个非常密集的特征。 另一方面,数千个项可能有一个名为“标题”的属性,而每个项的此属性几乎永远不会使用相同的值。 这是一个极不密集的特征,也称为稀疏特征。

使用高密度特征可帮助个性化体验创建服务在不同的项之间进行推理学习。 但是,如果只存在少数几个特征,并且这些特征过于密集,那么个性化体验创建服务只会使用少数几个可供选择的桶,来尝试精确针对内容。

特征设计和格式设置的常见问题

  • 发送具有高基数的特征。 具有唯一值的特征,这些值不太可能在许多事件中重复。 例如,特定于个人的 PII(例如姓名、电话号码、信用卡号、IP 地址)不应与个性化体验创建服务配合使用。
  • 发送用户 ID:对于大量用户,不太可能出现此信息与个性化体验创建服务学习相关以最大程度提高平均奖励分数的情况。 发送用户 ID(即使是非 PII)可能给模型带来更多干扰,不推荐这样做。
  • 发送很少出现多次的唯一值。 建议将特征通过 Bucket 存储到更高的细节级别。 例如,具有 "Context.TimeStamp.Day":"Monday""Context.TimeStamp.Hour":13 等特征可能很有用,因为它们分别只有 7 个和 24 个唯一值。 但是,"Context.TimeStamp":"1985-04-12T23:20:50.52Z" 非常精确并且具有非常多的唯一值,这使得个性化体验创建服务很难从中学习。

改善特征集

通过运行特征评估作业来分析用户行为。 这样,便可以查看以往的数据,以确定哪些特征对积极的效果贡献最大,以及哪些特征对此效果的贡献不大。 可以查看哪些特征起到了作用。需要由你以及你的应用程序找到要发送给个性化体验创建服务以进一步改善效果的更好特征。

使用人工智能和 Azure AI 服务扩展特征集

人工智能和随时可运行的 Azure AI 服务可对个性化体验创建服务做出强有力的补充。

通过使用人工智能服务预处理项,可以自动提取可能与个性化相关的信息。

例如:

  • 可以通过视频索引器运行电影文件,以提取场景元素、文本、情绪和许多其他属性。 然后,可以提高这些属性的密度,以反映原始项元数据所不具备的特征。
  • 可以通过对象检测运行图像,通过情绪检测运行人脸,等等。
  • 可以通过使用必应知识图提取实体、情绪以及扩展实体来扩充文本中的信息。

可以使用其他多种 Azure AI 服务,例如

将嵌入用作特征

来自各种机器学习模型的嵌入已被证明是个性化体验创建服务的有效特征

  • 来自大型语言模型的嵌入
  • Azure AI 视觉模型中的嵌入

命名空间

(可选)可以使用命名空间(与上下文和操作特征相关)来组织特征。 命名空间可用于按主题、源或任何其他在应用程序中有意义的分组对特征进行分组。 你需要确定是否要使用命名空间,以及应该使用哪些命名空间。 命名空间可将特征整理成不同的集,以及区分名称相似的特征。 可以将命名空间视为添加到特征名称的“前缀”。 不应嵌套命名空间。

下面是应用程序使用的特征命名空间示例:

  • User_Profile_from_CRM
  • 时间
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • 天气
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

命名空间命名约定和准则

  • 不应嵌套命名空间。
  • 命名空间必须以唯一的 ASCII 字符开头(建议使用基于 UTF-8 的名称命名空间)。 目前,具有相同首字符的命名空间可能会导致冲突,因此强烈建议命名空间使用彼此不同的字符开头。
  • 命名空间区分大小写。 例如,userUser 被视为不同的命名空间。
  • 特征名可以跨命名空间重复,并将被视为单独的特征
  • 不能使用以下字符:编号 < 32(不可打印)、32(空格)、58(冒号)、124(管道)和 126–140。
  • 将忽略所有以下划线 _ 开头的命名空间。

JSON 示例

操作

调用排名时,需要发送多个可供选择的操作:

JSON 对象可以包括嵌套的 JSON 对象和简单的属性/值。 仅当数组项为数字时才可以包含数组。

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

上下文

上下文表示为发送到排名 API 的 JSON 对象:

JSON 对象可以包括嵌套的 JSON 对象和简单的属性/值。 仅当数组项为数字时才可以包含数组。

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

命名空间

在以下 JSON 中,userenvironmentdeviceactivity 是命名空间。

注意

我们强烈建议为特征命名空间使用基于 UTF-8 并以不同字母开头的名称。 例如,userenvironmentdeviceactivityueda 开头。 目前,具有相同首字符的命名空间可能会导致冲突。

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

后续步骤

强化学习