TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模

9 月,我们开源了 TensorFlow Recommenders,这个库能够帮助您轻松构建最先进的推荐系统模9

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第1张图片

文:Ruoxi Wang、Phil Sun、Rakesh Shivanna 和 Maciej Kula,Google

 

9 月,我们开源了 TensorFlow Recommenders,这个库能够帮助您轻松构建最先进的推荐系统模型。现在,我们高兴地宣布 TensorFlow Recommenders (TFRS) 的新版本 v0.3.0。

  • TensorFlow Recommenders
    https://mp.weixin.qq.com/s?__biz=MzU1OTMyNDcxMQ==&mid=2247491166&idx=1&sn=1886a9271e0c31e7040f820073d1c1c3&chksm=fc185516cb6fdc005d90e55d1e1fe2618396f15c359fabd766e9bcd776eac6df836c16a9bf35&scene=21#wechat_redirect

  • v0.3.0
    https://github.com/tensorflow/recommenders/releases/tag/v0.3.0

新版本引入了两项重要功能,二者对于构建和部署高质量、可扩展的推荐模型至关重要。

第一项新增功能是对快速可扩展近似检索提供内置支持。通过利用 ScaNN,TFRS 现已能够构建在数毫秒内即可从数以百万计的条目中检索出最佳候选条目的深度学习推荐模型,同时又保留了部署单个“输入查询特征即可输出建议”的 SavedModel 对象的便利性。

第二项新增功能是支持用于特征交互建模的更出色技术。新版本 TFRS 包含了 Deep & Cross Network 的实现:一种高效架构,用于学习深度学习推荐模型中使用的所有不同特征之间的交互。

  • Deep & Cross Network
    https://arxiv.org/pdf/2008.13535.pdf

如果您迫切希望尝试新增功能,可以直接前往我们的高效检索和特征交互建模教程。也可以登陆B 站 Google 中国 TensorFlow 官方频道收看《使用 TensorFlow 搭建推荐系统(全八讲)》视频获取帮助。

  • [教程] 高效检索
    https://tensorflow.google.cn/recommenders/examples/efficient_serving

  • [教程] 特征交互建模
    https://tensorflow.google.cn/recommenders/examples/dcn

  • 《使用 TensorFlow 搭建推荐系统(全八讲)》
    https://www.bilibili.com/video/BV1Hb4y1Z7zK

高效检索(粗排)

许多推荐系统的目标都是要从数百万或数千万的候选条目中检索出少量的优质推荐。推荐系统的粗排阶段将解决“大海捞针”式的问题,从整个候选列表中获取一份简短且有价值的候选列表。

正如我们在之前的文章中所讨论的那样,TensorFlow Recommenders 使构建双塔检索模型变得更加方便。此类模型执行检索分为两个步骤:

  1. 将用户输入映射到嵌入向量

  2. 在嵌入向量空间内寻找最佳候选条目

  • 文章
    https://mp.weixin.qq.com/s?__biz=MzU1OTMyNDcxMQ==&mid=2247491166&idx=1&sn=1886a9271e0c31e7040f820073d1c1c3&chksm=fc185516cb6fdc005d90e55d1e1fe2618396f15c359fabd766e9bcd776eac6df836c16a9bf35&scene=21#wechat_redirect

  • 双塔检索模型
    https://research.google/pubs/pub48840/

第一步的计算成本很大程度上取决于查询塔模型的复杂性。例如,如果用户输入为文本,那么使用 8 层转换器的查询塔的计算成本大约是使用 4 层转换器的查询塔的两倍。稀疏、量化和架构优化等技术都有助于降低这一计算成本。

  • 稀疏
    https://mp.weixin.qq.com/s?__biz=MzAwODY4OTk2Mg==&mid=2652049140&idx=1&sn=d2f0b5878c3ba7ba117741c85a2c36e8&scene=21#wechat_redirect

  • 量化
    https://mp.weixin.qq.com/s?__biz=MzU1OTMyNDcxMQ==&mid=2247486077&idx=1&sn=b065152b1d255ceee7df795356d0a4da&chksm=fc184135cb6fc8238d932eff952abb78b54b181321f915d7cf16171a5d6ffcb25ac67ec3c053&scene=21#wechat_redirect

  • 架构优化
    https://arxiv.org/abs/1905.11946

但是,对于具有数百万个候选条目的大型数据库而言,第二步通常对于实现快速推断更为重要。我们的双塔模型使用用户输入和候选嵌入向量的点积来计算候选条目相关性,尽管点积的计算成本相对较低,但需要针对数据库中的每个嵌入向量各计算一次,计算量会随数据库的大小呈线性增长,因此很快便会丧失计算可行性。因此,快速最近邻搜索 (NNS) 算法对于提高推荐系统的性能而言至关重要。

