技术总监亲自上阵,手撸了个推荐系统!

省时查报告-专业、及时、全面的行研报告库

省时查方案-专业、及时、全面的营销策划方案库

【免费下载】2023年2月份热门报告合集

从0到1详解推荐系统基础知识和框架

推荐技术在vivo互联网商业化业务中的实践.pdf

推荐系统基本问题及系统优化路径.pdf

大规模推荐类深度学习系统的设计实践.pdf

荣耀推荐算法架构演进实践.pdf

推荐系统在腾讯游戏中的应用实践.pdf

小红书推荐系统中台应用实践

微信视频号实时推荐技术架构分享

61b179facbbbd7c8e396fa8d0db9dd2c.png

做广告业务1年多时间了,但是平时的工作主要和广告工程有关,核心的广告算法由 AI 部门支持,对我们而言可以说是「黑盒般」的存在,只需要对训练好的模型进行调用即可。

近期,我打算系统性地学习下广告中的搜索和推荐算法,当然更多是从工程的视角去弄清楚:算法的基本原理、以及面对线上海量数据时算法是如何解决性能问题的?整个过程,我会将有价值的技术点输出成系列文章。

这篇文章属于推荐系统的入门篇,本文暂不考虑线上环境的海量数据,目的是先了解清楚推荐系统的基本构成,我会通过图解推荐算法以及程序demo的形式展开,内容包括:

b1047748c9661207f48490f13460ee7e.png

01 走进推荐系统的世界

“啤酒与尿布” 的故事相信很多人都听过,年轻爸爸去超市购买尿布时,经常会买点啤酒犒劳自己。因此,沃尔玛将这两种商品进行了捆绑销售,最终获得了更好的销量。

5da327970b981e2577965315daa0304e.jpeg

“啤酒与尿布”的故事

这个故事背后的理论依据就是 “推荐算法”,因为尿布和啤酒经常出现在同一个购物车中,那么向购买尿布的年轻爸爸推荐啤酒确实有一定道理。

1. 推荐系统到底解决的是什么问题?

推荐系统从20世纪90年代就被提出来了,但是真正进入大众视野以及在各大互联网公司中流行起来,还是最近几年的事情。

随着移动互联网的发展,越来越多的信息开始在互联网上传播,产生了严重的信息过载。因此,如何从众多信息中找到用户感兴趣的信息,这个便是推荐系统的价值。精准推荐解决了用户痛点,提升了用户体验,最终便能留住用户。

推荐系统本质上就是一个信息过滤系统,通常分为:召回、排序、重排序这3个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户。

516254abd19c8418ce95309a34bdd58d.png

推荐系统的分阶段过滤流程

2. 推荐系统的应用场景

哪里有海量信息,哪里就有推荐系统,我们每天最常用的APP都涉及到推荐功能:

  • 资讯类:今日头条、腾讯新闻等

  • 电商类:淘宝、京东、拼多多、亚马逊等

  • 娱乐类:抖音、快手、爱奇艺等

  • 生活服务类:美团、大众点评、携程等

  • 社交类:微信、陌陌、脉脉等

4f413b580ed5c576659f3f8414fe70b2.png

头条、京东、网易云音乐中的推荐功能

推荐系统的应用场景通常分为以下两类:

  • 基于用户维度的推荐:根据用户的历史行为和兴趣进行推荐,比如淘宝首页的猜你喜欢、抖音的首页推荐等。

  • 基于物品维度的推荐:根据用户当前浏览的标的物进行推荐,比如打开京东APP的商品详情页,会推荐和主商品相关的商品给你。

3. 搜索、推荐、广告三者的异同

搜索和推荐是AI算法最常见的两个应用场景,在技术上有相通的地方。这里提到广告,主要考虑很多没做过广告业务的同学不清楚为什么广告和搜索、推荐会有关系,所以做下解释。

  • 搜索:有明确的搜索意图,搜索出来的结果和用户的搜索词相关。

  • 推荐:不具有目的性,依赖用户的历史行为和画像数据进行个性化推荐。

  • 广告:借助搜索和推荐技术实现广告的精准投放,可以将广告理解成搜索推荐的一种应用场景,技术方案更复杂,涉及到智能预算控制、广告竞价等。

02 推荐系统的整体架构

68fa006a439f5c51804e452c47ef30be.png

推荐系统的整体架构

