文 / Ellie Zhou、Tian Lin、Cong Li、Shuangfeng Li 以及 Sushant Prakash
简介和动机
我们很高兴为 TFLite 开源了一个 端 到端解决方案 来解决设备端的推荐任务。在此,我们诚邀广大开发者使用我们的解决方案构建设备端模型,该解决方案可提供个性化、低延迟和高质量的推荐,同时还能保护用户隐私。
高质量的个性化推荐对于许多应用至关重要,如音乐、视频、购物、应用、新闻等。目前,典型的推荐系统完全在服务器端构建,可收集用户活动日志、使用收集到的日志训练推荐模型以及提供推荐模型。
尽管已有数据表明完全基于服务器的推荐系统功能十分强大, 但我们希望能另辟蹊径,探索并展示一种更轻量级的方法:在设备端部署推荐模型 。我们证明了这种设备端推荐解决方案可以实现低延迟推理,速度要比服务器端模型快出几个数量级。并且,它可以实现全新的用户体验,如更新排名和响应每个用户点击或交互的 UI,这一点令基于服务器的传统推荐系统望尘莫及。
设备端模型推理尊重用户隐私,无需将用户数据发送到服务器进行推理,所用的全部数据都保留在设备上。我们的解决方案支持使用公共数据或通过现有的代理数据集来训练模型,从而避免为每个新用例收集用户数据。对于设备端训练,我们会推荐感兴趣的读者使用 联邦学习 或 TFLite 模型个性化 作为替代方案。
解决方案 包含以下部分:
- 源代码,为设备端场景构建和训练高质量个性化推荐模型
- 一款 电影推荐演示应用,可在设备上运行模型
- 在 Github 代码库 中的准备训练示例和预训练模型的源代码
模型
推荐问题通常被表述为未来活动预测问题。因此,我们会对推荐模型进行训练,使其能够基于用户之前的活动来预测用户的未来活动。我们发布的模型采用以下架构构建:
在上下文方面,每个用户活动(如观看电影)都被嵌入到嵌入向量中。编码器将聚合来自过去用户活动的嵌入向量,以生成上下文嵌入。我们支持三种不同类型的编码器:
- 词袋法 (Bag-of-Words):计算活动嵌入向量的简单平均值。
- CNN:对活动嵌入向量应用一维卷积,然后进行最大池化。
- RNN:对活动嵌入向量应用 LSTM。
在标签方面,标签项(例如,用户看过的电影或感兴趣的下一部电影)被视为“正样本”,而所有其他项(例如,用户未看过的所有其他电影)通过负采样被视为“负样本”。正项和负项都被嵌入,点积结合上下文嵌入来产生对数几率并提供给 softmax 交叉熵损失。今后还会支持标签不是二进制的其他建模情况。完成训练后,可以导出模型并将其部署在设备上以提供服务。我们采用 top-K 推荐,即上下文嵌入和所有标签嵌入之间的 K 个置信度最高的预测 (K-highest logits) 。
示例
为了演示设备端推荐模型的质量和用户体验,我们使用 MovieLens 数据集训练了一个示例电影推荐模型,并开发了一款演示应用(模型和应用仅用于演示目的)。MovieLens 的 1M 数据集包含 6039 位用户对 3951 部电影的评分,每个用户仅对一小部分电影进行评分。为简化流程,我们忽略了评分分数,并训练了一个模型以在给定 N 部以前电影的条件下预测用户将对哪些电影进行评分,其中 N 称为 历史长度 。
下面显示了模型在历史长度不同的所有三种编码器上的性能:
我们可以发现,所有模型均达到了高召回率指标,而 CNN 和 RNN 模型通常在更长的历史长度下表现更好。在实践中,开发者可以使用不同的历史长度和编码器类型进行实验,并针对他们要解决的特定推荐问题找到最佳方法。
我们要强调的是,所有已发布的设备端模型都具有非常低的推理延迟。例如,对于与演示应用集成的 N=10 的 CNN 模型,在我们的实验中,Pixel 4 手机的推理延迟仅为 0.05ms。如简介中所述,如此低的延迟使得我们能够对手机上的每一次用户交互做出即时、流畅的响应,这一点在我们的应用中得到了证明:
未来工作
欢迎大家提供各种各样的扩展,参与模型的完善工作。目前的开源模型不支持一个以上的特征列来表示每个用户的活动。在下一个版本中,我们将支持多个特征作为活动表示。而且,我们正计划设计更高级的用户编码器,例如基于 Transformer 的编码器 (Vaswani, A., et al., 2017) 。
参考文献
Vaswani, A., et al.“Attention is all you need. arXiv 2017.” arXiv preprint arXiv:1706.03762 (2017), [1706.03762] Attention Is All You Need.
原文:Introduction to TFLite On-device Recommendation
中文:TensorFlow 公众号