这正是 ScaNN 的价值所在。ScaNN 是由 Google Research 提供的最先进 NNS 库。它明显优于其他标准水平的 NNS 库。此外,它可与 TensorFlow Recommenders 无缝集成。如下所示,ScaNN Keras 层可无缝取代暴力检索粗排:

# Create a model that takes in raw query features, and
# recommends movies out of the entire movies dataset.
# Before
# index = tfrs.layers.factorized_top_k.BruteForce(model.user_model)
# index.index(movies.batch(100).map(model.movie_model), movies)
# After
scann = tfrs.layers.factorized_top_k.ScaNN(model.user_model)
scann.index(movies.batch(100).map(model.movie_model), movies)

# Get recommendations.
# Before
# _, titles = index(tf.constant(["42"]))
# After
_, titles = scann(tf.constant(["42"]))
print(f"Recommendations for user 42: {titles[0, :3]}")
  • ScaNN
    https://tensorflow.google.cn/recommenders/api_docs/python/tfrs/layers/factorized_top_k/ScaNN

由于是 Keras 层,因此 ScaNN 索引会序列化并自动与 TensorFlow Recommenders 模型的其余部分保持同步。另外,也不需要在模型和 ScaNN 之间来回传送请求,因为所有内容都已搭配好。随着 NNS 算法的改进,ScaNN 的效率只会不断提高并进一步优化检索准确率和延迟。

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第2张图片

ScaNN 可以将大型检索模型提速 10 倍以上,同时仍能提供与暴力矢量检索几乎相同的检索准确率

我们相信,ScaNN 的功能将在部署最先进的深度检索模型方面带来巨大的变革,使其更为便利。如果您有兴趣深入了解如何构建和应用基于 ScaNN 的模型,请查看我们的教程。

  • 教程
    https://tensorflow.google.cn/recommenders/examples/efficient_serving

Deep & Cross Network

对于许多预测模型而言,有效的特征交叉都是成功的关键。设想我们正在构建一个基于用户过往购买历史记录来销售搅拌机的推荐系统。诸如香蕉和食谱购买数量一类的单个特征能够为我们提供一些与用户意愿有关的信息,但将同时购买了香蕉和食谱这两项特征相结合,我们就得到了一个极为强烈的信号,表明用户可能想要购买搅拌机。特征的这种组合即称为特征交叉。

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第3张图片

在大规模互联网应用中,数据大多是类别型的,这导致特征空间庞大而稀疏。要在这种背景下确定有效的特征交叉,通常需要进行人工特征工程或穷举搜索。传统的前馈多层感知器 (MLP) 模型是通用的函数逼近器。但是,正如 Deep & Cross Network 和 Latent Cross 两篇论文中指出的那样,它们甚至无法有效地逼近二阶或三阶特征交叉。

  • Deep & Cross Network 
    https://arxiv.org/pdf/2008.13535.pdf

  • Latent Cross
    https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/18fa88ad519f25dc4860567e19ab00beff3f01cb.pdf

什么是 Deep & Cross Network (DCN)?

DCN 旨在帮助更加有效地学习显式和有限阶交叉特征。它们始于输入层(通常是嵌入向量层),然后是对显式特征交互建模的交叉网络,最后是对隐式特征交互建模的深度网络。

交叉网络

这是 DCN 的核心。它会在每个层上显式应用特征交叉,最高多项式次数(特征交叉阶数)随着层深度的增加而提高。下图显示了第 (i+1) 个交叉层。

交叉层呈现效果。x0  为基础层(通常设置为嵌入向量层),xi 为交叉层的输入,☉ 表示逐元素相乘,矩阵 W  和向量 b  为要学习的参数

只有一个交叉层时,将在输入特征之间创建二阶(成对)特征交叉。在上文的搅拌机示例中,交叉层的输入将为串联三项特征的向量:[country, purchased_bananas, purchased_cookbooks]。然后,输出的第一维将包含国家/地区与所有三项输入特征之间成对交互的加权和,第二维将包含 purchased_bananas与其他所有特征的加权交互,以此类推。 

这些交互项的权重构成了矩阵 W:如果交互重要性低,则其权重将接近于零;如果重要性高,则将远离零。 

