一文读懂推荐系统

随着互联网的飞速发展,信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容,却很难找到真正符合自己兴趣和需求的信息。这时,推荐系统应运而生,它能够根据用户的兴趣和行为,智能地推荐相关内容,大大提高了用户获取信息的效率。

一、什么是推荐系统?

推荐系统是一种信息过滤系统,它通过分析用户的行为和兴趣,自动地为用户推荐相关内容。这些内容可以包括新闻、音乐、电影、商品等各类信息。推荐系统的目的是帮助用户快速找到他们感兴趣的内容,提高用户体验。

本质:推荐系统本质是要解决用户,物品(信息)和场景的连接问题。

二、推荐系统的应用场景

电商推荐:电商网站通过推荐系统,为用户推荐他们可能感兴趣的商品,提高转化率和购买率。
新闻推荐:新闻客户端通过分析用户的阅读习惯和兴趣,为用户推荐相关的新闻和资讯。
音乐推荐:音乐平台根据用户的听歌历史和偏好,为用户推荐相似的歌曲和歌手。
个性化推荐:个性化推荐涵盖了众多领域,包括个性化邮件、个性化广告等,都是通过分析用户的行为和兴趣,为其推送个性化的内容。

三、推荐系统的框架

在这里插入图片描述

框架模块

  • 协议调度:请求的发送和结果的回传。在请求中,用户会发送自己的ID,地理位置等信息。结果回传中会返回推荐系统给用户推荐的结果。
  • 推荐算法:算法按照一定的逻辑为用户产生最终的推荐结果,不同的推荐算法基于不同的逻辑与数据运算过程。
  • 消息队列:数据的上报与处理。根据用户的ID,拉取例如用户的性别、之前的点击、收藏等用户信息。而用户在APP中产生的新行为,例如新的点击会储存在存储单元里面。
  • 存储单元:不同的数据类型和用途会储存在不同的存储单元中,例如内容标签与内容的索引存储在mysql里,实时性数据存储在redis里,需要进行数据统计的大量离线数据存储在hivesql里。

核心组件

  • 用户画像:用户画像是对用户特征的全面描述,包括用户的兴趣、行为、偏好等。推荐系统通过分析用户画像,了解用户的喜好和需求,从而为其推荐合适的内容。
  • 物品特征:物品特征是对推荐物品的描述,包括物品的属性、类别、关键词等。这些特征可以帮助推荐系统更好地理解物品的内容和特点。
  • 推荐算法:推荐算法是推荐系统的核心,它通过特定的算法模型对用户画像和物品特征进行匹配,从而为用户推荐合适的物品。常见的推荐算法有基于内容的推荐、协同过滤推荐和混合推荐等。

四、推荐系统链路

在这里插入图片描述
推荐系统的结构化流程可以概括为以下几个步骤:

  1. 召回(Recall)

    • 目标:从庞大的物品数据库中快速筛选出一部分候选物品。
    • 方法:系统调用多条召回通道,每条通道根据特定策略(如内容标签、用户历史行为等)选取一定数量的物品。
    • 输出:从上亿个物品中召回几千个候选物品。
  2. 粗排(Coarse Ranking)

    • 目标:从召回的物品中进一步筛选出用户可能感兴趣的物品。
    • 方法:使用较小规模的机器学习模型对召回的物品进行打分。
    • 输出:根据模型打分,筛选出分数最高的几百个物品。
  3. 精排(Fine Ranking)

    • 目标:精准评估用户对剩余候选物品的兴趣度。
    • 方法:应用大规模的深度神经网络模型,对粗排后的物品进行细致打分。
    • 输出:得到反映用户兴趣的精排分数。
  4. 重排(Re-ranking)

    • 目标:优化最终展示给用户的物品列表,考虑多样性和商业因素。
    • 方法:结合精排分数和多样性分数进行随机抽样,调整物品顺序。
    • 输出:生成最终展示给用户的几十个物品列表,包括打散相似内容和插入广告及运营内容。
  5. 展示(Presentation)

    • 目标:将最终确定的物品列表以合适的方式展示给用户。
    • 方法:根据用户界面设计和用户体验原则,展示物品列表。
    • 输出:用户界面上的物品展示。

