【探花交友DAY 12 完结】推荐系统

文章介绍了推荐系统的基本概念,强调了其在解决信息过载问题中的作用。协同过滤是推荐系统的核心算法,分为基于用户和基于物品两种。此外,文章还讨论了好友推荐的策略,并详细描述了一个大数据推荐系统的工作流程,涉及MySQL、MongoDB、Redis和RabbitMQ等技术的应用。

1. 推荐系统

1.1 推荐系统的简介

为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统。

其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录以及百度,360搜索等。

不过分类目录和搜索引擎只能解决用户主动查找信息的需求,即用户知道自己想要什么,并不能解决用户没用明确需求很随便的问题。

通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。这就是推荐系统。

最早出现推荐系统的应该是电商平台,比如淘宝,京东等。后来逐步发展到抖音,小红书等社交平台。

image-20230103215436292

1.2 推荐系统等业务流程

image-20230103215527184

推荐系统广泛存在于各类网站中,作为一个应用为用户提供个性化的推荐。它需要一些用户的历史数据,一般由三个部分组成:基础数据、推荐算法系统、前台展示。

  • 基础数据包括很多维度,包括用户的访问、浏览、下单、收藏,用户的历史订单信息,评价信息等很多信息;这一部分主要用前端获取到然后记录到日志系统中。
  • 推荐算法系统主要是根据不同的推荐诉求由多个算法组成的推荐模型;
  • 前台展示主要是对客户端系统进行响应,返回相关的推荐信息以供展示。

1.3 协同过滤推荐算法

迄今为止,在个性化推荐系统中,协同过滤技术是应用最成功的技术。目前国内外有许多大型网站应用这项技术为用户更加智能(个性化、千人千面)的推荐内容。

核心思想:

协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目彔作为推荐给你。

1.3.1 基于用户推荐的UserCF

基于用户的协同过滤算法先计算的是用户与用户的相似度(兴趣相投,物以类聚人以群分),然后将相似度比较接近的用户A购买的物品推荐给用户B,专业的说法是该算法用最近邻居(nearest-neighbor)算法找出一个用户的邻居集合,该集合的用户和该用户有相似的喜好,算法根据邻居的偏好对该用户进行预测。

image-20230103215944436

如上图所示:用户C喜欢物品A,C和D。用户A喜欢商品A和C。那么用户A和用户C就是一个邻居,拥有相同的喜好,那么推荐系统就会将物品D推荐给用户A。

总的来说基于用户的推荐方式就是以用户为中心,根据不同用户的喜好将用户进行划分,从而实现推荐。

在实际应用中,会根据用户的不同行为定义一个用户对某个事物的感兴趣程度。常见的有如下:

image-20230103220723189

1.3.2 基于商品的推荐ItemCF

基于ItemCF的原理和基于UserCF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。

从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。

image-20230103220502352

如上图所示:对于物品A,喜欢物品A的用户同样也会喜欢物品C,那么推断出物品A和物品C应该比较类似。那么当用户C喜欢了商品A以后,那么推荐系统因为商品A和商品C相似,因此会把商品C推荐给用户A。

1.4 好友推荐

社交网络中,好友推荐已经是不可或缺的功能。

  • 通过用户的个人资料推荐与其具有相似兴趣爱好的其他用户

  • 根据‘社交链’进行推荐

对于好友推荐,也有一些常用的评分标准来衡量两个人之间的相似度

字段 权重分
年龄差 0-2岁 30分 3-5 20分 5-10岁 10分 10岁以上 0分
性别 异性 30分 同性 0分
位置 同城 20分 不同 0分
学历 相同 20分 不同 0分

2. 用户推荐

大数据推荐系统由专业人员实现,并已经通过docker的方式部署到虚拟机中。具体的工作流程如下

  • 大数据系统访问MySQL的用户表,然后进行运算计算推荐的分数
  • 计算后的结果写入MongoDB中
  • 我们的探花系统直接从MongoDB中获取推荐结果即可。

image-20230103221743895

3. 动态推荐

3.1 业务逻辑分析

动态推荐的具体流程如下:

  • 用户的业务操作,发送日志消息到RabbitMQ

  • 数据采集系统获取消息,将数据存入MongoDB

  • 推荐系统(Spark)拉取数据,进行推荐计算并存入Redis,同时保存推荐信息到MongoDB中

  • 探花系统从Redis获取推荐数据结果

image-20230103222014458

3.2 动态计算分数规则

  • 浏览 +1
  • 点赞 +5
  • 喜欢 +8
  • 评论 + 10
  • 发布动态
    • 文字长度:50以内1分,50~100之间2分,100以上3分
    • 图片个数:每个图片一分

核心推荐逻辑:

  • 推荐模型:用户 | 动态 | 评分
  • 其中,评分是用户对动态操作的得分合计
  • 为什么自己发布动态还要计分? 是因为,自己发布就相当于自己对此动态也感兴趣,这样就可以在相似的人之间进行推荐了。

3.3 发送用户行为消息

在之前的系统中,我们已经通过自定义注解配合AOP实现了用户行为的发送。

image-20230103222209632

3.4 消息的处理

接收消息的工作需要新创建tanhua-recommend工程,在此工程中完成相关的操作。

引入相关依赖

<dependencies>
    <dependency>
        <groupId>com.itheima</groupId>
        <artifactId>tanhua-model</artifactId>
        <version>1.0-SNAPSHOT
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值