随着互联网的飞速发展,信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容,却很难找到真正符合自己兴趣和需求的信息。这时,推荐系统应运而生,它能够根据用户的兴趣和行为,智能地推荐相关内容,大大提高了用户获取信息的效率。
一、什么是推荐系统?
推荐系统是一种信息过滤系统,它通过分析用户的行为和兴趣,自动地为用户推荐相关内容。这些内容可以包括新闻、音乐、电影、商品等各类信息。推荐系统的目的是帮助用户快速找到他们感兴趣的内容,提高用户体验。
本质:推荐系统本质是要解决用户,物品(信息)和场景的连接问题。
二、推荐系统的应用场景
电商推荐:电商网站通过推荐系统,为用户推荐他们可能感兴趣的商品,提高转化率和购买率。
新闻推荐:新闻客户端通过分析用户的阅读习惯和兴趣,为用户推荐相关的新闻和资讯。
音乐推荐:音乐平台根据用户的听歌历史和偏好,为用户推荐相似的歌曲和歌手。
个性化推荐:个性化推荐涵盖了众多领域,包括个性化邮件、个性化广告等,都是通过分析用户的行为和兴趣,为其推送个性化的内容。
三、推荐系统的框架
框架模块
- 协议调度:请求的发送和结果的回传。在请求中,用户会发送自己的ID,地理位置等信息。结果回传中会返回推荐系统给用户推荐的结果。
- 推荐算法:算法按照一定的逻辑为用户产生最终的推荐结果,不同的推荐算法基于不同的逻辑与数据运算过程。
- 消息队列:数据的上报与处理。根据用户的ID,拉取例如用户的性别、之前的点击、收藏等用户信息。而用户在APP中产生的新行为,例如新的点击会储存在存储单元里面。
- 存储单元:不同的数据类型和用途会储存在不同的存储单元中,例如内容标签与内容的索引存储在mysql里,实时性数据存储在redis里,需要进行数据统计的大量离线数据存储在hivesql里。
核心组件
- 用户画像:用户画像是对用户特征的全面描述,包括用户的兴趣、行为、偏好等。推荐系统通过分析用户画像,了解用户的喜好和需求,从而为其推荐合适的内容。
- 物品特征:物品特征是对推荐物品的描述,包括物品的属性、类别、关键词等。这些特征可以帮助推荐系统更好地理解物品的内容和特点。
- 推荐算法:推荐算法是推荐系统的核心,它通过特定的算法模型对用户画像和物品特征进行匹配,从而为用户推荐合适的物品。常见的推荐算法有基于内容的推荐、协同过滤推荐和混合推荐等。
四、推荐系统链路
推荐系统的结构化流程可以概括为以下几个步骤:
-
召回(Recall)
- 目标:从庞大的物品数据库中快速筛选出一部分候选物品。
- 方法:系统调用多条召回通道,每条通道根据特定策略(如内容标签、用户历史行为等)选取一定数量的物品。
- 输出:从上亿个物品中召回几千个候选物品。
-
粗排(Coarse Ranking)
- 目标:从召回的物品中进一步筛选出用户可能感兴趣的物品。
- 方法:使用较小规模的机器学习模型对召回的物品进行打分。
- 输出:根据模型打分,筛选出分数最高的几百个物品。
-
精排(Fine Ranking)
- 目标:精准评估用户对剩余候选物品的兴趣度。
- 方法:应用大规模的深度神经网络模型,对粗排后的物品进行细致打分。
- 输出:得到反映用户兴趣的精排分数。
-
重排(Re-ranking)
- 目标:优化最终展示给用户的物品列表,考虑多样性和商业因素。
- 方法:结合精排分数和多样性分数进行随机抽样,调整物品顺序。
- 输出:生成最终展示给用户的几十个物品列表,包括打散相似内容和插入广告及运营内容。
-
展示(Presentation)
- 目标:将最终确定的物品列表以合适的方式展示给用户。
- 方法:根据用户界面设计和用户体验原则,展示物品列表。
- 输出:用户界面上的物品展示。
推荐系统通过这一系列步骤,旨在为用户提供个性化且高质量的内容推荐,同时满足平台和物品提供商的需求。
五、常用推荐算法
1)基于用户的协同过滤算法:(核心思想是计算用户-用户的相似度)
找到和目标用户兴趣相似的用户集合( 计算用户之间的余弦相似度:交集/并集);
找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
计算用户之间有正反馈物品的相似度(比如A喜欢了的文章和B喜欢了的文章有多少是重合的)
2)基于物品的协同过滤算法:(核心思想是基于物品-物品相似度的推荐)
计算物品之间的相似度;(通过计算喜欢物品 i 的用户中有多少也喜欢物品 j,来计算两个物品的相似度)
根据物品的相似度和用户的历史行为给用户生成推荐列表(热门物品和其他物品之间的相似度处理,需要对热门物品进行权重的特殊处理)。
3)基于内容的推荐:核心思想是打标签
需要分别生成内容画像和用户画像,再基于用户画像和内容之间的相似度来给用户推荐不同的内容。
六、如何构建一个简单的推荐系统?
第一步 数据收集
数据收集:收集用户数据是构建推荐系统的第一步。你需要收集用户的行为数据、兴趣爱好等信息,以便后续分析。
了解你的产品属性和用户需求是最重要的一步。普遍认为用户和资源量大的产品更需要个性化推荐,如淘宝、抖音、新浪新闻等这些信息分发型产品,而微信、WPS这类工具型产品却鲜少需要做推荐。我们将产品属性分为用户属性和资源属性:
-
用户属性
首先我们需要了解产品的用户组成和他们需要什么,比如用户只想用你的软件编辑文档,那你为他推荐再多视频也没用。 -
资源属性
资源属性是指平台的资源组成,就是你的产品服务都有什么,可以是虚拟产品(文章、短视频、课程等),也可以是实体产品(手机、音响等)。
而当这两者组合起来,当不同的用户需要不同的资源时,这时候我们就需要推荐系统了。
如果你能理解这部分,你也大致能明白为什么大多数工具型产品不需要推荐了。工具型产品为了确保服务深度,大多提供的功能需求都是收敛且聚焦的,多数用户用相同的服务,所以也不存在什么个性化推荐了。
你以为产品属性分析只是让你了解推荐吗?No,其实产品属性分析有着更大的价值,因为它决定了推荐策略的具体目标。比如你是视频网站,那目标也许是提升用户观看时长。那后面的整个算法策略中,都要围绕着观看时长去进行拆分和优化。如果是电商平台,那就要围绕下单量优化推荐策略了,不同的产品属性其应用的推荐策略实际上千差万别。
第二步 特征工程
特征提取:从收集的数据中提取有用的特征,这些特征将用于描述用户和物品的特征。
我们需要了解用户更具体的需求,也需要了解平台都有哪些资源。这样才有可能实现用户和资源的匹配,这个过程我们称之为打标签,实际工作中也称为“特征工程”。
标签类型多种多样,从概念上我们主要分为“用户标签”和“资源标签”两种。
- 用户标签
一般用户标签包含基本属性、活跃属性和兴趣标签三种:
- 基本属性:常指“性别”、“年龄”、“常驻地”、“手机设备型号”、“职业层次”等用户自然属性,是用户未使用产品时便客观拥有的基本属性。
- 活跃属性:指用户在使用产品时留下的行为数据,根据计算方式,又分为统计类和规则类两种。统计类是指可以直接进行统计计算的数据,如用户活跃天数、累计付费金额、活动参与数等;而规则类标签则指某些相对复杂的标签,需要先针对制定规则模型,再进行计算的数据。比如用户活跃等级(高、中、低),用户参与意愿等都需要提前明确计算规则。用户的活跃数据也常被用来评估用户粘性和周期价值。
- 兴趣标签:属于挖掘类标签,一般依赖于资源标签。指用户在浏览具体的内容资源时,将资源本身的标签贴给用户,用户使用行为越多,兴趣标签就越多越精准。并且根据不同行为各标签的分值也不同(比如搜索作为用户主动提出需求,其所占分值会较高),抖音越看越想看就是同理。其根据应用场景又分为短期标签(在线计算,一般为2天内标签)和长期标签(离线计算,指历史累计标签)。
- 资源标签
指产品内各类资源的标签,分“类别”和“关键词”两种维度。
- 类别标签:以某种指定规则将资源归类,一般根据资源的复杂度分为2~5级不等,也有平台分级更多。下图是某瓣的类别标签。
- 关键词标签:在类别的基础上更细一层,指具体的标签词。比如用户对政治人物感兴趣时,我们发现其主要体现在“特朗普”这个人名上,那关于特朗普的一些商业信息也可以做适当推荐。
通过特征工程我们会为每个用户和资源都打上大量的标签,然后再引入推荐策略。这两类资源标签一般是通过人工标注和机器学习两种方式来添加。但机器学习需要大量的标注量才能达到一定准确度,所以在产品初期会更依赖于人工标注和词库拓展。到一定数据规模后,再训练机器学习。最后通过持续的机器学习+人工修正,整个特征工程就能达到一定的识别准确度。
第三步 推荐策略
- 模型训练:选择适合的推荐算法,并使用提取的特征进行模型训练。常见的推荐算法包括协同过滤、基于内容的推荐等。
- 评估与优化:对训练好的模型进行评估,分析其性能和效果。根据评估结果对模型进行优化,提高推荐的准确性和效果。
当我们将用户标签和资源标签采集到后,接下来就是推荐策略的部分,推荐策略一般分为召回和排序两大模块。
推荐系统组成
用户访问产品时,我们优先从资源库中召回符合用户标签的资源,这里通常是千/万的数据量级,然后根据这些资源的标签匹配度、时间等进行排序展示,成熟的产品还会涉及到精排和重排,根据用户对每条资源的使用行为,实时改变后续资源的排序。实际工作中会由工程师将召回和排序封装成一个推荐引擎,然后内部各项环节都有相应的算法人员跟进优化,也就是所谓的模型调参。
召回/排序具体策略
召回和排序是推荐算法中两个相当庞大的工程,涉及方法众多,这里仅和大家简单分享下其中主要的策略组成。
1)召回
资源库中的资源千千万,但最终给用户展示的只有几十甚至十几条,如果直接对所有物料计算排序不仅成本极高且响应较差。所以我们需要对物料进行初筛,针对性召回用户可能感兴趣的一批候选集。传统的标准召回结构一般是多路召回,主要分为“个性化召回”和“非个性化召回”两大类,个性化召回指针对用户特征进行召回,主要有“兴趣标签召回”、“协同过滤召回”等;非个性化主要指“热门召回”、“冷启动召回”这类统一特征的召回。
实际应用中会根据不同场景,选择上述一种或多种召回策略进行。比如搜索场景下的召回排序,你在淘宝搜索某件商品后,再次访问列表时便会发现该类商品排在首位。而召回的多样性是很重要的,有时候多一路召回策略产生的效果也许会是惊人的,而召回质量也很大程度上决定着推荐系统的上下限。
图为“协同过滤召回”的示意图:
2)排序
一般当候选集达到“千”这个数量级,我们就开始需要排序策略了,一般通过粗排和精排将候选集缩减在“百”级并进行打分,按分值top排序,再根据用户的实时反馈进行重排序,将数据量缩至“十”这个级别进行排序展示。
排序的目标是根据业务目标来不断变化的,最早期由于业务目标简单,需要聚焦的时候,往往会选取⼀个指标来重点优化排序。但随着多路召回策略的增多,到中期就会发现单⼀指标对整体的提升已经非常有限了。这时候我们就需要引入多目标排序来解决这些问题,比如结合时间、兴趣、热点、位置等众多维度的数据进行综合排序,这里应需要注意不同的用户场景其排序侧重点不同,所以需要不同的排序策略来提高精度。比如兴趣流中更注重兴趣标签,热点信息流中更重视互动数据等。
常用的排序算法框架有pointwise、pairwise、listwise三类,下图中x1,x2,… 代表的是训练样本1,2,… 的特征,y1,y2,s1,… 等是训练集的label(目标函数值)。感兴趣的同学可以自行深入了解下,这里不多赘述。
第四步 模型调整与优化
- 部署与监控:将训练好的模型部署到生产环境中,并持续监控模型的性能表现,以便及时调整和优化。
多数产品首次上推荐时便需要面对较复杂的策略规则,但因缺少实际数据依托,往往是算法人员凭个人经验和竞品来作参考给出初始模型(比如某feed中初始策略设置热点权重4,时间权重2、兴趣权重2等),所以导致效果也参差不齐。一般需要灰度上线后,拿到实际的用户反馈数据(比如ctr、完播率、下单率等),才能针对模型持续进行调优和完善。
模型的数据验证主要分为两步:
- 离线评估:在离线准备好的新数据集和之前模型数据做对比,比如准确率、覆盖率、多样性等多方面,如该模型的综合指标优于线上模型,则可以进入线上实验,这里一般由产品经理把关。
- 线上实验:当评估模型效果较优后,我们需要在线上进行A/B分桶实验。一般实验周期在2周左右,对比实验组和对照组,如实验数据为正向,则推到更多用户量继续监测。如在某个阶段为反向,则返回优化模型策略,反复实验直到逐步推向全量用户。
算法推荐不像其他功能型需求,它也没有绝对完成的那天。如头条和抖音的算法体系已如此健全,其每年还是花费大量成本来招聘算法岗。因为随着社会发展,用户习惯和兴趣爱好时刻产生着不同程度的变化。所以让推荐系统保持敏捷,长期持续的监测和策略优化才是整个推荐系统中的常态。
验证指标通常包括以下五个:
- 准确率:表示给用户推荐的物品(信息)中,有多少是用户真正感兴趣的。
- 召回率:表示的是用户感兴趣的物品(信息)中,有多少个是系统推荐的。
- 覆盖率:推荐系统能够推荐出来的物品,占总物品集合的比例。
- 多样性:表示被推荐的物品,两两之间的差异性。
- 实时性:能够实时更新推荐列表,来满足用户行为的变化,能够将新加入系统的物品推荐给用户。
七、面临的挑战
- 需求识别:并非所有产品都需要推荐系统,只有当用户无法浏览所有选项时,推荐才显得必要。
- 资源投入:推荐系统是一个系统工程,需要大量资源和领导的支持。
- 技术挑战:
- 推荐精准度:需要高质量算法和大量用户数据。
- 冷启动问题:新用户或新物品缺乏行为数据。
- 高并发处理:应对大量用户访问,提供稳定快速的服务。
- 数据缺失和非结构化信息:处理不完整或非结构化数据。
- 垃圾数据和恶意攻击:保证数据质量。
- 大规模计算与存储:采用分布式技术处理大数据。
- 实时推荐:收集用户反馈,提供个性化服务。
- 用户体验:良好的UI和交互体验对推荐系统至关重要。
- 评估价值:衡量推荐系统对业务的贡献和价值。
八、存在的价值
推荐系统的价值主要体现在:
- 用户:节省时间,提升体验,发现感兴趣的内容。
- 平台:增加用户粘性,通过销售和广告获利。
- 物品提供商:提升销量,赚取收益。
- 社会资源:减少库存积压,有效利用资源。
九、学习课程
- 推荐系统公开课:https://space.bilibili.com/1369507485/channel/collectiondetail?sid=615109
- 推荐系统学习笔记:《小红书的推荐系统》
- 从0到1详解推荐系统的基础知识与整体框架