推荐系统通过这一系列步骤,旨在为用户提供个性化且高质量的内容推荐,同时满足平台和物品提供商的需求。

五、常用推荐算法

1)基于用户的协同过滤算法:(核心思想是计算用户-用户的相似度)

找到和目标用户兴趣相似的用户集合( 计算用户之间的余弦相似度:交集/并集);
找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
计算用户之间有正反馈物品的相似度(比如A喜欢了的文章和B喜欢了的文章有多少是重合的)

2)基于物品的协同过滤算法:(核心思想是基于物品-物品相似度的推荐)

计算物品之间的相似度;(通过计算喜欢物品 i 的用户中有多少也喜欢物品 j,来计算两个物品的相似度)
根据物品的相似度和用户的历史行为给用户生成推荐列表(热门物品和其他物品之间的相似度处理,需要对热门物品进行权重的特殊处理)。

3)基于内容的推荐:核心思想是打标签

需要分别生成内容画像和用户画像,再基于用户画像和内容之间的相似度来给用户推荐不同的内容。

六、如何构建一个简单的推荐系统?

第一步 数据收集

数据收集:收集用户数据是构建推荐系统的第一步。你需要收集用户的行为数据、兴趣爱好等信息,以便后续分析。

了解你的产品属性和用户需求是最重要的一步。普遍认为用户和资源量大的产品更需要个性化推荐,如淘宝、抖音、新浪新闻等这些信息分发型产品,而微信、WPS这类工具型产品却鲜少需要做推荐。我们将产品属性分为用户属性和资源属性:

  1. 用户属性
    首先我们需要了解产品的用户组成和他们需要什么,比如用户只想用你的软件编辑文档,那你为他推荐再多视频也没用。

  2. 资源属性
    资源属性是指平台的资源组成,就是你的产品服务都有什么,可以是虚拟产品(文章、短视频、课程等),也可以是实体产品(手机、音响等)。

而当这两者组合起来,当不同的用户需要不同的资源时,这时候我们就需要推荐系统了。
在这里插入图片描述
如果你能理解这部分,你也大致能明白为什么大多数工具型产品不需要推荐了。工具型产品为了确保服务深度,大多提供的功能需求都是收敛且聚焦的,多数用户用相同的服务,所以也不存在什么个性化推荐了。

你以为产品属性分析只是让你了解推荐吗?No,其实产品属性分析有着更大的价值,因为它决定了推荐策略的具体目标。比如你是视频网站,那目标也许是提升用户观看时长。那后面的整个算法策略中,都要围绕着观看时长去进行拆分和优化。如果是电商平台,那就要围绕下单量优化推荐策略了,不同的产品属性其应用的推荐策略实际上千差万别。

第二步 特征工程

特征提取:从收集的数据中提取有用的特征,这些特征将用于描述用户和物品的特征。

我们需要了解用户更具体的需求,也需要了解平台都有哪些资源。这样才有可能实现用户和资源的匹配,这个过程我们称之为打标签,实际工作中也称为“特征工程”。
标签类型多种多样,从概念上我们主要分为“用户标签”和“资源标签”两种。

  1. 用户标签
    一般用户标签包含基本属性、活跃属性和兴趣标签三种:
    在这里插入图片描述
  • 基本属性:常指“性别”、“年龄”、“常驻地”、“手机设备型号”、“职业层次”等用户自然属性,是用户未使用产品时便客观拥有的基本属性。
  • 活跃属性:指用户在使用产品时留下的行为数据,根据计算方式,又分为统计类和规则类两种。统计类是指可以直接进行统计计算的数据,如用户活跃天数、累计付费金额、活动参与数等;而规则类标签则指某些相对复杂的标签,需要先针对制定规则模型,再进行计算的数据。比如用户活跃等级(高、中、低),用户参与意愿等都需要提前明确计算规则。用户的活跃数据也常被用来评估用户粘性和周期价值。
  • 兴趣标签:属于挖掘类标签,一般依赖于资源标签。指用户在浏览具体的内容资源时,将资源本身的标签贴给用户,用户使用行为越多,兴趣标签就越多越精准。并且根据不同行为各标签的分值也不同(比如搜索作为用户主动提出需求,其所占分值会较高),抖音越看越想看就是同理。其根据应用场景又分为短期标签(在线计算,一般为2天内标签)和长期标签(离线计算,指历史累计标签)。
  1. 资源标签
    指产品内各类资源的标签,分“类别”和“关键词”两种维度。
  • 类别标签:以某种指定规则将资源归类,一般根据资源的复杂度分为2~5级不等,也有平台分级更多。下图是某瓣的类别标签。
    在这里插入图片描述
  • 关键词标签:在类别的基础上更细一层,指具体的标签词。比如用户对政治人物感兴趣时,我们发现其主要体现在“特朗普”这个人名上,那关于特朗普的一些商业信息也可以做适当推荐。