上面是推荐系统的整体架构图,自下而上分成了多层,各层的主要作用如下:

  • 数据源:推荐算法所依赖的各种数据源,包括物品数据、用户数据、行为日志、其他可利用的业务数据、甚至公司外部的数据。

  • 计算平台:负责对底层的各种异构数据进行清洗、加工,离线计算和实时计算。

  • 数据存储层:存储计算平台处理后的数据,根据需要可落地到不同的存储系统中,比如Redis中可以存储用户特征和用户画像数据,ES中可以用来索引物品数据,Faiss中可以存储用户或者物品的embedding向量等。

  • 召回层:包括各种推荐策略或者算法,比如经典的协同过滤,基于内容的召回,基于向量的召回,用于托底的热门推荐等。为了应对线上高并发的流量,召回结果通常会预计算好,建立好倒排索引后存入缓存中。

  • 融合过滤层:触发多路召回,由于召回层的每个召回源都会返回一个候选集,因此这一层需要进行融合和过滤。

  • 排序层:利用机器学习或者深度学习模型,以及更丰富的特征进行重排序,筛选出更小、更精准的推荐集合返回给上层业务。

从数据存储层到召回层、再到融合过滤层和排序层,候选集逐层减少,但是精准性要求越来越高,因此也带来了计算复杂度的逐层增加,这个便是推荐系统的最大挑战。

其实对于推荐引擎来说,最核心的部分主要是两块:特征和算法。

290535c43bd3b293bcbb2a27815bef63.png

推荐引擎的核心功能和技术方案

特征计算由于数据量大,通常采用大数据的离线和实时处理技术,像Spark、Flink等,然后将计算结果保存在Redis或者其他存储系统中(比如HBase、MongoDB或者ES),供召回和排序模块使用。

召回算法的作用是:从海量数据中快速获取一批候选数据,要求是快和尽可能的准。这一层通常有丰富的策略和算法,用来确保多样性,为了更好的推荐效果,某些算法也会做成近实时的。

排序算法的作用是:对多路召回的候选集进行精细化排序。它会利用物品、用户以及它们之间的交叉特征,然后通过复杂的机器学习或者深度学习模型进行打分排序,这一层的特点是计算复杂但是结果更精准。

03 图解经典的协同过滤算法

了解了推荐系统的整体架构和技术方案后,下面带大家深入一下算法细节。这里选择图解的是推荐系统中的明星算法:协同过滤(Collaborative Filtering,CF)。

对于工程同学来说,可能觉得 AI 算法晦涩难懂,门槛太高,确实很多深度学习算法的确是这样,但是协同过滤却是一个简单同时效果很好的算法,只要你有初中数学的基础就能看懂。

1. 协同过滤是什么?

协同过滤算法的核心就是「找相似」,它基于用户的历史行为(浏览、收藏、评论等),去发现用户对物品的喜好,并对喜好进行度量和打分,最终筛选出推荐集合。它又包括两个分支:

  • 基于用户的协同过滤:User-CF,核心是找相似的人。比如下图中,用户 A 和用户 C 都购买过物品 a 和物品 b,那么可以认为 A 和 C 是相似的,因为他们共同喜欢的物品多。这样,就可以将用户 A 购买过的物品 d 推荐给用户 C。

b3685f64fab878d3cab999a3be2d4ee4.png

基于用户的协同过滤示例

  • 基于物品的协同过滤:Item-CF,核心是找相似的物品。比如下图中,物品 a 和物品 b 同时被用户 A,B,C 购买了,那么物品 a 和 物品 b 被认为是相似的,因为它们的共现次数很高。这样,如果用户 D 购买了物品 a,则可以将和物品 a 最相似的物品 b 推荐给用户 D。

bc09dba2f1f33e1398fc8fad41d3eab7.png

基于物品的协同过滤示例

2. 如何找相似?

前面讲到,协同过滤的核心就是找相似,User-CF是找用户之间的相似,Item-CF是找物品之间的相似,那到底如何衡量两个用户或者物品之间的相似性呢?

我们都知道,对于坐标中的两个点,如果它们之间的夹角越小,这两个点越相似,这就是初中学过的余弦距离,它的计算公式如下:

ecfd1d170e0aa0553f6b791350a586fd.png

举个例子,A坐标是(0,3,1),B坐标是(4,3,0),那么这两个点的余弦距离是0.569,余弦距离越接近1,表示它们越相似。

09d8209ec1d8fbcd937a2af44ef80338.png

除了余弦距离,衡量相似性的方法还有很多种,比如:欧式距离、皮尔逊相关系数、Jaccard 相似系数等等,这里不做展开,只是计算公式上的差异而已。

3. Item-CF的算法流程

清楚了相似性的定义后,下面以Item-CF为例,详细说下这个算法到底是如何选出推荐物品的?

