随着互联网进入下半场,对于“人”、“货”、“场”三个核心元素的要求越来越高,随着数据量和流量的爆发式增长,传统的人工运营方式已经很难适应当下如此复杂的业务场景,如何精细、准确、高效、智能地联系三者成为各个平台系统越来越关注的点,于是基于千人千面个性化的推荐系统成为各个业务场景必不可少的一环。


本文主要介绍在电商场景下,关于个性化推荐系统的架构方面的介绍,考虑到篇幅,其他推荐系统相关的算法大数据方面技术例如特征工程、模型训练部署等会在另外文章中介绍。先给出系统的总体技术架构图,具体模块后面详细介绍。

从架构图上可以看出,一个完整的推荐系统包含两大核心部分:特征数据算法引擎。其中特征数据可以分成实时特征和离线特征,两者并行但是不同的处理技术;算法引擎又主要包含召回和排序两部分,两者是有前后依赖关系的推理流程。

1. 特征数据

特征数据根据实时性分成两种类型:离线特征和实时特征,特征数据具有数据量大的特点,基于此特点,需要选择合理的数据处理技术和存储介质。

针对离线数据,主要需要结合大数据技术,通过一些分布式数据库来实现数据的部署,对于初级的推荐服务建议直接使用业内比较成熟的MongoDB或者Elasticsearch来作为数据存储介质。两者都具有比较弹性的数据存储扩展性。

针对实时数据,例如用户的实时行为,主要需要结合流式计算相关技术,例如通过Kafka的流平台,使用Spark Streaming、Flink或者Storm等来进行流式计算,考虑到实时性和数据的吞吐量,存储的方式可以直接使用REDIS这类缓存存储来实现,根据不同阶段使用的特征,进行了不同的处理,如用户偏好反馈、实时用户特征数据等。

除了以上的技术选型和设计方案,在系统的发展过程中,随着数据量的井喷式发展,整个数据量的读写IO压力会越来越巨大,也逐渐成为系统的瓶颈,优化的方式是对数据需要进行压缩,本团队使用的方式是Google的Protobuf技术,总体使用下来压缩后为压缩前存储空间的一半左右,同时Protobuf的解析效率也是非常高的,优于json格式的解析效率。

2. 算法引擎

对于算法引擎,最核心的两部分是召回(Recall)排序(Ranking)。召回是从海量的数据里快速拿到相对少量(比如一千左右)的数据,这一步最重要的是快和尽可能准。排序是从召回的数据中进行模型的精细排序,特点是复杂和精确。

2.1 召回(RECALL)

召回的算法和形式多样,如基于内容召回、相似召回、相关召回、模型召回等等。但召回需要具备高并发与快召回的特点。为了在规定的时间内完成数据的快速召回,将形式多样的召回方法或结果建立了大量的倒排索引,直接推入缓存系统,如:相关相似关系(item2item或者user2item)和规则关系召回(rule);为了适应索引灵活更新和服务灵活扩展,底层也使用了MongoDB与Elasticsearch这种可扩展的分布式弹性存储介质来辅助数据存储,建立对应的索引关系,触发索引导入缓存,如规则关系召回。

相似相关召回的数据一般是通过用户行为、订单、点击和素材文本信息等数据通过算法离线或者实时处理好生成pair对,直接存储在例如REDIS这类缓存中,吞吐量天然比较高。下图是举例了部分数据和算法:

规则召回是从海量的数据中根据Query规则来进行召回。这里提高吞吐量的方式除了选择高性能的硬件设备和合适的分布式数据库外,我们团队的核心思想是使用高速的缓存来进一步实现高吞吐的召回,基于这个核心思路,设计了一套拆分Query增加缓存实现的方式来提高整个召回的性能。

一般的Query都是通过多个条件来组合实现的,电商的个性化推荐场景下,每个User的Query条件可能会有区别,造成Query的千人千面,这时候即使在Query层面加上缓存,也很难达到很理想的缓存命中率。于是该如何提高缓存命中率呢?我们的思路是把大的Query根据其中的条件拆分成各个独立的原子条件进行多路Query,在小条件的Query上增加缓存。由于Query的粒度变小,不同用户之间可能会共享一些同样的Query条件,从而达到提高缓存命中率的目标。方案如下图:

2.2 排序(RANKING)

排序这部分核心是模型的训练,模型算法训练本文不过多阐述,在系统架构上面主要提两点:不同模型的工程特性和模型的热部署。

模型的工程特性上面,我们团队在系统的发展过程中,接触使用过线性模型、树模型和其他深度模型。

针对电商复杂的推荐场景,线性模型是使用最简单但是效果比较普通,这里就不过多介绍了。

树模型,代表是GBDT和XGBoost。树模型在电商推荐的场景下已经被证明效果不错并且也在业内被广泛使用,这里介绍此类模型是因为相比其他的深度学习模型,树模型已经被其他多种编程语言兼容(例如大多数后台应用使用的JAVA语言),使得树模型的使用门槛相对较低,能更容易出效果。

深度学习模型,模型比较复杂,一般模型使用tensorflow技术,通过tensor serving部署模型API接口,在推理效果上上限比较高,但需要更复杂的特征工程和模型训练。