通过特征工程我们会为每个用户和资源都打上大量的标签,然后再引入推荐策略。这两类资源标签一般是通过人工标注和机器学习两种方式来添加。但机器学习需要大量的标注量才能达到一定准确度,所以在产品初期会更依赖于人工标注和词库拓展。到一定数据规模后,再训练机器学习。最后通过持续的机器学习+人工修正,整个特征工程就能达到一定的识别准确度。

第三步 推荐策略

  • 模型训练:选择适合的推荐算法,并使用提取的特征进行模型训练。常见的推荐算法包括协同过滤、基于内容的推荐等。
  • 评估与优化:对训练好的模型进行评估,分析其性能和效果。根据评估结果对模型进行优化,提高推荐的准确性和效果。

当我们将用户标签和资源标签采集到后,接下来就是推荐策略的部分,推荐策略一般分为召回和排序两大模块。

推荐系统组成

用户访问产品时,我们优先从资源库中召回符合用户标签的资源,这里通常是千/万的数据量级,然后根据这些资源的标签匹配度、时间等进行排序展示,成熟的产品还会涉及到精排和重排,根据用户对每条资源的使用行为,实时改变后续资源的排序。实际工作中会由工程师将召回和排序封装成一个推荐引擎,然后内部各项环节都有相应的算法人员跟进优化,也就是所谓的模型调参。

在这里插入图片描述

召回/排序具体策略
召回和排序是推荐算法中两个相当庞大的工程,涉及方法众多,这里仅和大家简单分享下其中主要的策略组成。

1)召回

资源库中的资源千千万,但最终给用户展示的只有几十甚至十几条,如果直接对所有物料计算排序不仅成本极高且响应较差。所以我们需要对物料进行初筛,针对性召回用户可能感兴趣的一批候选集。传统的标准召回结构一般是多路召回,主要分为“个性化召回”和“非个性化召回”两大类,个性化召回指针对用户特征进行召回,主要有“兴趣标签召回”、“协同过滤召回”等;非个性化主要指“热门召回”、“冷启动召回”这类统一特征的召回。

实际应用中会根据不同场景,选择上述一种或多种召回策略进行。比如搜索场景下的召回排序,你在淘宝搜索某件商品后,再次访问列表时便会发现该类商品排在首位。而召回的多样性是很重要的,有时候多一路召回策略产生的效果也许会是惊人的,而召回质量也很大程度上决定着推荐系统的上下限。
在这里插入图片描述
图为“协同过滤召回”的示意图:

2)排序

一般当候选集达到“千”这个数量级,我们就开始需要排序策略了,一般通过粗排和精排将候选集缩减在“百”级并进行打分,按分值top排序,再根据用户的实时反馈进行重排序,将数据量缩至“十”这个级别进行排序展示。

排序的目标是根据业务目标来不断变化的,最早期由于业务目标简单,需要聚焦的时候,往往会选取⼀个指标来重点优化排序。但随着多路召回策略的增多,到中期就会发现单⼀指标对整体的提升已经非常有限了。这时候我们就需要引入多目标排序来解决这些问题,比如结合时间、兴趣、热点、位置等众多维度的数据进行综合排序,这里应需要注意不同的用户场景其排序侧重点不同,所以需要不同的排序策略来提高精度。比如兴趣流中更注重兴趣标签,热点信息流中更重视互动数据等。
在这里插入图片描述

