今日头条推荐系统:P1 概述
我们优化的目标是什么?用户满意度
我们正在寻找以下最佳 函数
以最大化 用户满意度
。
用户满意度 = 函数(内容, 用户画像, 上下文)
- 内容:文章、视频、用户生成内容短视频、问答等的特征。
- 用户画像:兴趣、职业、年龄、性别和行为模式等。
- 上下文:工作空间、通勤、旅行等场景下的移动用户。
如何评估满意度?
-
可测量的目标,例如:
- 点击率
- 会话时长
- 点赞
- 评论
- 转发
-
难以测量的目标:
- 广告和特殊类型内容(问答)的频率控制
- 低俗内容的频率控制
- 减少点击诱饵、低质量、恶心内容
- 强制/固定/高度权重重要新闻
- 低权重来自低级账户的内容
如何优化这些目标?机器学习模型
寻找上述最佳 函数
是一个典型的监督机器学习问题。为了实现系统,我们有以下算法:
- 协同过滤
- 逻辑回归
- 深度神经网络
- 因子分解机
- GBDT
一个世界级的推荐系统应该具备 灵活性,能够进行 A/B 测试并结合上述多种算法。现在结合逻辑回归和深度神经网络的做法越来越流行。Facebook 多年前就同时使用了逻辑回归和 GBDT。
模型如何观察和测量现实?特征工程
-
内容特征与用户兴趣之间的相关性。 显性相关性包括关键词、类别、来源、类型。隐性相关性可以从用户向量或模型如因子分解机中的物品向量中提取。
-
环境特征,如地理位置、时间。 可以作为偏差或在其基础上建立相关性。
-
热门趋势。 有全球热门趋势、类别热门趋势、主题热门趋势和关键词热门趋势。热门趋势在我们对用户信息较少时非常有助于解决冷启动问题。
-
协同特征,有助于避免推荐内容越来越集中。 协同过滤不是单独分析每个用户的历史,而是根据用户的点击、兴趣、主题、关键词或隐性向量找到用户之间的相似性。通过找到相似用户,可以扩展推荐内容的多样性。
大规模实时训练
- 用户喜欢看到根据我们从他们的行为中跟踪到的信息实时更新的新闻推送。
- 使用 Apache Storm 实时训练数据(点击、展示、收藏、分享)。
- 收集数据直到达到阈值,然后更新推荐模型
- 在高性能计算集群中存储模型参数,如数百亿的原始特征和数十亿的向量特征。
它们的实现步骤如下:
- 在线服务实时记录特征。
- 将数据写入 Kafka
- 从 Kafka 向 Storm 进件数据
- 填充完整的用户画像并准备样本
- 根据最新样本更新模型参数
- 在线建模获得新知识
如何进一步减少延迟?召回策略
考虑到所有内容的超大规模,无法用模型预测所有事情。因此,我们需要召回策略来关注数据的代表性子集。性能在这里至关重要,超时为 50 毫秒。
在所有召回策略中,我们采用 反向索引<Key, List<Article>>
。
Key
可以是主题、实体、来源等。
兴趣标签 | 相关性 | 文档列表 |
---|---|---|
电子商务 | 0.3 | … |
娱乐 | 0.2 | … |
历史 | 0.2 | … |
军事 | 0.1 | … |
数据依赖
- 特征依赖于用户端和内容端的标签。
- 召回策略依赖于用户端和内容端的标签。
- 用户标签的内容分析和数据挖掘是推荐系统的基石。