了解主题是如何推断出来的、主题是如何分配给用户的浏览器,以及用户如何控制其主题列表。
实现状态
- Topics API 已完成公开讨论阶段,目前可供 99% 的用户使用,扩容到可以达到 100%。
- 如需提供关于 Topics API 的反馈,请在 Topics 铺垫消息中创建一个问题,或参与改进网络广告业务群组中的讨论。解释器中有一些尚未解决的问题,但仍需进一步定义。
- Privacy Sandbox 时间表提供了 Topics API 和其他 Privacy Sandbox 提案的实现时间表。
- Topics API:最新更新详细介绍了 Topics API 和实现的相关变更和增强功能。
什么是主题?
在 Topics API 中,主题是指用户感兴趣的主题,从他们访问的网站可以看出。
主题是一项信号,可帮助广告技术平台选择相关广告。与第三方 Cookie 不同,在分享此类信息时,不会透露有关用户本身或浏览活动的更多信息。
通过 Topics API,第三方(例如广告技术平台)可以观察用户感兴趣的主题,然后访问这些主题。例如,该 API 可能会建议主题“光纤和纺织艺术"。knitting.example
Topics API 使用的主题列表是公开的、经过人工挑选、人类可读的,并且旨在避免敏感类别。这是当前列表,后续列表会不断扩充。该列表采用分类结构。主题可以宽泛一些,也可以较为具体。例如,Food & Drink
是一个宽泛类别,其子类别为 Cooking & Recipes
。子类别还可以进一步分为其他子类别。
这种主题分类需要在实用性和隐私性之间进行权衡。如果主题过于具体,则可以使用主题识别单个用户。如果它们过于宽泛,则对于选择广告或其他内容没有用处。
构建主题分类时牢记以下两项基本要求:
- 支持针对用户兴趣投放广告
- 保障用户安全并保护其隐私
这就涉及到几个问题。例如:
- 要让该 API 根据用户的浏览活动推断其感兴趣的主题,同时保护用户隐私,最佳方法是什么?
- 如何设计分类结构以使其更加实用?
- 分类应包含哪些具体商品?
API 如何推断网站的主题
主题派生自将网站主机名映射到零个或多个主题的分类器模型。 分析其他信息(例如完整网址或网页内容)或许有助于展示更具相关性的广告,但也可能会降低隐私保护。
用于将主机名映射到主题的分类器模型是公开的,正如解释器所说明的那样,您可以通过浏览器开发者工具查看网站的主题。模型预计会随着时间的推移不断完善和改进,并会定期更新;但这次发布的频率仍在考虑中。
只有包含调用 Topics API 的代码的网站才会纳入符合主题频率计算条件的浏览记录中,并且 API 调用方只会收到其观察到的主题。换言之,如果网站或嵌入式服务没有调用 API,则网站不符合主题频率计算条件。
此外,调用方只能接收其代码“看到”的主题。因此,如果其他调用方的代码为用户的浏览器注册了一个主题(例如 /Autos & Vehicles/Motor Vehicles (By Type)/Hatchbacks
),而您的代码未导致该用户浏览器注册该主题,那么当您从嵌入的代码调用 API 时,将无法获知该用户的浏览器感兴趣的主题。请注意,由于 API 现在包含已观察到的祖先实体,因此上面的示例 /Autos & Vehicles/Motor Vehicles (By Type)/Hatchbacks
也会导致对 Autos & Vehicles
和 Motor Vehicles
进行观察。
系统会根据顶级网站为调用方重新计算针对用户返回的主题。例如,如果 adtech.example
先在 news-a.example
上请求用户的主题,然后在 news-b.example
和 news-c.example
上请求用户主题,系统将在每个网站上重新计算返回给他们的主题。这意味着调用方可能会在不同的顶级网站上为某个用户获取不同的主题,因为系统从过去 3 个周期的前五个主题中随机选出三个针对该用户的主题(获得随机主题的几率为 5%)。这使得调用方更难按主题识别用户,因为主题在不同的顶级网站中可能有所不同(即使对于同一用户、调用方和周期一样)。
分类器模型
系统会针对 5 万个顶级网域手动挑选主题,并使用这类精选内容来训练分类器。此列表可以在 override_list.pb.gz
中找到,它位于 Classifier 标签页中当前模型下的 chrome://topics-internals/
中。列表中的网域与主题关联由 API 来代替模型本身的输出。
![chrome://topics-internals 页面,其中已选择“Classifier”面板。](https://developers.google.cn/static/privacy-sandbox/assets/images/chrometopics-internals-8d62cfff441e4.png?authuser=7&hl=sr)
chrome://topics-internals
页面“分类器”面板列出了模型版本、其路径以及与列出的每个主机关联的主题。如需直接运行模型,请参阅 TensorFlow 的模型运行指南。
如需检查 override_list.pb.gz
文件,请先将其解压缩:
gunzip -c override_list.pb.gz > override_list.pb
使用 protoc
将其作为文本进行检查:
protoc --decode_raw < override_list.pb > output.txt
GitHub 上提供了完整的带有 ID 的主题分类。
提供有关分类器模型的反馈或意见
您可以通过多个渠道提供有关 Topics API 的反馈。如需获得有关分类器模型的反馈,我们建议您提交 GitHub 问题或回复现有问题。例如:
用户最感兴趣的前五个主题是如何选出的
该 API 会为每个周期返回一个主题,最多返回三个。如果返回了三个,这包括当前周期和前两个周期的主题。
- 在每个周期结束时,浏览器都会编译满足以下条件的网页列表:
<ph type="x-smartling-placeholder">
- </ph>
- 用户在周期内访问过该网页。
- 该页面包含调用
document.browsingTopics()
的代码。 - 此 API 已启用(例如,未被用户屏蔽,或通过响应标头屏蔽)。
- 用户设备上的浏览器使用 Topics API 提供的分类器模型将每个页面的主机名映射到主题列表。
- 浏览器会累积主题列表。
- 浏览器会按频率生成前五个主题的列表。
然后,document.browsingTopics()
方法会返回每个周期的前五个主题中的随机主题,其中任何一个主题都有 5% 的几率从整个主题分类中随机选择。在 Chrome 中,用户还可以移除个别主题或清除浏览记录,以减少该 API 返回的主题数量。用户也可以选择停用该 API。
您可以在 chrome://topics-internals
页面中查看有关在当前周期内观察到的主题的信息。
API 如何确定哪些调用方查看哪些主题
API 调用方仅接收最近观察到的主题,并且每个周期会刷新一次用户的主题。这意味着 API 会提供一个滚动窗口,在该窗口中,给定调用方可以接收特定主题。
下表列出了用户在单个周期内假设的浏览历史记录(尽管这个示例并不切实际),其中显示了与用户访问过的网站相关的主题,以及每个网站(即在网站所含 JavaScript 代码中调用 document.browsingTopics()
的实体)上呈现的 API 调用方。
网站 | 主题 | 网站上的 API 调用方 |
---|---|---|
yoga.example | 健身 | adtech1.example adtech2.example |
knitting.example | 手工艺品 | adtech1.example |
远足-holiday.example | 健身、旅行和交通 | adtech2.example |
diy-clothing.example | 手工艺品、时尚和风格 | [无] |
在周期结束时(目前是一周),Topics API 会生成浏览器在这一周的热门主题。
- adtech1.example 现在有资格接收“健身”和“手工艺品”因为它们在 yoga.example 和 knitting.example 上观察到。
- adtech1.example 不符合接收“旅行和交通"主题,因为它未出现在用户最近访问过的与该主题相关的任何网站上。
- adtech2.example 发现“健身”和“旅行与交通"主题,但尚未看过“手工艺品”主题。
用户访问了 diy-clothing.example,该网站的样式"但没有在该网站上调用 Topics API。此时,这是指“时尚和样式"API 不会为任何调用方返回 topic。
在第二周,该用户访问了另一个网站:
网站 | 主题 | 网站上的 API 调用方 |
---|---|---|
sewing.example | 手工艺品 | adtech2.example |
此外,系统会将 adtech2.example 中的代码添加到 diy-clothing.example 中:
网站 | 主题 | 网站上的 API 调用方 |
---|---|---|
diy-clothing.example | 手工艺品、时尚和风格 | adtech2.example |
以及“健身”和“旅行与交通"从第 1 周开始,这意味着 adtech2.example 现在能够接收“Crafts”和“时尚与样式"主题 - 但直到下一个周期,即第 3 周。这可确保第三方无法像通过 Cookie 那样了解有关用户过去的信息(在本例中为对时尚的兴趣)。
两周后,“健身”和“旅行与交通"如果用户不访问包含 adtech2.example 中代码的任何包含这些主题的网站,则可能会从 adtech2.example 的符合条件的主题列表中退出。
用户控制、透明度和选择停用
用户应该能够了解 Topics API 的用途,了解相关表述、该 API 何时正在使用中,并且能够获得启用或停用该 API 的控件。
借助该 API 人类可读的分类,用户可以了解和控制浏览器可能为其推荐的主题。用户可以移除他们特别不希望 Topics API 与广告客户或发布商共享的主题,还可以通过控件向用户通知 API 并展示如何启用或停用 Topics API。Chrome 会在 chrome://settings/adPrivacy
上提供 Topics API 的相关信息和设置。此外,API 调用方无法在无痕模式下查看主题,并且系统会在清除浏览记录时一并清除主题。
如果出现以下情况,则返回的主题列表将为空:
- 用户通过浏览器设置 (
chrome://settings/adPrivacy
) 选择停用 Topics API。 - 用户已清除自己的主题(通过
chrome://settings/adPrivacy
上的浏览器设置)或清除了 Cookie。 - 浏览器处于无痕模式。
解释器详细介绍了隐私保护目标以及该 API 如何努力实现这些目标。
为网站选择停用
除了用户可以选择停用之外,您还可以为您的网站或其中的页面选择停用 Topics。开发者指南介绍了具体方法。
在设置了 prebid.js
的网站上使用 Topics API
如 Prebid 7 版本中所述, 社区通过一个新模块积极开发了与 Topics API 的集成。 此模块已于 2022 年 12 月合并。
如需了解详情,请访问以下资源:
- 阅读 Prebid 的 Topics API 模块文档。
- 如需了解详情,请通过 Prebid.js 提供的任何标准渠道与他们联系。
后续步骤
- 如果您是广告技术开发者,可以进行实验并参与 Topics API 的试用。
- 如需更深入的资源,请参阅开发者指南。
- 如需详细了解特定广告技术用例,请参阅 Topics API 集成指南。
互动和分享反馈
- GitHub:阅读 Topics API 说明,以及在 API 代码库中提出问题和关注相关问题的讨论。
- W3C:在 Improving Web Advertising Business Group(改进网络广告业务小组)中讨论行业用例。
- 通告:加入或查看邮寄名单。
- Privacy Sandbox 开发者支持:在 Privacy Sandbox 开发者支持代码库中提问并加入讨论。
- Chromium:提交 Chromium 错误,以询问有关目前可在 Chrome 中测试的实现的问题。