技术栈

看了很多推荐系统设计和架构方面的文章。

存储层好像什么都有使用:关系型数据库,NoSql数据库,分布式存
储。

算法更是层出不穷:特征提取相关的算法,分类,聚类算法,语义理解 
算法。

计算框架也是各种各样:spark,flink

开发语言也有很多可选:scala,python,java等等

如何选择自己适合的,是否需要统一技术栈

架构

流程

知乎zhihu推荐系统

[知乎推荐系统的实践及重构之路](https://zhuanlan.zhihu.com/p/53130925)

开发语言的选择

原来知乎使用pthon比较多,实践过程中发现一种语言搞不定。
现在已有 Python、Scala、Java、Golang 等多种开发语言项目。

召回存储层选择

召回需求:

基于 topic ( tag )的召回、实体的召回、
地域的召回、CF(协同过滤)的召回以及 NN 产生的 embedding 
召回

技术选型:

redis: 简单查询适量数据,热门召回,地域召回,少量的 CF 召回

hbase: 简单查询海量数据,推荐系统当中的已读已推等等场景

ES搜索引擎:复杂聚合查询,通用基础检索(topic or tag 的召
          回)

faiss(facebook开源):矢量相似搜索,embedding 召回。
                    ANN(近似最近邻)检索。faiss 是
                    为稠密向量提供高效相似度搜索和聚类的框 
                    架

总结:

召回层大体是基于 ES + Redis + ANN 的模式进行构建

达观

架构

offline : 
    离线层
    原始数据处理,用户画像,内容画像,协同过滤,统计数据。
    小时级别。
nearline:
    近线层。
    对各种推荐算法的结果,进行融合排序。提供给在线层调用。
    秒级,分钟级。
online:
    在线层。
    用户接口
    毫秒级返回

技术栈

spark kafka :离线层跑重量级算法,协同过滤,矩阵分级,深度学习

头条

输入维度

除了内容和用户特征之外。

还有一个重要的的环境维度。这是移动互联网时代的特点,以及人的心
境随着外部环境变化,比如地铁,旅游,天气,上班还是下班。



难点以及解决

注意的点

新颖性,多样性,准确性

近期兴趣 : 很多人会随性的看一些以前没看过的东西,比如半小时内使用app 
长期兴趣 : 有些兴趣是长久的,比如篮球,游戏

用户冷启动:
    用户预估,热门推荐的方式解决,也可根据具体业务推荐给用户最可能喜欢的东西

内容冷启动:

内容时效性

热门文章的惩罚:
    可以根据用户行为进行权重降低
    
如何应对刷评论,刷转发等行为:
    完全依赖数据是不行的,要依赖外部因素

大的公司需要一个算法实验平台:
    有利于我们快速验证做ABTEST,找到最优的算法
    

岗位分工

算法团队:
nlp与偏向推荐的主题在大公司是有两拨人在做

工程团队:


肖圣贤
31 声望5 粉丝

学习让我充实


引用和评论

0 条评论