Topics API for Web

Topics API 可在不使用第三方 Cookie 的情况下实现针对用户兴趣投放广告。

Topics API 的运作方式

Topics API 可用于根据用户的活动,观察和提供对用户可能感兴趣的主题的访问权限。然后,Topics API 可以向 API 调用方(例如广告技术平台)授予对用户感兴趣的主题的访问权限,但不会泄露有关用户活动的其他信息。

主要概念

  • “主题”是指简单易懂的当前用户兴趣主题,是“主题”分类的一部分。
  • 调用方是指向 Topics API 发出请求以观察或访问用户兴趣的实体,例如应用、第三方 SDK、网站或服务。
  • 如果某个调用方在过去 3 个周期内通过与某个主题相关联的网页或应用发出了 Topics API 请求,此调用方就会观察该主题。
  • “周期”是指主题计算期限,默认为一周。
  • 分类法是类别的层次结构列表,例如,其中包含 /Arts & Entertainment/Music & Audio/Soul & R&B/Business & Industrial/Business Services/Corporate Events 等类别。
  • 系统使用分类器模型派生主题,该模型会将用户活动映射到零个或多个主题。

Topics API 流程核心步骤

Topics API 生命周期包含三个主要步骤:

  • 观察用户活动,例如用户访问网页 https://cats.example/tabby/index.html 或下载应用 cats 的情况。
  • 从用户活动中派生主题,例如 /Pets & Animals/Pets/Cats
  • 访问之前为用户观察到的主题,例如作为选择相关广告(例如猫粮促销广告)的信号。

观察主题

调用方只能访问他们观察到的感兴趣的主题。当调用方从与某个主题相关联的情境中发出 Topics API 请求时,就会观察该主题。为了说明这一概念,请参考以下简化示例。

  • 假设有两个 Topics API 调用方:AB
  • 有两个上下文:
    • Greenhouse,例如与主题 Home & Garden 相关联的名为 Greenhouse 的应用或网站 greenhouse.example。
    • 网球练习,例如与主题 Sports/Tennis 相关联的名为“网球练习”的应用或网站 tennis.example。
  • 调用方 AB 都存在于 Greenhouse 上下文中。
  • 网球练习上下文中只有调用方 B
  • 为简单起见,假设在第 1 个时段之前,系统未观察到该用户感兴趣的任何主题。
  • 用户访问 Greenhouse 应用,调用方 AB 会调用 Topics API 来记录用户对相应网页或应用的访问(如需了解如何调用 Topics API,请参阅后续步骤中建议的实现指南)。此记录(主机名或应用数据)稍后将用于派生感兴趣的主题。Topics API 稍后会将主题 Home & Garden 标记为同时被调用方 AB 观察到。
  • 用户访问 Tennis exercises 应用。只有调用方 B 会发送 Topics API 请求。Topics API 稍后会将主题 Sports/Tennis 标记为由调用方 B 观察到。
  • 周期结束时,Topics API 会刷新用户的热门主题,并根据用户活动确定观察到这些主题的调用方。
  • 稍后,当调用方 B 再次调用 Topics API 时,它可以在响应数组中为此用户获取 Home & GardenSports/Tennis 主题(或 5% 的概率获取随机主题)。
  • 调用方 A 只能访问主题 Home & Garden,因为它从未观察到主题 Sports/Tennis。这意味着,第三方只能在用户感兴趣的特定情境(应用或网站)中了解用户的兴趣主题。
该图显示,只有当调用方在情境中存在时,Topics API 才会将主题标记为观察到的主题。
Topics API 仅标记在这些主题情境中存在的调用方观察到的主题。调用方只能访问他们观察到的主题。

派生主题

“主题”摘要卡会根据用户活动推断出用户感兴趣的主题。主题是从预定义的开源分类中选择的。Topics 会在每个周期内刷新用户的五大热门主题以及在该周期内观察到这些主题的调用方。Topics 分类器模型会根据用户活动派生主题:网页访问的主机名、Android 设备上的应用信息

