来源于:https://zhuanlan.zhihu.com/p/31440655
知乎 Feed 的发展过程与规划
知乎 Feed 的发展经历了以下一系列过程:
第一阶段
2011 年,知乎上线,在初期用户积累阶段,Feed 是基于用户间的关注关系,将每个用户的动态按照时间倒序的形式展示。这是起步时采用的方式,简单易懂。但随着用户量的上涨,刷屏、新内容量过多等问题很快就暴露出来。
技术架构上采用了推模型,当用户产生新的动态时会向他的每个关注者进行推送。这种构架逻辑简单,实现容易,响应时间快。但是随着用户量的增加,推送方式资源占用多的劣势随之显现出来,特别是对于关注了很多人的用户,动态推送需要占用大量的资源,推送的速度也随之变得非常慢。
第二阶段
2013 年 11 月,知乎参考 Facebook 所提出的 EdgeRank 算法模型,上线了新的 Feed 流产品。此时的知乎 Feed 流主要根据 Affinity Score(用户与 Feed 源的亲密度),Edge Weight(权重),Time Decay(时间衰减)来进行排序。
随着用户量的增加,技术构架上从“推”转换成了“推”/ “拉”结合的方式,节省了大量资源占用。但是由于 Feed 的计算逻辑都放到了在线,响应时间急剧变慢。
为了解决这个问题,我们对用户按照活跃度进行分群,为每个用户计算活跃度,然后根据用户的活跃度离线提前计算,只有非活跃用户实时计算。这样活跃用户访问的都是缓存,速度很快。但是这种架构也存在问题:
1、用户产生的动态不能实时分发
2、算法策略不能实时调整
3、离线计算策略维护复杂
相比第一阶段,知乎 Feed 的 CTR(Click-Through-Rate) 和 Duration 都有了 20% 左右的提升。
第三阶段
2017 年初至今,知乎上线了基于机器学习的排序算法,采用 GBDT 算法,根据用户维度的特征、内容维度的特征、以及交叉特征来进行排序,更重要的是加入了内容质量的判断,质量高的内容会得到更好的分发。
技术构架上采用了计算接近存储的设计方案,使用 Redis Module 将部分固定的计算逻辑放到 Redis 中进行计算,去掉了所有的离线计算,使用户的动态能够快速分发,算法模型能够实时调整。
相比第二阶段,这次进化取得了较大的成果。Feed 的响应时间的 P95 降低了 45%,资源占用减少了 40%,CTR 和 Duration 分别有 100% 和 40% 的提升。高质量内容分发占比提升 10%。
未来规划
在算法角度正在基于深度学习搭建更加个性化的推荐模型。技术构架上使用 Redis Module 后的 Redis 的动态扩容和比较多内存占用也是正在解决的问题。产品上我们会在 Feed 上做进一步升级,将会尝试将关注关系产生的 Feed 内容和推荐引擎产生的 Feed 内容做一些隔离,这样能更好地满足用户不同的需求。
网友评论