第一步:整理物品的共现矩阵

假设有 A、B、C、D、E 5个用户,其中用户 A 喜欢物品 a、b、c,用户 B 喜欢物品 a、b等等。

56ba1ab25537e57e18e966dcad4f2e8a.png

所谓共现,即:两个物品被同一个用户喜欢了。比如物品 a 和 b,由于他们同时被用户 A、B、C 喜欢,所以 a 和 b 的共现次数是3,采用这种统计方法就可以快速构建出共现矩阵。

第二步:计算物品的相似度矩阵

对于 Item-CF 算法来说,一般不采用前面提到的余弦距离来衡量物品的相似度,而是采用下面的公式:

0bbfb7bb3cac28120a437a513f65e34c.png

其中,N(u) 表示喜欢物品 u 的用户数,N(v) 表示喜欢物品 v 的用户数,两者的交集表示同时喜欢物品 u 和物品 v 的用户数。很显然,如果两个物品同时被很多人喜欢,那么这两个物品越相似。

基于第1步计算出来的共现矩阵以及每个物品的喜欢人数,便可以构造出物品的相似度矩阵:

8bdcedce4340cc01aff418ea2399e9cd.png

第三步:推荐物品

最后一步,便可以基于相似度矩阵推荐物品了,公式如下:

595630fd4db8f33ea8b707b03b328bdd.png

其中,Puj 表示用户 u 对物品 j 的感兴趣程度,值越大,越值得被推荐。N(u) 表示用户 u 感兴趣的物品集合,S(j,N) 表示和物品 j 最相似的前 N 个物品,Wij 表示物品 i 和物品 j 的相似度,Rui 表示用户 u 对物品 i 的兴趣度。

上面的公式有点抽象,直接看例子更容易理解,假设我要给用户 E 推荐物品,前面我们已经知道用户 E 喜欢物品 b 和物品 c,喜欢程度假设分别为 0.6 和 0.4。那么,利用上面的公式计算出来的推荐结果如下:

121fea48cfa7717796f42ca11313b0ab.png

因为物品 b 和物品 c 已经被用户 E 喜欢过了,所以不再重复推荐。最终对比用户 E 对物品 a 和物品 d 的感兴趣程度,因为 0.682 > 0.3,因此选择推荐物品 a。

04 从0到1搭建一个推荐系统

有了上面的理论基础后,我们就可以用 Python 快速实现出一个推荐系统。

1. 选择数据集

这里采用的是推荐领域非常经典的 MovieLens 数据集,它是一个关于电影评分的数据集,官网上提供了多个不同大小的版本,下面以 ml-1m 数据集(大约100万条用户评分记录)为例。

下载解压后,文件夹中包含:ratings.dat、movies.dat、users.dat 3个文件,共6040个用户,3900部电影,1000209条评分记录。各个文件的格式都是一样的,每行表示一条记录,字段之间采用 :: 进行分割。

以ratings.dat为例,每一行包括4个属性:UserID, MovieID, Rating, Timestamp。通过脚本可以统计出不同评分的人数分布:

19c1973bebb14cfc16e87cd1940040b6.jpeg

2. 读取原始数据

程序主要使用数据集中的 ratings.dat 这个文件,通过解析该文件,抽取出 user_id、movie_id、rating 3个字段,最终构造出算法依赖的数据,并保存在变量 dataset 中,它的格式为:dict[user_id][movie_id] = rate

84267f9d2354d3e15ac17b366e66b58a.jpeg

3. 构造物品的相似度矩阵

基于第 2 步的 dataset,可以进一步统计出每部电影的评分次数以及电影的共生矩阵,然后再生成相似度矩阵。

d94e0df104f5e8fbc3873b3ab43fd950.png

4. 基于相似度矩阵推荐物品

最后,可以基于相似度矩阵进行推荐了,输入一个用户id,先针对该用户评分过的电影,依次选出 top 10 最相似的电影,然后加权求和后计算出每个候选电影的最终评分,最后再选择得分前 5 的电影进行推荐。

76072c83484c39448d268d20b4ad147a.png

5. 调用推荐系统

下面选择 UserId=1 这个用户,看下程序的执行结果。由于推荐程序输出的是 movieId 列表,为了更直观的了解推荐结果,这里转换成电影的标题进行输出。

0de66fafd26c64329a0b74ceeeac9e90.png

最终推荐的前5个电影为:

c13df1eaf83858ac83cd0620f8155030.png

05 线上推荐系统的挑战