调用方访问用户的兴趣主题

该 API 仅会返回调用方在最近三个周期内观察到的主题。最多可向调用方返回三个主题,每个最近三个周期(如果调用方观察到该周期的主题)对应一个主题。调用方可以使用返回的主题来补充任何情境信息,也可组合使用这些主题来帮助为用户找到更相关的广告。

周期数

Topics API 必须确保它提供的感兴趣主题始终是最新的。系统会根据用户在某个时间段(称为“周期”,默认为一周)内的活动来推断他们感兴趣的主题。每个用户都有自己的时段(时段是“按用户”的),初始开始时间是随机的。

Topics API 会在每个周期计算一次用户的 5 个热门主题,并确定哪些调用方使用设备端信息观察到了这些主题。系统会从用户在每个周期内最感兴趣的前五个主题中随机挑选一个主题作为该时间段的主题。为了进一步加强隐私保护并确保所有主题都有代表性,从兴趣分类所有可能的主题中随机选择一个主题的概率为 5%。

网站主题的实际应用

在网站上,系统会根据用户访问的网页的主机名推断主题。例如,为网站 dogs.example 推断出的主题可能是/宠物与动物/宠物/狗

下图展示了一个经过简化的示例,演示了 Topics API 如何帮助广告技术平台选择适当的广告。此示例假定用户的浏览器已有可将网站主机名映射到主题的模型。

显示 Topics API 生命周期各个阶段的示意图,从用户访问网站到广告展示。
Topics API 生命周期图从宏观角度介绍了 API 操作的各个阶段。

浏览器会根据调用 Topics API 的代码上下文确定调用方的来源。在实践中,这意味着 Topics 用户从其来源在 iframe 中调用 API,或者在对其来源的提取中添加主题。

例如,供应方平台 (SSP) 可嵌入到多个发布商网站中。然后,SSP 便可从其来源在 iframe 中调用 Topics API,以便观察与这些发布商网站上的用户相关联的主题。然后,这些主题可与需求方平台 (DSP) 共享,以帮助其为用户选择相关广告。

API 如何确定哪些调用方可以看到哪些主题

API 调用方仅会接收最近观察到的主题,而用户感兴趣的主题在每个周期刷新一次:在 Chrome 实现中,此时间段设为 1 周。这意味着,该 API 会提供一个滚动窗口,在该时段内,给定调用方可以接收观察到的主题。

下表概述了单个时段内用户假设的浏览记录示例(虽然不太现实,但规模较小),其中显示了与用户访问的网站相关联的主题,以及每个网站上存在的 API 调用方(在网站上包含的 JavaScript 代码中调用 document.browsingTopics() 的实体)。

网站 主题 网站上的 API 调用方
running.example Running & Walking
Athletic Shoes
adtech1.example
adtech2.example
dogs.example Dogs adtech1.example
holiday.example Hotels & Accommodations adtech2.example
sunglasses.example Sunglasses [none]

该周期结束时(默认为一周),Topics API 会生成浏览器在这周内的热门主题。

  • adtech1.example 现在符合接收 Running & WalkingAthletic ShoesDogs 主题的条件,因为它在 running.example 和 dogs.example 上观察到这些主题。
  • adtech1.example 不符合针对该用户接收 Hotels & Accommodations 主题的条件,因为它未出现在用户最近访问的与该主题相关的任何网站上。
  • adtech2.example 看到了 Running & WalkingAthletic ShoesHotels & Accommodations 主题,但没有看到 Dogs 主题。

该用户访问了 sunglasses.example,其中包含 Sunglasses 主题,但该网站并未调用 Topics API。这意味着,此时该 API 不会针对任何调用方返回 Sunglasses 主题。

在第二周,该用户访问了另一个网站:

网站 主题 网站上的 API 调用方
cameras.example Camera & Photo Equipment adtech2.example

此外,系统会将 adtech2.example 中的代码添加到 sunglasses.example 中:

