技术栈
看了很多推荐系统设计和架构方面的文章。
存储层好像什么都有使用:关系型数据库,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与偏向推荐的主题在大公司是有两拨人在做
工程团队:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。