一、推荐系统的目的:
- 快速定位用户兴趣点,辅助决策,提升用户体验
- 提高产品转化率
- 把冷门的商品卖给想要的用户,发掘长尾价值
业务场景:sku,类目等 推荐;个性化的排行榜;个性化push内容;feed流订阅推荐
二、针对不同场景的通用架构:
基于离线训练的推荐系统架构设计
场景:手机应用市场、音乐推荐、短视频推荐、资讯、购物
常用算法:逻辑回归(Logistics Regression)、梯度提升决策树(GBDT)和因式分解(FM)
面向深度学习的推荐系统架构设计
场景:图像处理、自然语言理解、语音识别、在线广告等具有时序行为、多维数据的推荐系统
常用算法:受限玻尔兹曼(RBM)、自编码器(AE)、卷积神经网络(CNN)、深度神经网络(DNN)、宽度学习(Wide&Deep)等
我理解是多一层特征工程?比如单词的向量化,特征的处理,无论是训练模型还是预测时
基于在线训练的推荐系统架构设计
场景:广告和电商等高纬度大数据量、实时性要求很高的推荐系统,例如,新闻事件
常用算法:FTRL-Proximal、AdPredictor、Adaptive Oline Learning 和PBODL等
面向内容的推荐系统架构设计
场景:新闻资讯,今日头条、抖音、微博、视频音乐、广告购物朋友圈传播资讯、门户网站等
常用算法:NLP自然语言、word2vec、深度学习DNN、OCR等
一个完整的电商推荐系统
说明:如图一个完整的推荐系统包含两大核心部分:特征数据和算法引擎。其中特征数据可以分成实时特征和离线特征,两者并行但是不同的处理技术;算法引擎又主要包含召回和排序两部分,两者是有前后依赖关系的推理流程
特征数据包括实时和离线
- 离线:通过一些分布式数据库来实现数据的部署,初级的推荐服务建议直接使用业内比较成熟的MongoDB或者Elasticsearch来作为数据存储介质
实时:特征主要需要结合流式计算相关技术,例如通过Kafka的流平台,使用Spark Streaming、Flink或者Storm等来进行流式计算,考虑到实时性和数据的吞吐量,存储的方式可以直接使用REDIS这类缓存存储来实现 - 压缩:除了以上随着数据量的井喷式发展,整个数据量的读写IO压力会越来越巨大,也逐渐成为系统的瓶颈,优化的方式是对数据需要进行压缩,本团队使用的方式是Google的Protobuf技术,总体使用下来压缩后为压缩前存储空间的一半左右,同时Protobuf的解析效率也是非常高的,优于json格式的解析效率
- 算法引擎
最核心的两部分是召回(Recall)和排序(Ranking)- 召回:是从海量的数据里快速拿到相对少量的数据,要快而准
召回的算法和形式多样,如基于内容召回、相似召回、相关召回、模型召回等等,形式上偏好召回,标签召回,兴趣召回,相似召回,互补召回,关联召回,其他召回,热门数据。
常用召回算法:user/item/model-based CF,
但召回需要具备高并发与快召回的特点。为了在规定的时间内完成数据的快速召回,将形式多样的召回方法或结果建立了大量的倒排索引,直接推入缓存系统,如:相关相似关系(item2item或者user2item)和规则关系召回(rule),为了适应索引灵活更新和服务灵活扩展,底层也使用了MongoDB与Elasticsearch这种可扩展的分布式弹性存储介质来辅助数据存储
相似相关召回的数据一般是通过用户行为、订单、点击和素材文本信息等数据通过算法离线或者实时处理好生成pair对,直接存储在例如REDIS这类缓存中,吞吐量天然比较高。如:订单数据的 FGP,ALS算法;点击量的W2V,COV算法;商品名使用BM25算法
规则召回是根据规则来query召回数据,需要选择合理的数据存储,针对千人千面不同的用户不同的query条件可以设计一套拆分Query增加缓存实现的方式来提高整个召回的性能 - 排序:是从召回的数据中进行模型的精细排序,复杂而需要精确
排序这部分核心是模型的训练,模型算法常用的LR(简单效果普通);树模型XGB、GBDT,树模型在电商中效果还不错使用广泛,门槛低各种语言都有工具兼容;深度模型DNN,CNN,RNN,一般用tensowflow并通过 tensowflow serving部署模型提供API,深度学习模型过于灵活容易过度拟合需要复杂的特征工程和模型训练;模型融合;FM/FFM;learing to rank。
推荐系统中的排序是多目标排序, 比如CTR与CVR预估,按照优化方式的不同,也就是learn to rank的三种方式,可分为Pointwise CTR预估、Pairwise bpr Lambed MART、listWise
Pointwise 对单样本做分类或回归,也就是预测(query,doc)的得分作为排序准则,如lr,xgboost
Pairwise 考虑两两样本之间的偏序关系关系,转变为二分类问题,如(query,doc1)比(query,doc2)高,则(query,doc1)预测为正,(query,doc2)预测为负
Likewise 排序整体作为优化目标,通过预测分布和真实排序分布的差距来优化模型,典型模型如ListNet - 在系统架构上面主要提两点:不同模型的工程特性和模型的热部署
热部署:可减少发布量,针对集成在工程中的模型,我们团队使用zookeeper的同步机制来实现模型的在线更新。对于深度模型,tensor serving 已经支持了热部署
- 召回:是从海量的数据里快速拿到相对少量的数据,要快而准