网站 主题 网站上的 API 调用方
sunglasses.example Sunglasses adtech2.example

这意味着,除了第 1 周的 Running & WalkingAthletic ShoesHotels & Accommodations 外,adtech2.example 现在还能收到 Camera & Photo EquipmentSunglasses 主题,但直到下一个周期(第 3 周)才能收到。这样可确保第三方能够了解到的用户过往详情(在本例中,是对时尚感兴趣)不会比通过 Cookie 了解到的多。

又过了两周,如果该用户未访问包含 adtech2.example 中的代码且涵盖这些主题的任何网站,那么 Running & WalkingAthletic ShoesHotels & Accommodations 可能会从 adtech2.example 的符合条件的主题列表中删除。

当用户访问使用 Topics API 的网站时,Topics API 执行的步骤。
API 如何观察和访问主题。

分类器模型

Topics 使用分类器模型将网站主机名映射到零个或多个主题(分析其他信息,例如完整网址或网页内容,可能有助于投放更具相关性的广告,但也可能会降低隐私保护)。

分类

主题是从分类中选择的。这些主题是由 Chrome 精心挑选出来的,但我们的目标是将分类变成由可信的生态系统贡献者维护的资源。分类需要足够小,以便许多用户的浏览器都与每个主题相关联。最终目标是,将分类法从外部来源获取,并纳入来自整个行业的反馈和想法。

为避免敏感类别,主题必须公开、经过人工挑选,并且及时更新。Chrome 使用的分类已经过人工挑选,排除了通常被视为敏感的类别,例如种族或性取向。

主题分类

我们为 5 万个热门网站手动挑选了主题,并将这个由主机名和主题组成的人工挑选替换列表用于训练分类器模型。对于热门网站,系统会从替换列表中获取主题,而不是使用分类器模型。您可以在计算机上本地查看替换列表

chrome://topics-internals 页面,其中“分类器”面板处于选中状态。
chrome://topics-internals 页面中的“分类器”面板会列出模型版本、其路径以及与所列每个主机关联的主题。

Chrome 对 Topics API 的实现会下载表示模型的 TensorFlow Lite 文件,以便在用户设备上本地使用该模型。

如何选择用户最感兴趣的前五个热门主题

该 API 会为每个周期返回一个主题,最多返回三个。如果返回了三个,其中会包含当前周期和之前两个周期的主题。

  1. 在每个周期结束时,浏览器会整理出一个包含满足以下条件的网页的列表:
    • 用户在周期内访问了该网页。
    • 该网页包含调用 document.browsingTopics() 的代码。
    • 该 API 已启用(例如,未被用户或响应标头禁止)。
  2. 用户设备上的浏览器使用 Topics API 提供的分类器模型将每个网页的主机名映射到主题列表。
    • 分类法中的 22 个根主题中的每个主题都会根据广告生态系统的反馈,分配到“高实用性”或“标准实用性”存储分区。浏览器首先会按主题分配的分桶对主题进行排序。所有子主题都会继承其父级根主题的存储分区分配。系统会优先处理“实用性高”的主题。
    • 然后,浏览器会按每个令牌桶内的频率对主题进行排序。
    • 系统会从此排序列表中选择前五个主题,作为用户在该时间段内的热门主题。

然后,document.browsingTopics() 方法从每个周期的前五个热门主题中返回一个随机主题,并且从主题的完整分类中随机选择其中任一个主题的概率为 5%。在 Chrome 中,用户也可以移除各个主题,或清除其浏览记录,以减少该 API 返回的主题数。用户也可以选择停用该 API。

您可以通过 chrome://topics-internals 页面查看当前时段内观察到的主题的相关信息。

后续步骤

让您的环境为使用 Topics API 测试和开发 Web 应用做好准备。
查看实现详情和代码示例,供调用方观察和访问主题。

另请参阅

请查看我们的资源,以便更好地了解 Web 版 Topics API。