通过上面的介绍,大家对推荐系统的基本构成应该有了一个初步认识,但是真正运用到线上真实环境时,还会遇到很多算法和工程上的挑战,绝对不是几十行 Python 代码可以搞定的。

1、上面的示例使用了标准化的数据集,而线上环境的数据是非标准化的,因此涉及到海量数据的收集、清洗和加工,最终构造出模型可使用的数据集。

2、复杂且繁琐的特征工程,都说算法模型的上限由数据和特征决定。对于线上环境,需要从业务角度选择出可用的特征,然后对数据进行清洗、标准化、归一化、离散化,并通过实验效果进一步验证特征的有效性。

3、算法复杂度如何降低?比如上面介绍的Item-CF算法,时间和空间复杂度都是O(N×N),而线上环境的数据都是千万甚至上亿级别的,如果不做算法优化,可能几天都跑不出数据,或者内存中根本放不下如此大的矩阵数据。

4、实时性如何满足?因为用户的兴趣随着他们最新的行为在实时变化的,如果模型只是基于历史数据进行推荐,可能结果不够精准。因此,如何满足实时性要求,以及对于新加入的物品或者用户该如何推荐,都是要解决的问题。

5、算法效果和性能的权衡。从算法角度追求多样性和准确性,从工程角度追求性能,这两者之间必须找到一个平衡点。

6、推荐系统的稳定性和效果追踪。需要有一套完善的数据监控和应用监控体系,同时有 ABTest 平台进行灰度实验,进行效果对比。

 

「 更多干货,更多收获 」

c21ea6bb2a06da4e0ff339422f1777cb.gif

 

【免费下载】2023年2月份热门报告合集

ChatGPT的发展历程、原理、技术架构及未来方向

《ChatGPT:真格基金分享.pdf》

2023年AIGC发展趋势报告:人工智能的下一时代

推荐系统在腾讯游戏中的应用实践.pdf

推荐技术在vivo互联网商业化业务中的实践.pdf

2023年,如何科学制定年度规划?

《底层逻辑》高清配图

推荐技术在vivo互联网商业化业务中的实践.pdf

推荐系统基本问题及系统优化路径.pdf

荣耀推荐算法架构演进实践.pdf

大规模推荐类深度学习系统的设计实践.pdf

某视频APP推荐策略详细拆解(万字长文)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33604.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融合GPT大模型产品,WakeData新一轮产品升级

近期,WakeData惟客数据(以下简称 “ WakeData ” )完成了新一轮的产品能力升级。就 ToB 企服公司如何融合GPT 大模型,WakeData 给出了自己的答案。 在2022年11月的产品发布会上,已传递出WakeData的“三个坚定”&#x…

借助chatGPT强大的源码理解能力,来快速学习elasticsearch 7.11.1整体源码结构(用chatGPT学源码太香了)

ES阅读学习源码的难处 es的源码非常之多。能够查阅的资料非常少。如果是我们一行一行的去扒着源码看,在我看来至少需要2年的时间,并且至少要耗费四分之一的头发。源码读起来很枯燥,特别是在我们一头雾水的时候。很容易产生放弃的念头。很少有…

大语言模型中的涌现现象是不是伪科学?

深度学习在理论上的孱弱一直被诟病,但科学史上存在大量先有应用再有理论的事例,而其中不能解释的重大实验现象往往预示着理论创新的契机。我们首先从现象出发,来看下LLM中最神秘的emergent ability,如图 上图中x、y轴分别表示模型…

自制开源的 Midjourney、Stable Diffusion “咒语”作图工具

本篇文章聊聊如何通过 Docker 和八十行左右的 Python 代码,实现一款类似 Midjourney 官方图片解析功能 Describe 的 Prompt 工具。 让你在玩 Midjourney、Stable Diffusion 这类模型时,不再为生成 Prompt 描述挠头。 写在前面 本文将提供两个版本的工…

【区块链技术社区】区块链微信群

磨链mochain社区-区块链技术讨论交流不定期进行线上的技术交流学习,技术分享。线下技术交流,成员主要在北京、上海、浙江、广东等地。欢迎:区块链技术大咖、区块链爱好者、区块链技术爱好者、想了解区块链技术的小白不欢迎:广告党…

区块链笔记:典型应用:数据资产、交易系统、即时通信、链上游戏、追踪溯源等

数据资产 1 ) 详解 这是区块链的一个比较核心的应用,对于软件系统或者说对于互联网系统来讲,对数据的处理、分析、计算,这些功能是属于比较基本的软件功能对于区块链来讲它的核心的功能是在于创新式的提供了一个原先各种软件都没…