常用的排序算法框架有pointwise、pairwise、listwise三类,下图中x1,x2,… 代表的是训练样本1,2,… 的特征,y1,y2,s1,… 等是训练集的label(目标函数值)。感兴趣的同学可以自行深入了解下,这里不多赘述。

第四步 模型调整与优化

  • 部署与监控:将训练好的模型部署到生产环境中,并持续监控模型的性能表现,以便及时调整和优化。

多数产品首次上推荐时便需要面对较复杂的策略规则,但因缺少实际数据依托,往往是算法人员凭个人经验和竞品来作参考给出初始模型(比如某feed中初始策略设置热点权重4,时间权重2、兴趣权重2等),所以导致效果也参差不齐。一般需要灰度上线后,拿到实际的用户反馈数据(比如ctr、完播率、下单率等),才能针对模型持续进行调优和完善。

模型的数据验证主要分为两步:

  1. 离线评估:在离线准备好的新数据集和之前模型数据做对比,比如准确率、覆盖率、多样性等多方面,如该模型的综合指标优于线上模型,则可以进入线上实验,这里一般由产品经理把关。
  2. 线上实验:当评估模型效果较优后,我们需要在线上进行A/B分桶实验。一般实验周期在2周左右,对比实验组和对照组,如实验数据为正向,则推到更多用户量继续监测。如在某个阶段为反向,则返回优化模型策略,反复实验直到逐步推向全量用户。
    算法推荐不像其他功能型需求,它也没有绝对完成的那天。如头条和抖音的算法体系已如此健全,其每年还是花费大量成本来招聘算法岗。因为随着社会发展,用户习惯和兴趣爱好时刻产生着不同程度的变化。所以让推荐系统保持敏捷,长期持续的监测和策略优化才是整个推荐系统中的常态。

验证指标通常包括以下五个:

  • 准确率:表示给用户推荐的物品(信息)中,有多少是用户真正感兴趣的。
  • 召回率:表示的是用户感兴趣的物品(信息)中,有多少个是系统推荐的。
  • 覆盖率:推荐系统能够推荐出来的物品,占总物品集合的比例。
  • 多样性:表示被推荐的物品,两两之间的差异性。
  • 实时性:能够实时更新推荐列表,来满足用户行为的变化,能够将新加入系统的物品推荐给用户。

七、面临的挑战

  • 需求识别:并非所有产品都需要推荐系统,只有当用户无法浏览所有选项时,推荐才显得必要。
  • 资源投入:推荐系统是一个系统工程,需要大量资源和领导的支持。
  • 技术挑战:
    • 推荐精准度:需要高质量算法和大量用户数据。
    • 冷启动问题:新用户或新物品缺乏行为数据。
    • 高并发处理:应对大量用户访问,提供稳定快速的服务。
    • 数据缺失和非结构化信息:处理不完整或非结构化数据。
    • 垃圾数据和恶意攻击:保证数据质量。
    • 大规模计算与存储:采用分布式技术处理大数据。
    • 实时推荐:收集用户反馈,提供个性化服务。
  • 用户体验:良好的UI和交互体验对推荐系统至关重要。
  • 评估价值:衡量推荐系统对业务的贡献和价值。

八、存在的价值

推荐系统的价值主要体现在:

  1. 用户:节省时间,提升体验,发现感兴趣的内容。
  2. 平台:增加用户粘性,通过销售和广告获利。
  3. 物品提供商:提升销量,赚取收益。
  4. 社会资源:减少库存积压,有效利用资源。

九、学习课程

  • 推荐系统公开课:https://space.bilibili.com/1369507485/channel/collectiondetail?sid=615109
  • 推荐系统学习笔记:《小红书的推荐系统》
  • 从0到1详解推荐系统的基础知识与整体框架

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候,Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件,分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办?Mac上怎么解压分卷压缩的文件?本文将向你介绍如何使用BetterZ…

近视防控明星:蔡司小乐圆中期临床数据详解