对于模型的热部署,此机制可以在日常的工作中减少很多发布量,让模型的更新更自由和方便。针对集成在工程中的模型,我们团队使用zookeeper的同步机制来实现模型的在线更新。至于深度学习模型,tensor serving直接已经支持了模型的热部署。


写在最后

本文主要从推荐系统的工程架构方面和大家分享了一些较基础的技术方案,当然详细的推荐系统远不止文章中这近千个文字可以表述完整的,这里也只是抛砖引玉,各位看官如果有问题、建议或者新的看法,欢迎留言一起探讨。同时,后续也计划继续推出推荐系统的特征篇和算法篇,希望大家可以在技术的世界里一起成长。

转载:https://zhuanlan.zhihu.com/p/123951784

从0到1打造推荐系统-架构篇相关推荐

  1. Hadoop3.3.0入门到架构篇之一

    Hadoop入门到架构篇之一 Hadoop组成 HDFS (浏览器端口号50070(low) / 9870(high)) NameNode(nn) : 存储文件的元数据如文件名,文件目录结构,文件属性 ...

  2. 【王喆-推荐系统】(task1)DL推荐系统架构(基础架构篇)

    学习心得 通过task1的学习在脑海里建立DL背景的推荐系统架构:为了解决[在"信息过载"情况下,用户怎么高效获取感兴趣的信息]的问题,并且构建更好的拟合数据和表达能力的模型,深度 ...

  3. 腾讯音乐:全民K歌推荐系统架构及粗排设计

    编辑整理:张振.于洋 导读:腾讯音乐娱乐集团 ( TME ) 目前有四大移动音乐产品:QQ音乐.酷狗音乐.酷我音乐和全民K歌,总月活超8亿.其中,全民K歌与其他三款产品有明显的差异,具体表现如下:以唱 ...

  4. 如何从 0 到 1 打造团队 PC/H5 构建工具

    关注若川视野, 回复"pdf" 领取资料,回复"加群",可加群长期交流学习 一.前言 大家好,我叫鳗鱼,这次分享的主题是如何从 0 到 1 打造适合自己的构建部 ...

  5. 从 0 搭建一个工业级推荐系统

    推荐系统从来没像现在这样,影响着我们的生活.当你上网购物时,天猫.京东会为你推荐商品:想了解资讯,头条.知乎会为你准备感兴趣的新闻和知识:想消遣放松,抖音.快手会为你奉上让你欲罢不能的短视频. 而驱动 ...

  6. 高并发推荐系统架构设计实践

    猜你喜欢 0.[免费下载]2022年1月热门报告盘点1.腾讯QQ信息流推荐业务实践2.小红书推荐中台实践3.微信视频号的实时推荐技术架构分享4.预训练模型在华为信息流推荐系统中的探索和应用5.腾讯PC ...

  7. 基于Go语言实现高并发推荐系统架构设计

    猜你喜欢 0.[免费下载]2021年12月热门报告盘点1.史上最全推荐系统传统算法合集2.推荐系统模型:多场景下的星型CTR预估模型3.新一代Rank技术在阿里巴巴推荐系统中的应用实践4.预训练模型在 ...

  8. 全民K歌推荐系统架构、算法及后台设计实践

    猜你喜欢 0.2021年轻人性生活调研报告1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.2021年10月份热门报告免费下载4.微博推荐算法实践与机器学习平台演进5.腾讯PCG推 ...

  9. 推荐系统架构与算法流程详解

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 zhuanlan.zhihu.com/p/259985388 推荐:https://www.xtt ...

最新文章

  1. 轻量级自动化运维工具Fabric的安装与实践
  2. java反射克隆对象_Java反射 - 2(对象复制,父类域,内省)
  3. 【收藏】如何避免everything每次都重建索引
  4. 【Linux】一步一步学Linux——groupmod命令(89)
  5. install npm 到某个文件下执行_如何将npm安装到指定目录?
  6. wordpress支持MySQL5.5_wordpress数据库版本为5.5以上导出不能在5.5以下的版本导入的问题解决...
  7. for循环中的setTimeout()
  8. matlab2013基础教程,Matlab2013a教程
  9. 58同城溢价私有化,互联网“前浪”躲不过“七年之痒”?
  10. 新浪云生成互联网页面及域名
  11. 蓝牙服务器维修理地址,云服务器蓝牙
  12. 阅读的 10 大好处:为什么你应该每天阅读
  13. 神经网络与深度学习 相关
  14. 撕开帝国裂缝的互联网+饮料公司——元气森林是如何做的?
  15. 人工智能公司招聘资深java开发工程师
  16. FIR数字滤波器的设计[Matlab][带源码]
  17. php7 libmcrypt.dll_libmcrypt.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  18. 在JAVA类中解析GOOGLE MAP地址和反向解析纬经度
  19. Dreamweaver8安装后无法启动
  20. 无线流媒体网关配置参数

热门文章

  1. Vmware迁移datastore注意事项
  2. Android线程和线程Handler基础一览
  3. Linux系统安全加固策略(二)
  4. 巧用DOS命令打印上线文件列表
  5. 保持 Go 模块兼容
  6. C/C++ 变参函数
  7. 腾讯 2016 春季实习校招一面回忆(C++ 后台)
  8. sql按年、月、日、查询排序
  9. python学习总结----异常处理
  10. Jmeter 常用断言使用