靠谱的区块链应用到底是啥?通证啊!——第二次中关村-CSDN区块链开发技术沙龙【含PPT下载】

针对“通证”话题的多篇分析文章预热,本期沙龙在开始前就被区块链网友广泛关注。此次沙龙的参会者经过层层的严格筛选,才得以与众位大咖面对面沟通。 12月15日下午,中关村区块链产业联盟、CSDN、枫玉科技联合举办的区块链系列沙龙。来自中关村…

云图说丨不同区块链之间如何跨链交互?

本文分享自华为云社区《【云图说】第237期 不同区块链之间如何跨链交互?》,作者: 阅识风云。 可信跨链服务是基于一系列制定的可信区块链标准跨链协议,保证跨链交易全栈可追溯、可扩展性及可靠性等,助力不同区块链可…

知乎高赞 | 区块链是什么? (一)

首先不要把区块链想的过于高深,他是一个分布在全球各地、能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器…

XuperChain 百度区块链简易学习帖

百度XuperChain基于Ubuntu系统从零开始到部署简单合约 环境配置go语言安装git安装客户端安装 启动私链基本操作命令1. 创建普通用户2. 创建合约账号3. 查询余额4. 转账5. 查询交易信息6. 查询block信息 网络部署(选择性阅读)1. 创建网络部署环境2. 配置种…

建议收藏,轻松搞懂区块链

未来已来,只是不均衡地分布在当下 大家好,我是菜农,欢迎来到我的频道。 本文共 5844字,预计阅读 30 分钟 区块链是近些年来最热门的前沿技术,被认为是未来十几年对金融、物联网、医疗等诸多领域产生最大影响的"…

都说区块链可信,到底信了个啥?

‍‍ 题图摄于北京二环路 【前言】不时有朋友向我询问某某区块链项目怎么样。我通常只给他们讲一点:要考察项目中区块链的信任体系。不管项目方说得怎样天马行空,看懂其中的信任机制,就基本可判断其项目的价值。 最近热门词汇层出不穷&#x…

如果你还不懂区块链那就out了(二)--区块链的演化及应用场景

前面我们介绍了很多区块链的知识,可能大家会有以下几个疑问: 1、区块链用于溯源,如果供应链上的参与方自己造假,在中途将实物替换掉,区块链宣称的不可更改不就无效了吗? 答:造假会有相应的惩罚措…

总搞不懂区块链各共识机制的优缺点?来听听这位十多年经验技术老兵的吐血分享吧!

2018区块链技术及应用峰会 (BTA)中国 倒计时5天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有&#xf…

区块、链和共识

区块、链和共识 💡 区块链的基础数据结构 准备 Hash Hash也称散列、哈希。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出(更多解释见知乎) 特点是:相同的输入一定得到相同的输出,不同的输…

都2021年了,还不知道什么是区块链就out了 | 从区块链数据结构到应用

序言 在现阶段及后10年都是发展主流的数字化经济的催动下,区块链技术越来越火爆。那么比特币的区块数据结构是如何构成的,区块链有什么特性,我们用区块链能用来做什么?我们一起来探讨下。 区块链诞生背景 2008年11月1日&#xff0…

基于区块链的内容社交平台,他们凭什么说比知乎更吸引人?

本堂茜 渡鸦区块链专栏记者 张杰拥有10多年的软件开发经验和创业经验,自称是“互联网老兵,区块链新秀”。随着互联网的发展,渐渐的他们不再满足于做线下的软件外包项目,更想在互联网方面做。 他们在互联网方面做了很多SAAS服务。例…

在清华讲区块链,高晓松竟这样解读共识与Token

本文仅代表作者观点 作者 | 李画 编辑 | 秦晋 高晓松2019年的第一期《晓说》,在母校清华大学做了以一场没有"诗和远方"全是苟且的演讲:《5G与区块链:文创产业的重要赛道》。他认为,5G与区块链是文创/内容产业在未来最重…

朋友聚会上,当你被cue聊聊区块链时.....

来源 | 白话区块链 责编 | 晋兆雨 头图 | 付费下载于视觉中国 转眼间,又到了一年一度的同学聚会。这次班长牵头,把班上绝多数同学都叫了过来,甚至还请了班主任王老师到场,摆了好几大桌。 一时间觥筹交错,各个都喝得满…

家用2kw风力电机满负荷的发电量有多少

家用风力发电机2kw的一天的满负荷发电量是48度电,3级风发电5级风满负荷发电,电机是永磁发电机,足功率发电,纯铜线圈缠绕,叶片是增强玻璃钢材质的