知乎首页推荐系统

xiiatuuo · · 3423 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

知乎推荐系统的实践及重构之路
知乎如何洞察你的真实喜好?首页信息流技术揭秘

前记

架构部分主要是针对业务的发展把召回、排序等模块进行了可配置化和选型梳理
算法部分基本上参考youtube2016和alibaba2018的思路对系统进行了重构,包括召回和排序,也结合自己的业务做了一些优化,值得参考。

系统架构

  • 高并发场景从python到golang,利用抽象工厂模式来实现可插拔
  • 解决支持多队列混排和支持多路召回
  • 具体的召回方式主要是ES + Redis + ANN 的模式进行构建。ES 主要支持相对复杂的召回逻辑,比如基于多种 topic 的混合召回;Redis 主要用于支持热门召回,以及规模相对较小的 CF 召回等;ANN 主要支持 embedding 召回。
  • 离线任务和模型的管理问问题
    • 离线任务的代码统一到一处管理
    • 离线任务管理平台,将所有任务以通用包的形式进行管理
    • 任务结果的监控体系
  • 特征穿越问题
    • 在线代替了离线,通过在线落特征日志,而不是 Raw Data,并统一了特征日志 Proto,如此就可以统一特征解析脚本。
  • StatsD + Grafana + InfluxDB 的监控系统,因为召回已经用配置的方式,那么剩下的召回源的比例关系,还有特征分布,ranking 得分分布都可以很方便的获取,而不用一个一个开发

召回

  • 多路召回:用户画像、内容标签、内容源信息、关注关系队列、搜索关键词队列、用户兴趣召回感兴趣的内容,根据搜索关键词进行相关推荐
  • DNN召回1.0
    • 用户 128 维的 Embedding 表示
    • 冷启动:看到内容用户的 Embedding 是什么以及点击这些内容用户的 Embedding 是什么,我们可以利用这份数据把这些新产生内容的 Embedding 计算出来更新到 Embedding 库里面去
  • 准确度 DNN 比起 ALS 来讲提升了10倍的量级
  • DNN召回2.0
    • 原始数据比如长度有多少,有没有图片,经过三层的网络之后会生成 Feed Embedding,可以直接得到 Content Embedding,解决新内容的召回机制问题
    • 1)User Representation Network 引入 FM Pooling 层,学习用户高频消费行为的交叉特征,会让 Top100 的精确度提高 8%,2)我们把展示未点击的数据作为特征引入到 User Representation Network 里面,其中会用到历史搜索和历史阅读数据。3)展示了但是跳过的内容会在采样的时候加大权重,把它成为负例的概率变得更大,让用户的行为来指导采样。

排序

  • GBDT -> DNN -> ATTENTION+LSTM , 强化学习
  • 引入 FM 层作为这些类别之间的 Sparse Input 之间的交叉,AUC 提升了 0.2%,CTR提升了 1%。引入 CNN 及 LSTM 分别作为文本Encoder/Last Action Encoder,单用户使用时长提高 50 秒。
  • 引入 Attention 机制作为用户 Embedding 和 Candidate Embedding 之间的交叉权重,单用户使用时长增加了 40 秒左右
  • 多目标:我们使用了 CTR 预估模型预训练网络,利用 Parameter Hard Sharing,点击和点赞这两层共享之前的权重,会有一个独立的隐藏层 model task 自己的目标,这样能降低前向/反向传播中的计算量。
  • 将连续值预测转化成离散值预测:阅读时长的分布,这个分布与正态分布比较类似。所以我们使用了 z-value 来对阅读市场进行离散化,离散化之后会把阅读时长分为五等——没点击、点击了阅读时长低、点击了阅读时长中等、点击了阅读时长偏高、点击了阅读时长非常高
  • 修改了 Softmax 函数:如果预测出的档数和实际用户阅读时长档数差太多,我们加一个比较大的修改函数,让这种样本的 loss 加大

模型训练问题和业务问题

  • 样本组织:线上进行实时打点避免穿越;正负样本进行不同采样率的实验
  • 特征工程:分布范围比较大的特征,有一万个赞也有几万个赞的,做 CTR 预估的过程中赞量的影响会变得非常不平均,所以通常会进行特征的归一化和 boxing,分成不同的段输入
  • 模型评估:做了一个 DCG Gain 收益的指标,比AUC具有更高的参考意义
  • 多样性问题:一个内容出现几次之后你没有点击,之后都不会推荐相似的内容
  • 信息茧房:针对老用户及兴趣比较均匀的用户,适当减少兴趣探测力度,在探测过程中也会尽量使用 Tag 之间的关联信息增强探测效率

总结

  • ES也许在我们目前的场景中能发挥用处,而不用人工来进行索引拆解
  • DNN来进行召回和排序看起来已经是业界非常通用的方法了,而且ESSM和DIN、DIEN这些ali的方法看起来工业届也是用起来比较合适的
  • 特征工程其实有很多统计的工作
  • 配置化不仅策略上线方便,监控也方便

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:xiiatuuo

查看原文:知乎首页推荐系统

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3423 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传