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

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</version></dependency><!--RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.3</version></dependency>
</dependencies>

配置文件

spring:rabbitmq:host: 192.168.136.160port: 5672username: guestpassword: guestdata:mongodb:uri: mongodb://192.168.136.160:27017/tanhua

启动类

package com.tanhua.recommend;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RecommendApplication {public static void main(String[] args) {SpringApplication.run(RecommendApplication.class,args);}
}

实体类

//大数据动态评分实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document("recomment_movement_score")
public class MovementScore {private ObjectId id;private Long userId;// 用户idprivate Long movementId; //动态id,需要转化为Long类型private Double score; //得分private Long date; //时间戳
}

监听器

@Component
public class RecommendMovementListener {@Resourceprivate MongoTemplate mongoTemplate;@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "tanhua.movement.queue",durable = "true"),exchange = @Exchange(Constants.LOG_EXCHANGE_NAME),key = "log.movement"))public void recommend(String msg) {try {// 解析数据Map<String, String> map = JSON.parseObject(msg, Map.class);String userId = map.get("userId");String type = map.get("type");String logTime = map.get("logTime");String movementId = map.get("busId");// 根据动态id查询到动态对象Movement movement = this.mongoTemplate.findById(movementId, Movement.class);if (movement != null) {// 封装MovementScore score = new MovementScore();score.setUserId(Long.parseLong(userId));score.setDate(System.currentTimeMillis());score.setMovementId(movement.getPid());score.setScore(getScore(type, movement));this.mongoTemplate.save(score);}} catch (NumberFormatException e) {throw new RuntimeException(e);}}private static Double getScore(String type, Movement movement) {//0201为发动态  基础5分 50以内1分,50~100之间2分,100以上3分//0202为浏览动态, 1//0203为动态点赞, 5//0204为动态喜欢, 8//0205为评论,     10//0206为动态取消点赞, -5//0207为动态取消喜欢   -8Double score = 0d;switch (type) {case "0201":score = 5d;score += movement.getMedias().size();int length = StrUtil.length(movement.getTextContent());if (length >= 0 && length < 50) {score += 1;} else if (length < 100) {score += 2;} else {score += 3;}break;case "0202":score = 1d;break;case "0203":score = 5d;break;case "0204":score = 8d;break;case "0205":score = 10d;break;case "0206":score = -5d;break;case "0207":score = -8d;break;default:break;}return score;}
}

注意:大数据系统从MongoDB中读取到我们记录的用户日志和相关评分,最终经过计算后得到推荐的动态,将推荐动态的pid写入redis中。

小视频的推荐流程和动态推荐流程是一样的,这里就不在赘述。

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

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

相关文章

【Kaggle竞赛树叶分类Baseline】上万片树叶分为一百七十六类

【Kaggle竞赛树叶分类1】https://www.kaggle.com/c/classify-leaves 任务是预测叶子图像的类别。该数据集包含 176 个类别、18353 张训练图像、8800 张测试图像。每个类别至少有 50 张图像用于训练。测试集平均分为公共和私人排行榜。本次比赛的评估指标是分类准确度。本章的内…

kaggle竞赛房价预测--排名前4%

目录 1. 数据读取2. 数据处理3. 建模基本模型1&#xff09;LASSO回归&#xff1a;2&#xff09;Elastic Net Regression&#xff08;弹性网回归&#xff09;&#xff1a;3&#xff09;Kernel Ridge Regression&#xff08;核岭回归&#xff09; :4&#xff09;Gradient Boostin…

商务英语口语考试准备

企业类型 state-owned enterprise 国有企业 collective enterprise 集体企业 township enterprise 乡镇企业 privately-owned enterprise 私企 listed/quoted company 上市企业 Sino-foreign joint venture 中外合资企业 group corporation 集团公…

【AIGC】AI欺诈,做好以下几点,无需忧虑

文章目录 前言列举几种AI欺诈的形式以及其识别方法1.AI深度学习生成的假视频、假图片2.AI自动生成的德文或语音3.AI自动注册账号和刷数据4.AI智能防御机制 如何预防&#xff1f;1.提高公众警惕性2.发展AI监测技术3.加强关键领域的人工审核4.完善法律法规5.国际合作与交流6.开源…

AI+保险,打造让投保人“叫绝”的服务方式

近年来,信息技术在保险领域的应用越来越广泛&#xff0c;在稳步推进保险业务的线上化与智能化的同时&#xff0c;也让保险服务覆盖率有了极大的提升。然而,保险业服务在智能化转型方面仍面临着诸多挑战。 咨询热线统一接入&#xff0c;客户来电不遗漏 保险企业客户不仅体量大…

BERT模型和代码解析

1 前言 本期内容&#xff0c;笔者想解析一下自然语言处理&#xff08;NLP&#xff09;中非常有名的基于变换器的双向编码器表示技术&#xff08;即Bidirectional Encoder Representations from Transformers&#xff0c;BERT&#xff09;。 BERT 想当年&#xff08;2019年&…

Spring Cloud 微服务放了一个大招!

大家好&#xff0c;我是R哥。 关注了一段时间公众号的小伙伴都知道&#xff0c;R哥的 Spring Cloud 微服务课程每月初都会给小伙伴搞一波活动&#xff0c;这个月&#xff0c;我决定放一次大招&#xff0c;福利全新升级&#xff01;&#xff01; 本月初七天内报名微服务课程的&a…

chatgpt赋能python:Python取消warning指南:如何避免和处理警告

Python取消warning指南&#xff1a;如何避免和处理警告 如果您已经在使用Python编程&#xff0c;那么您一定会遇到过警告&#xff08;warning&#xff09;这个问题。虽然警告有时可能很有用&#xff0c;但在特定情况下&#xff0c;它们可能会引起程序错误或产生意想不到的行为…

AI绘画——了解AI绘画爆火原因与工具,并生成几个端午绘画小作品

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.AI绘画 1.AI绘画爆火原因 2.AI绘画背后原理 二.AI绘画工具介绍 1.midjour…

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了&#xff0c;它能够根据用户输入的内容&#xff0c;自动生成智能回复。它使用自然语言处理技术&#xff0c;通过学习大量的文本资料&#xff0c;能够模拟人类的对话行为。它是由OpenAI开发的&#xff0c;一家非常伟大的人工…

AI绘画提示词在线工具

AI绘画提示词在线工具 该工具穷举了常用的stable diffusion提示词&#xff0c;中英文对照展示。辅助各位使用提示词&#xff0c;一定程度上减少提示词的思考。

AI 绘画(1):生成一个图片的标准流程

文章目录 文章回顾感谢人员生成一个图片的标准流程前期准备&#xff0c;以文生图为例去C站下载你需要的绘画模型导入参数导入生成结果&#xff1f;可能是BUG事后处理 图生图如何高度贴合原图火柴人转角色 涂鸦局部重绘 Ai绘画公约 文章回顾 AI 绘画&#xff08;0&#xff09;&…

最全的AI绘画提示词网站,抓紧收藏!!!

最全的AI绘画提示词网站&#xff0c;抓紧收藏&#xff01;&#xff01;&#xff01; AI绘画的原理是基于深度学习和神经网络技术&#xff0c;通过训练模型来学习和模仿人类绘画的技巧和风格&#xff0c;从而生成具有艺术性的图像。具体来说&#xff0c;AI绘画的过程包括输入图像…

【AI】1649- 12个火爆AI提示词工具,点燃你的创意灵感

关注 “AI 工具派” 探索最新 AI 工具&#xff0c;发现 AI 带来的无限可能性&#xff01; 大家好&#xff0c;Chris 今天为大家介绍一些热门的 ChatGPT、Midjourney 等 AI 提示词工具的网站&#xff0c;这些工具将为您的文案创作带来更多的创意和灵感。如果您是一个文案撰写者、…

如何使用OpenAI API和Python SDK构建自己的聊天机器人

近日&#xff0c;OpenAI公司的ChatGPT模型走红网络。同时&#xff0c;OpenAI也推出了Chat API和gpt-3.5-turbo模型&#xff0c;让开发者能够更轻松地使用与ChatGPT类似的自然语言处理模型。 通过OpenAI API&#xff0c;我们可以使用gpt-3.5-turbo模型&#xff0c;实现多种任务&…

微信小程序+讯飞语音实现个人语音助手

由于 上传图片过于麻烦&#xff0c;建议 跳转到 github typora-copy-images-to: images 1. 介绍 ​ 本案例主要 实现一个微信小程序语音助手&#xff0c;可以以提供的功能如下&#xff1a; 语音输入返回结果小程序北京的天气雨水将短暂停歇,最高气温回升至28℃。语音播放 返…

华为小艺输入法测试版 1.0.19.103 发布

新增微信 / QQ 回车键发送消息功能开关 华为小艺输入法迎来 1.0.19.103 版本众测&#xff0c;本次更新后&#xff0c;新增微信、QQ 回车键发送消息功能开关&#xff1b;新增商城语录、表情、皮肤等投诉举报入口&#xff1b;新增拼音输入过程中上滑数字不打断输入&#xff1b;联…

「流云行走,代码穿梭:Wails 携手 ChatGPT 打造 MOOC 下载器」

AD 需要gpt账号的v : iseswordgpt起名字 gpt翻译代码 因为为下载器里面有js加密代码&#xff0c;之前就是把网站上面的js加密代码扣下来&#xff0c;用goja运行js代码&#xff0c;但是它不能用于协程&#xff0c;要是想用goja&#xff0c;就要每个协程运行一个goja.Runtime。…

从清奇的角度有效地学习C++基础(只要没更完有空就更)

目录 一个学习工具 面向ChatGPT编程 bool类型&#xff08;布尔类型&#xff09; 内联函数inline C宏定义 内联函数实现 函数重载 给函数重载加点bug 如何规范重载函数&#xff1f; 参数缺省 函数赋值顺序 默认值赋值顺序 给缺省函数加点bug 引用 命名空间namesp…

亚马逊查询关键词排名的工具_亚马逊关键词的概念和查找工具

亚马逊销售中最重要的是“排名”。 而“关键字”对提高排名很重要。 搜索结果对亚马逊的销售产生重大影响。 要想让你的产品被显示在搜索结果的顶部&#xff0c;那你必须选择有效的关键字。 搜索关键词排名一直上不去&#xff0c;你可能会这么想&#xff1a; “关键字不好吧...…