要创建更高阶的特征交叉,我们可以堆叠更多的交叉层。例如,我们现在知道单个交叉层会输出二阶特征交叉,例如 purchased_bananas 与 purchased_cookbook 之间的交互。我们可以将这些二阶交叉进一步传递至另一个交叉层。然后,特征交叉部分会将那些二阶交叉与原始(一阶)特征相乘,从而创建三阶特征交叉,例如,国家/地区、purchased_bananas和 purchased_cookbooks 之间的交互。剩余连接将继续作用于在上一层中已经创建的那些特征交叉。 

如果我们将 k个交叉层堆叠在一起,那么 k 层交叉网络将创建高达 k+1 阶的所有特征交叉,其重要性由权重矩阵和偏差向量中的参数来表征。 

深度网络

Deep & Cross Network 中的深度网络部分是传统的前馈多层感知器 (MLP)。

然后,将深度网络和交叉网络进行组合便构成了 DCN。通常,我们可以在交叉网络顶部堆叠深度网络(堆叠结构);我们也可以将其并行放置(并行结构)。

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第4张图片

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第5张图片

Deep & Cross Network (DCN) 呈现效果。左:并行结构;右:堆叠结构

  • DCN
    https://arxiv.org/pdf/2008.13535.pdf

模型理解

充分理解学习的特征交叉有助于提高模型的可理解性。幸运的是,交叉层中的权重矩阵揭示了模型所学特征交叉的重要性水平。

以向客户销售搅拌机为例。如果同时购买了香蕉和食谱是数据中最具预测性的信号,则 DCN 模型应能捕获这种关系。下图展示了包含一个交叉层的 DCN 模型的学习矩阵,该模型基于合成数据训练,其中联合购买特征的重要性最高。我们看到,在没有应用任何人工特征工程的情况下,模型自身已经学习“purchased_bananas”和“purchased_cookbooks”之间的交互具有很高的重要性。

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第6张图片

交叉层中学习的权重矩阵

TensorFlow Recommenders 中现已实现交叉层,您可以轻松地将其用作模型的构建块。要了解操作方法,请查看我们的教程以获取示例用法和实际课程。如果您有兴趣深入了解更多内容,请参阅我们的研究论文 DCN 和 DCN v2。

  • 实现交叉层
    https://tensorflow.google.cn/recommenders/api_docs/python/tfrs/layers/dcn/Cross

  • 教程
    https://tensorflow.google.cn/recommenders/examples/dcn

  • DCN
    https://arxiv.org/pdf/1708.05123.pdf

  • DCN v2
    https://arxiv.org/pdf/2008.13535.pdf

致谢

我们要特别感谢 Derek Zhiyuan Cheng、Sagar Jain、Shirley Zhe Chen、Dong Lin、Lichan Hong、Ed H. Chi、Bin Fu、Gang (Thomas) Fu 和 Mingliang Wang 对 Deep & Cross Network (DCN) 所做的重要贡献。我们还要感谢在从研究构想到生产化的各个环节中,为 DCN 工作提供帮助和支持的所有人士:Shawn Andrews、Sugato Basu、Jakob Bauer、Nick Bridle、Gianni Campion、Jilin Chen、Ting Chen、James Chen、Tianshuo Deng、Evan Ettinger、Eu-Jin Goh、Vidur Goyal、Julian Grady、Gary Holt、Samuel Ieong、Asif Islam、Tom Jablin、Jarrod Kahn、Duo Li、Yang Li、Albert Liang、Wenjing Ma、Aniruddh Nath、Todd Phillips、Ardian Poernomo、Kevin Regan、Olcay Sertel、Anusha Sriraman、Myles Sussman、Zhenyu Tan、Jiaxi Tang、Yayang Tian、Jason Trader、Tatiana Veremeenko、Jingjing Wang、Li Wei、Cliff Young、Shuying Zhang、Jie (Jerry) Zhang、Jinyin Zhang、Zhe Zhao 以及更多参与人士(按字母顺序排序)。我们还要感谢 David Simcha、Erik Lindgren、Felix Chern、Nathan Cordeiro、Ruiqi Guo、Sanjiv Kumar、Sebastian Claici 和 Zonglin Li 对 ScaNN 所做的贡献。

想了解更多 TensorFlow 搭建推荐系统内容,可登录 B 站 Google 中国 TensorFlow 频道观看《使用 TensorFlow 搭建推荐系统系列(全八讲)》视频,也可关注 TensorFlow 官方公众号获取更多资讯。

TensorFlow Recommenders 迎来更新 — 可扩展检索和特征交互建模_第7张图片

 

你可能感兴趣的:(TensorFlow,机器学习,tensorflow)