发布人:戎海栋(腾讯微信看一看团队)、丁辰(阿里巴巴 PAI 团队)
背景与现状
推荐系统是机器学习的重要应用领域,能够根据用户偏好自动推送相关内容,比如展示商品,投放广告,推荐视频、新闻等多媒体内容等。
在推荐系统领域,Embedding 已成为处理 ID 类稀疏特征的常用手段,作为一种“函数映射”,Embedding 通常将高维稀疏特征映射为低维稠密向量,再进行模型端到端训练。
在 TensorFlow 框架中,全部以稠密 Tensor 为基本数据单元对数据进行计算、存储以及传输。TensorFlow 也基于稠密 Tensor 提供了静态 Embedding 机制,用于存储 Embedding 的 Tensor shape 固定为 [vocabulary_size, embedding_dimension]
,vocabulary_size
通常由 ID 空间决定,需要将其 Hash 映射到 vocabulary_size
范围内,在大规模推荐场景下,静态 Embedding 机制存在以下弊端:
-
特征冲突
特征 IDs 通常为字符串类型且规模庞大,这会导致初始 vocabulary_size
难以估计,如果 vocabulary_size
估计过小,则导致 Hash 冲突率增加,即不同特征可能查找到相同的 Embedding,造成特征冲突,影响模型效果:
- 内存浪费
如果 vocabulary_size
估计过大,则导致 Variable 会为大量永远不会被查找的 Embedding 预留资源,即内存浪费
-
在线学习不友好
在线学习场景中,随着训练持续进行,新的特征不断增加,老的特征要不断淘汰,这与稠密 Tensor 的形状必须事先确定相矛盾:特征不能随训练任意增加,通过算法淘汰某些不重要的特征时,也无法单独释放该特征 embedding 占用的内存资源
-
低效的 IO
推荐模型的更新过程具有稀疏性,即一段时间内训练更新的参数只占总量很少的一部分,但静态 Embedding 机制下,模型存取需要处理整个稠密 Tensor,这会带来极大的 IO 开销,难以支持超大模型训练
过去几年,工业界针对上述问题,在 TensorFlow 支持大规模推荐模型方面进行了大量探索,今天,我们很荣幸地推出 TensorFlow Recommenders-Addons (TFRA),这款开源 TensorFlow 软件包集成了相关优秀成果,使 TensorFlow 能够以更原生、更高效的方式支持 ID 类推荐模型的训练。相关成果已经过多家互联网公司真实商业场景的检验,实践证明,这些努力和进展大幅改善了这些企业实际业务的推荐效果,带来了真实的商业收益。同时我们也通过 SIG-Recommenders 维护并回馈给业界。
-
TensorFlow Recommenders-Addons (TFRA)
TFRA 目前包含两个独立组件,其中一个是 DynamicEmbedding 组件,一个是 EmbeddingVariable 组件,下面我们分别介绍这两个组件的原理和使用:
tfra.dynamic_embedding
(DynamicEmbedding组件)
tfra.dynamic_embedding 组件基于腾讯微信看一看团队戎海栋、张亚霏、程川等人 2020 年提出的稀疏域隔离方案实现,其设计目标如下:
-
使 TensorFlow 可以训练 Keys-Values 数据结构(Hash Table)
-
与 TensorFlow 原有功能有更好的兼容性,不改变算法工程师建模习惯
该组件具有如下优点:
-
有效避免 Hash 冲突问题,保证特征无损,能有效提升模型效果
-
内存动态伸缩,训练更省资源
-
复用 TensorFlow 所有优化器和初始化器
-
API 与原 TF 的
tf.nn.embedding_lookup
等 API 同名且行为一致,学习成本低
2.1 实现原理及 API 设计
2.1.1 分层表达稀疏参数
推荐模型的稀疏参数通常存于 HashTable 中,但是 TensorFlow 优化器是为训练稠密 Tensor 而设计的,无