近视防控明星:蔡司小乐圆中期临床数据详解 小乐圆镜片作为近视防控镜片里的明星产品,从22年5月上市以来防控效果就一直备受大家的关注。而最近中期临床试验的结果,给家长孩子吃了一颗定心丸。 本次实验中,240位受试者被随机分成三…

C语言函数详解(上)【库函数】

目录 前言 一、函数的概念 二、库函数 1.标准库和头文件 2.库函数使用方式 3.如何通过以上的网站查看库函数信息 (以sqrt为例) 3.1 功能 3.2 头文件包含 3.3 库函数文档的⼀般格式 1. 函数原型 ​编辑2. 函数功能介绍 ​编辑3. 参数和返…

基于vue3的模拟数据mock.js应用

一、mock.js介绍 Mock.js 是一个用于生成随机数据,拦截 Ajax 请求的 JavaScript 库。它主要用于前后端分离开发时,模拟后端数据接口,使得前端开发者在不需要后端实际编写接口的情况下,也能进行开发、测试。 1、主要功能 生成随…

别只知道Xmind了,这4款思维导图工具也都很实用!

作为一款十分知名的思维导图工具,Xmind确实是一款很好用的脑图工具。不仅操作流畅,功能丰富,还有很多素材可以使用。但是没有云同步功能,免费的功能也有限。如果大家想知道更多好用的思维导图工具的话,也可以看看这4个…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS(Cascading Style Sheets)层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

「数组」希尔排序 / 区间增量优化(C++)

目录 概述 思路 核心概念:增量d 算法过程 流程 Code 优化方案 区间增量优化 Code(pro) 复杂度 概述 我们在「数组」冒泡排序|选择排序|插入排序 / 及优化方案(C)中讲解了插入排序。 它有这么两个特点: ①待排序元素较…

路由偏好详解

路由偏好对网络性能和数据传输效率有着重要影响。本文将从路由偏好的相关概念、影响因素和实际应用,同时结合IP数据云的功能展示其在优化路由选择中的作用。 路由偏好指网络设备在选择路由路径时所倾向的特定策略或条件。它基于多种因素进行决策,例如网络…

CSS继承、盒子模型、float浮动、定位、diaplay

一、CSS继承 1.文字相关的样式会被子元素继承。 2.布局样式相关的不会被子元素继承。(用inherit可以强行继承) 实现效果: 二、盒子模型 每个标签都有一个盒子模型,有内容区、内边距、边框、外边距。 从内到外:cont…

矩阵中的最大得分(Lc3148)——动态规划

给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为 c1 的单元格移动到值为 c2 的单元格的得分为 c2 - c1 。 你可以从 任一 单元格开始,并且必须…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法(约定) 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT? ChatGPT是由 OpenAI 开发的先进人工智能语言模型,能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议,甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本,它们都拥有强大的语言处理能力&…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

算法日记day 44(动归之编辑距离|回文字串|最长回文子序列)

一、编辑距离 题目: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "…

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件,继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能,主要用于在加载内容时显示进度。它的一些主要特点如下: 自动隐藏和显示:ContentLoadingProgressBar 会在…

初级python代码编程学习----简单的图形化闹钟小程序

我们来创建一个简单的图形化闹钟程序通常需要使用图形用户界面(GUI)库。以下是使用Python的Tkinter库创建一个基本闹钟程序的步骤: 环境准备 确保已安装Python。安装Tkinter库(Python 3.8及以上版本自带Tkinter,无需…

软件测试学习笔记丨Allure2报告添加附件报告定制

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31810 一、Allure2报告中添加附件-图片 1.1 附件类型 TEXT ("text/plain", "txt") CSV ("text/csv", "csv") TSV ("text/tab-separated-v…

leetcode:2119. 反转两次的数字(python3解法)

难度:简单 反转 一个整数意味着倒置它的所有位。 例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。 给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reverse…

GEC6818开发板的学习

1、开发板的简介 首先连接 开发板与电脑,需电脑安装串口驱动:例CH340 2、开发板的特性: 像素:800*480Pix分辨率:高,宽两个维度的像素点数目开发板色深为32位一个像素点占4个字节:分别为灰度保留位、RGB三原色各占一位3、为什么要内存映射 虽然LCD设备本质上也可以看作…