搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源)
专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源)
前人栽树后人乘凉,本专栏提供资料:
- 推荐系统算法库,包含推荐系统经典及最新算法讲解,以及涉及后续业务落地方案和码源
- 本专栏会持续更新业务落地方案以及码源。同时我也会整理总结出有价值的资料省去你大把时间,快速获取有价值信息进行科研or业务落地。帮助你快速完成任务落地,以及科研baseline
相关文章推荐:
推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展
推荐系统[二]:召回算法超详细讲解[召回模型演化过程、召回模型主流常见算法(DeepMF/TDM/Airbnb Embedding/Item2vec等)、召回路径简介、多路召回融合]
推荐系统[三]:粗排算法常用模型汇总(集合选择和精准预估),技术发展历史(向量內积,Wide&Deep等模型)以及前沿技术
推荐系统[四]:精排-详解排序算法LTR (Learning to Rank): poitwise, pairwise, listwise相关评价指标,超详细知识指南。
推荐系统[五]:重排算法详解相关概念、整体框架、常用模型;涉及用户体验[打散、多样性],算法效率[多任务融合、上下文感知]等
推荐系统[六]:混排算法简介、研究现状混排技术以及MDP-DOTA信息流第三代混排调控框架,高质量项目实战。
推荐系统[七]:推荐系统通用技术架构(Netfilx等)、API服务接口
推荐系统[八]:推荐系统常遇到问题和解决方案[物品冷启动问题、多目标平衡问题、数据实时性问题等]
实战案例:
推荐系统[八]算法实践总结V0:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】
推荐系统[八]算法实践总结V1:腾讯音乐全民K歌推荐系统架构及粗排设计
推荐系统[八]算法实践总结V2:排序学习框架(特征提取标签获取方式)以及京东推荐算法精排技术实战
推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术
推荐系统[八]算法实践总结V4:混排算法在淘宝信息流第四代混排调控框架实战,提升推荐实时性捕捉实时兴趣。
更多更新请查看专栏内容
1. 推荐算法的初步理解
如果说互联网的目标就是连接一切,那么推荐系统的作用就是建立更加有效率的连接,推荐系统可以更有效率的连接用户与内容和服务,节约了大量的时间和成本。
1.1 推荐系统主要解决问题
- 任务一:挖掘长尾:帮助用户找到想要的物品(音乐、商品、新闻),挖掘长尾效应中的非流行市场。
我们在网上冲浪时,常常被大量的物品信息所淹没。从海量信息中找到自己想要的信息,实属不易(如面对淘宝各种各样的打折活动不知所措)。在经济学上,有一个经典的名词叫“长尾效应”,该效应的内容是:从人们需求的角度上看,大多数的需求会集中在某一小部分,而这部分我们可以称之为流行,而分布在剩余部分的需求是个性化的、零散的和小量的需求。这就意味着,有大量资源是鲜有人问津的,这不仅造成了资源利用上的浪费,也会使口味偏小众的用户被流行的内容所淹没。
- 任务二:降低信息过载
进入互联网时代后,信息量已处于爆炸的状态。如果把所有内容都展示出来,用户肯定无法全部接收,这必然会造成信息过载,信息的利用率将十分低下。因此就需要推荐系统来帮我们把低价值的信息给筛选掉。
- 任务三:提高站点的点击率、转化率
好的推荐系统总是能给用户推荐出想要的内容,让用户更频繁地访问站点,增强用户黏度。
- 任务四:加深对用户的了解,为用户提供个性化的定制服务
当系统成功推荐了一个用户感兴趣的内容后,我们对该用户的兴趣爱好就越清晰。当我们精准地描绘出每个用户的形象后(精准的用户画像),就可以为他们定制出一系列个性化的定制服务,让拥有各种各样需求的用户都能在我们平台上得到满足。
如果把推荐系统简单拆开来看,推荐系统主要是由数据、算法、架构三个方面组成。
- 数据提供了信息。数据储存了信息,包括用户与内容的属性,用户的行为偏好例如对新闻的点击、玩过的英雄、购买的物品等等。这些数据特征非常关键,甚至可以说它们决定了一个算法的上限。
- 算法提供了逻辑。数据通过不断的积累,存储了巨量的信息。在巨大的数据量与数据维度下,人已经无法通过人工策略进行分析干预,因此需要基于一套复杂的信息处理逻辑,基于逻辑返回推荐的内容或服务。
- 架构解放了双手。架构保证整个推荐自动化、实时性的运行。架构包含了接收用户请求,收集、处理,存储用户数据,推荐算法计算,返回推荐结果等。有了架构之后算法不再依赖于手动计算,可以进行实时化、自动化的运行。例如在淘宝推荐中,对于数据实时性的处理,就保证了用户在点击一个物品后,后续返回的推荐结果就可以立刻根据该点击而改变。一个推荐系统的实时性要求越高、访问量越大那么这个推荐系统的架构就会越复杂。
1.2推荐系统的整体框架
推荐的框架主要有以下几个模块
- 协议调度:请求的发送和结果的回传。在请求中,用户会发送自己的 ID,地理位置等信息。结果回传中会返回推荐系统给用户推荐的结果。
- 推荐算法:算法按照一定的逻辑为用户产生最终的推荐结果。不同的推荐算法基于不同的逻辑与数据运算过程。
- 消息队列:数据的上报与处理。根据用户的 ID,拉取例如用户的性别、之前的点击、收藏等用户信息。而用户在 APP 中产生的新行为,例如新的点击会储存在存储单元里面。
- 存储单元:不同的数据类型和用途会储存在不同的存储单元中,例如内容标签与内容的索引存储在 mysql 里,实时性数据存储在 redis 里,需要进行数据统计的数据存储在 TDW 里。
2.推荐系统
2.1 推荐算法流程介绍
推荐算法其实本质上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,它依赖的逻辑就是当一个内容被大多数用户喜欢,那大概率其他用户也会喜欢。但是基于粗放的推荐往往会不够精确,想要挖掘用户个性化的,小众化的兴趣,需要制定复杂的规则运算逻辑,并由机器完成。
推荐算法主要分为以下几步:
- 召回:当用户以及内容量比较大的时候,往往先通过召回策略,将百万量级的内容先缩小到百量级。
- 过滤:对于内容不可重复消费的领域,例如实时性比较强的新闻等,在用户已经曝光和点击后不会再推送到用户面前。
- 精排:对于召回并过滤后的内容进行排序,将百量级的内容并按照顺序推送。
- 混排:为避免内容越推越窄,将精排后的推荐结果进行一定修改,例如控制某一类型的频次。
- 强规则:根据业务规则进行修改,例如在活动时将某些文章置顶。
例如在抖音与快手的分发中:抖音强平台基于内容质量分发,快手轻平台基于社交和兴趣分发,抖音:内容质量>关系>双向互动。快手:内容质量 约等于 关系 > 双向互动。抖音基于将内容从小流量开始,其中表现优质的内容将不断的进入更大的流量池中,最终进入推荐池,形成 90 天+精品召回池,最终的结果也是优质内容的热度随着时间推移逐渐累积增加,头部内容的集中度很高。
来源:方正证券《抖音 vs 快手深度复盘与前瞻-短视频 130 页分析框架》
2.1.1 召回策略
- 召回的目的:当用户与内容的量级比较大,例如对百万量级的用户与内容计算概率,就会产生百万*百万量级的计算量。但同时,大量内容中真正的精品只是少数,对所有内容进行一次计算将非常的低效,会浪费大量的资源和时间。因此采用召回策略,例如热销召回,召回一段时间内最热门的 100 个内容,只需进行一次计算动作,就可以对所有用户应用。
- 召回的重要性:虽然精排模型一直是优化的重点,但召回模型也非常的重要,因为如果召回的内容不对,怎么精排都是错误的。
- 召回方法:召回的策略不应该是简单的策略堆砌,而应该是方法的相互补充。
- 热销召回:将一段时间内的热门内容召回。
- 协同召回:基于用户与用户行为的相似性推荐,可以很好的突破一定的限制,发现用户潜在的兴趣偏好。
- 标签召回:根据每个用户的行为,构建标签,并根据标签召回内容。
- 时间召回:将一段时间内最新的内容召回,在新闻视频等有时效性的领域常用。是常见的几种召回方法。
2.1.2 精排策略
精排模型的不同类别
精排模型的基本原理
2.2 常见推荐算法介绍
参考:Learning and Reasoning on Graph for Recommendation
http://staff.ustc.edu.cn/~hexn/slides/cikm19-tutorial-graph-rec.pdf
推荐算法大致可以分为以下几种类型:
-
基于流行度的算法
-
协同过滤算法(collaborative filtering)
-
基于内容的算法
-
基于模型的算法
-
混合算法
-
基于流行度的算法
2.2.1 基于流行度的算法
基于流行度的算法非常简单粗暴,直接根据内容的PV(Page View,访问量)和UV(Unique Visitor,独立访客)等数据来进行热度排序来推荐给用户。常见场景有热歌榜、微博热门话题、知乎热榜等等。
这种类型的算法特点是简单,适用于刚注册不久的用户(冷启动)。但是其缺点也很明显,无法针对特定的用户进行个性化的推荐,也就意味着一百个读者只能读出同一个哈姆雷特。当然,也可以进一步对基于流行度的算法进行改进,使推荐内容拥有一定程度的个性化,例如加入用户分群特性,只把热榜上的体育新闻推荐给体育迷,只把热榜上的娱乐新闻推荐给喜欢看八卦新闻的用户。
2.2.2 协同过滤算法
协同过滤算法(Collaborative Filtering)是一种十分常用的算法,在很多购物平台中都会用到。协同过滤算法有两种类型,分别是基于用户(User)和基于物品(Item)的协同过滤算法。
a.基于用户的协同过滤算法
-
步骤一:获得每个用户对各个物品的评价或喜爱程度(可通过浏览、收藏和购买等记录来计算)。
-
步骤二:依据用户对物品的评价计算出所有用户之间的相似度。(也就是利用用户对所有物品的评价来形容用户)
-
步骤三:选出与当前用户最相似的K个用户。
-
步骤四:将这K个用户评价最高并且当前用户又没有浏览过的N个物品推荐给当前用户。
b.基于物品的协同过滤算法
-
步骤一:与基于用户的算法一样,获得获得每个用户对各个物品的评价或喜爱程度。
-
步骤二:依据用户对物品的评价计算出所有物品之间的相似度。(也就是用所有用户对物品的评价来形容物品)
-
步骤三:对于当前用户评价高的物品,找出与之相似度最高的N个物品。
-
步骤四:把这相似度最高的N个物品推荐给当前用户。
一个简单的基于用户的协同过滤算法例子。首先我们根据用户对物品的评价构建出一个用户和物品的关联矩阵,如下:
图中的行是不同的用户,列是不同的物品,单元格(x,y)的值则是x用户对y物品的评价(或喜爱程度)。我们可以把某一行视为某一个用户对所有物品偏好的向量,这样把用户向量化后,就可以计算出每两个用户之间的向量距离了,这里我们使用余弦相似度来作为向量距离。
如果我们要为用户1推荐物品,则需要找出与用户1相似度最高的K名用户(设K=2)评价的物品,并且去掉用户1已经评价过的物品,最后按照评价大小进行排序,推荐出N个物品(设N=2)给用户1。
同样地,接下来举一个简单的基于物品的协同过滤算法例子。
基于物品的计算方式大致相同,把用户和物品的关联矩阵中的某一列视为所有用户对该物品的评价,这样把物品向量化后,就可以计算出物品之间的相似度矩阵。
计算出所有物品之间的相似度如下。
最后,如果我们要为用户1推荐物品,则需要先找到用户1评价最高的物品。然后找到与该物品相似度最高且用户1未有评价过的N(设N=2)个物品,将其推荐给用户1。
协同过滤的算法十分直观、可解释性高,而且很多时候推荐的效果都十分好。然而,它也存在一些缺陷:
-
缺陷一:依赖于准确的用户评分。
-
缺陷二:大热的物品会有更大的概率被推荐给用户。
-
缺陷三:存在冷启动问题,因为当一名新用户或者新物品进入系统时,推荐将无从依据。
-
缺陷四:在一些物品生存周期短(如新闻、广告)的系统中,由于更新的速度十分快,大量的物品不会有用户的评价,造成用户和物品的关联矩阵十分稀疏,不利于这些物品的推荐。(因为当某一物品越少用户评价时,在最后的推荐结果中,该物品排名越靠前的概率就越低。)
对于关联矩阵稀疏的问题,有很多方法去改进。如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵,
这里的n为用户数,m为物品数。k则需要预先定义,可以视为用户特征和物品特征之间的一些潜在联系,因而可以填补之前关联矩阵中的缺失值。(这里个人认为实质是进行降维,把维度高、稀疏的数据降维成维度低、稠密的数据。)
2.2.3 基于内容的算法
- 地位:最早被使用的推荐算法,年代久远,但当今仍然被广泛使用,效果良好
- 定义:给用户X推荐和之前喜欢过的物品相似的物品,即U2I2I,U2Tag2I
上面提到的两种算法看起来很好很强大,通过进一步改进也能克服各种缺陷。但是有一个问题是,如果我是《哈利波特》的粉丝,我曾经在商城买过一本《哈利波特与魔法石》。这时商城的书库又上架了一本《哈利波特与死亡圣器》,显然,我应该会很感兴趣。然而上面提到的算法这时候就都不太好使了,因此基于内容的推荐算法就因运而生了。
- 这里举一个简单的例子,现在系统里有一个用户和一条新闻。通过分析用户最近的行为(可以是该用户最近看过什么新闻)和新闻的文本内容,提取出数个关键字,
- 将这些关键字作为属性,也就可以把用户和新闻向量化:
- 接着计算向量距离,得出用户和该新闻的相似度,再根据相似度进行推荐。在向量化的时候,我们也可以进一步地改进。如,在为一名喜欢看英超联赛的足球迷推荐新闻时,如果有某一条新闻里存在体育、足球、英超关键词,显然前两个词都不如英超这个词来得准确。那么我们如何在系统里突显这种“重要性”呢?这时候我们可以不再简单地用0,1或者词频来进行向量化,而是为每个词都赋予权重。这个权重可以从整个新闻语料库中计算出来(如TF-IDF算法),在向量化时引入权重的影响,可以获得更准确的效果。
- 然而,又有一个问题出现了。要是用户的关键词是足球,而新闻的关键词是德甲、英超,那么按照上面方法计算出的相似度为0。显然这不符合常理,在此,我们引入主题聚类:
- 我们可以通过预训练好的Word2Vec对关键词进行表征,然后再聚类出多个主题,最后用主题代替关键词来向量化文本。这样,足球和德甲、英超等关键词就可以通过主题来关联在一起了。
基于内容的推荐算法能够很好地解决冷启动问题,同时也不会受热度的限制,因为它是直接基于内容进行匹配的。然而,它也会存在一些缺陷,如过度专业化(over-specialisation),该缺陷会一直给用户推荐内容相关的物品,而失去了推荐内容的多样性和让用户接触新内容的机会。
c.基于内容的推荐系统demo
基于内容的推荐系统,包含三个步骤:
-
第一:找到一个特征来表达物品,比如说标签、分类、演员、关键词等;
- 电影为例,蜘蛛侠打上动作片、科幻片,钢铁侠标签是动作片、科幻片,功夫打上动作片、周星驰,做成标签向量;
-
第二:用户,先得到之前有过行为的物品列表, 然后根据历史算出用户的标签偏好。
- 标签偏好其实是一个向量,包含很多元素,例如看过钢铁侠、蜘蛛侠、功夫,标签向量[动作片、科幻片、周星驰]
- 计算方法:最简单的计数、加权平均
-
第三:使用余弦相似度算法,计算用户标签向量最相似的TOPN物品列表
用户向量和物品向量的相似度计算:
cos θ = ∑ i = 1 n ( A i × B i ) ∑ i = 1 n ( A i ) 2 × ∑ i = 1 n ( B i ) 2 \cos \theta=\frac{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{A}_{\mathrm{i}} \times \mathrm{B}_{\mathrm{i}}\right)}{\sqrt{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{A}_{\mathrm{i}}\right)^2} \times \sqrt{\sum_{\mathrm{i}=1}^{\mathrm{n}}\left(\mathrm{B}_{\mathrm{i}}\right)^2}} cosθ=∑i=1n(Ai)2×∑i=1n(Bi)2∑i=1n(Ai×Bi)
用户向量:[(动作片,3)、(科幻片,2)、(周星驰,1)]
物品向量:绿巨人[(动作片,1)、(科幻片,1)、(周星驰,0)]
分子:3 × 1 + 2 × 1 + 1 × 0 = 5
分母: 3 2 + 2 2 + 1 2 × 1 2 + 1 2 + 0 2 = 5.29 \sqrt{3^2 + 2^2 + 1^2} \times \sqrt{1^2 + 1^2 + 0^2} = 5.29 32+22+12×12+12+02=5.29
相似度:5 / 5.29 = 0.94
即用户向量和物品向量的相似度值为0.94
优缺点:
- 优点
- 不需要其他用户的数据
- 能给具备独特口味的用户推荐
- 可以推荐最新的、冷门的物品
容易做推荐结果的解释
- 缺点:
- 很难找到能表达物品的‘标签’,有时候需要人工打标签
- 过于局限于自己的世界,无法挖掘用户的潜在兴趣
- 新用户如果没有行为,没法做推荐
2.2.4 精排模型——逻辑回归为例
基于模型的算法有很多,大部分效果都十分优秀,用到的机器学习算法也可以很复杂。接下来介绍一个简单的方法——Logistics回归。我们通过收集系统中用户的行为数据
表中的一行是一次用户行为,x1-xm是用户和物品的各种特征,如用户的年龄段、性别、地域以及物品的价格、类别等等,y即是用户对该物品的行为或评价(可通过浏览、收藏和购买等记录来计算)。通过大量的用户数据,我们可以拟合出一个逻辑回归函数,计算出x1-xm对应的权重值(一般地,权重值越大越表明该特征对用户选择物品的影响越大)。
原理介绍
- 概念:逻辑回归通过 sigmoid 函数,将线性回归变为可以解决二分类的方法,它可用于估计某种事物发生的可能性。
- 计算公式Y 根据目标设计:例如是否点击(是:1,否:0,最后预测一个 0-1 之间的点击概率);X 根据特征工程设计:这一块就涉及到了前面提到的用户画像与内容画像,所有的画像都是对样本的特征的刻画。特征工程需要根据业务场景选择合适的特征并进行一定的加工;W 由模型训练得到。
构建流程
基于我们的目标,需要进行样本的收集(样本是对客观世界的具体描述),通过对已收集到的样本进行特征构造,并对其进行训练,最终求出模型参数的具体数值。
辑回归为有监督模型,因此需要有已经分类好的样本。正样本:用户曝光过某物品并点击。负样本:用户曝光过某物品并且没有点击。如果正负样本差距过大,可以将负样本随机抽样后与正样本一起训练。或只保留有点击行为的用户作为样本,将曝光但是没有被点击的物品作为负样本。
特征工程
特征工程是对收集到的样本进行更加深度的特征刻画。虽然作为算法人员与用户接触较少,但对身边使用该产品的同学,进行深入的观察与访谈,了解他们对于所推荐内容的反馈,往往可以得到意料之外的特征开发方向。主要分为以下几个维度。
- 基础数据
- 趋势数据
- 时间数据
- 交叉数据
基于模型的算法由于其有快速、准确的特点,因此适用于实时性比较高的业务,如新闻、广告等。如果想要这种算法获得更好的效果,即需要更多人工进行的特征工程(Feature Engineering)(现在可使用深度学习来减少人工的特征工程)。而且,由于业务的时效性,系统也需要反复更新线上的模型,以适应各种变化。
不同交叉方法得到的不同的参数数量
2.2.5 融合算法
实际上,现实世界的推荐系统往往都不会只用某一种算法来构建。一些比较大型的系统甚至会融合数十种算法。我们可以通过加权、变换、层叠等多种方法来综合不同算法的推荐结果,或者是在不同的计算环节(如召回,排序等)中运用不同的算法来混合,达到更贴合实际业务的需要。
2.3 算法衡量指标以及获得推荐效果
2.3.1 算法衡量指标
- 硬指标:对于大多数的平台而言,推荐系统最重要的作用是提升一些“硬指标”。例如新闻推荐中的点击率,但是如果单纯以点击率提升为目标,最后容易成为一些低俗内容,“标题党”的天下。
- 软指标:除了“硬指标”,推荐系统还需要很多“软指标”以及“反向指标”来衡量除了点击等之外的价值。好的推荐系统能够扩展用户的视野,发现那些他们感兴趣,但是不会主动获取的内容。同时推荐系统还可以帮助平台挖掘被埋没的优质长尾内容,介绍给感兴趣的用户。
当推荐系统构建好后,我们就需要去评估该系统的表现到底好不好。CTR(点击率)、CVR(转化率)、停留时间等都是很直观和常用的评估标准。此外,还可以通过线下计算算法的误差,或者线上进行ABTest来对比效果。
2.3.2 推荐效果评估
- 离线实验: 通过反复在数据样本进行实验来获得算法的效果。通常这种方法比较简单、明确。但是由于数据是离线的,基于过去的历史数据,不能够真实的反应线上效果。同时需要通过时间窗口的滚动来保证模型的客观性和普适性。
- 用户反馈: 当在离线实验阶段得到了一个比较不错的预测结果之后,就需要将推荐的结果拿到更加真实的环境中进行测评,如果这个时候将算法直接上线,会面临较高的风险。因为推荐结果的好坏不能仅仅从离线的数字指标衡量,更要关注用户体验,所以可以通过小范围的反复白板测试,获得自己和周围的人对于推荐结果的直观反馈,进行优化。
- 在线测试(AB test): 实践是检验真理的唯一标准,在推荐系统的优化过程中,在线测试是最贴近现实、最重要的反馈方式。通过 AB 测试的方式,可以衡量算法与其他方法、算法与算法之间的效果差异。但是要注意的是,AB 测序需要一定的观察期以及科学的实验流程,才能证明得到的结论是真实可信的。
*
3.用户画像(提高推荐算法效果的大杀器)
标签是我们对多维事物的降维理解,抽象出事物更具有代表性的特点。 我们永远无法完全的了解一个人,所以我们只能够通过一个一个标签的来刻画他,所有的标签最终会构建为一个立体的画像,一个详尽的用户画像可以帮助我们更加好的理解用户
用户画像是最近比较火的概念,引入它可以为推荐系统带来很多改进的空间,如:
- 打通公司各大业务平台,通过获取用户在其他平台中的数据,彻底解决冷启动问题。
- 在不同设备上同步用户数据,如QQ号、设备号、手机号等。
- 拥有更丰富的用户属性,如年龄、职业、地域等信息。
- 更完善的用户兴趣状态,方便生成用户标签以及进行推荐。
3.1 原始数据
原始数据一共包含四个方面
- 用户数据: 例如用户的性别、年龄、渠道、注册时间、手机机型等。
- 内容数据: 例如游戏的品类,对游戏描述、评论的爬虫之后得到的关键词、标签等。
- 用户与内容的交互: 基于用户的行为,了解了什么样的用户喜欢什么样的游戏品类、关键词、标签等。
- 外部数据: 单一的产品只能描述用户的某一类喜好,例如游戏的喜好、视频的喜好,外部数据标签可以让用户更加的立体。
3.2 事实标签
事实标签可以分为静态画像和动态画像。
- 静态画像: 用户独立于产品场景之外的属性,例如用户的自然属性,这类信息比较稳定,具有统计性意义。
- 动态画像: 用户在场景中所产生的显示行为或隐式行为。
- 显示行为:用户明确的表达了自己的喜好,例如点赞、分享、关注、评分等。(评论的处理更加复杂,需要通过 NLP 的方式来判断用户的感情是正向、负向、中性)。
- 隐式行为:用户没有明确表达自己的喜好,但“口嫌体正直”,用户会用实际行动,例如点击、停留时长等隐性的行为表达自己的喜好。
隐式行为的权重往往不会有显示行为大,但是在实际业务中,用户的显示行为都是比较稀疏的,所以需要依赖大量的隐式行为。
3.3 模型标签
模型标签是由事实标签通过加权计算或是聚类分析所得。通过一层加工处理后,标签所包含的信息量得到提升,在推荐过程中效果更好。
- 聚类分析: 例如按照用户的活跃度进行聚类,将用户分为高活跃-中活跃-低活跃三类。
- 加权计算: 根据用户的行为将用户的标签加权计算,得到每一个标签的分数,用于之后推荐算法的计算。
3.4 内容画像
内容画像: 例如对于文章中的新闻资讯类推荐,需要利用 NLP 的技术对文章的标题,正文等等提取关键词、找到对应的标签等。视频除了对于分类、标题关键词的抓取外,还依赖于图片处理的技术。因此在推荐前需要对推荐的商品或内容进行一系列的处理过程。
环境变量: 对于推荐系统来说,环境画像也非常的重要。例如在短视频的推荐场景中,用户在看到一条视频所处的时间、地点以及当时所浏览的前后内容、当天已浏览时间等是非常重要的变量。
推荐内容与场景通常可以分为以下几类:
4.结巴分词用于内容相似推荐
计算物品最相似的其他物品,直接用于I2I相似推荐,或者U2I2I推荐
以文章为例,进行内容相似推荐,一般需要以下几个步骤:
4.1 内容获取
一般包含ID、标题、介绍、详情等,存储于MySQL数据库中。批量查取这些内容,进行下一步
4.2 中文分词:提取关键词
- 中文没有空格进行分词,所以需要手动分词,使用TFIDF技术,jieba分词
- 结巴分词,中文分词组件,三种模式:全模式、精确模式、搜索引擎模式。一般用精确模式。
- 有一些词是不需要的,比如我、一些等等。结巴分词提供了关键词提取技术
- 基于TF-IDF算法的关键词提取
import jieba.analysis
jieba.analysis.extract_tags(sentence,topK=20,withWeight=True,allowPOS=())
jieba.analysis.TFIDF(idf_path=None) 新建TFIDF实例,idf_path为IDF频率文件
sentence:待分词的句子
topK=20:返回20个权重最大的关键词
withWeight=True:是否一并返回关键词的权重,默认为False,一般选择True
allowPOS=():仅包含指定词性的词,默认为空,即不筛选
- 通过这种方式,过滤掉没有意义的词,并获取关键词的权重。得到结果之后,有两个分支,一个是Doc2Vec,一个是Word2vec,
4.3 Doc2Vec:平均、加权平均
- 得到关键词和权重之后,计算文章的数字向量,两种方法:平均、加权平均
- 平均:[1,0,0,1,0]
- 加权平均:[0.8, 0.6, 0, 0.3, 0.5]
- 这样就把文章的多个关键词和权重变成一个向量,这是多个词的组合得到的一个结果
- 有缺点:只能实现精确匹配。原来的文章中有“推荐系统”关键词,那目标文章中也有“推荐系统”才能被匹配到
4.3 Word2vec:语意扩展
- 可以发现语意的关系,比如推荐系统的文章中经常出现大数据,那么推荐系统文章下面的推荐也会有大数据的文章
- 实现:
- 自己训练一个Word2vec,比如Spark Word2vec,
- Spark官网——Programming Guides ——MLlib(Machine Learning)进入spark的机器学习库,点击Extracting,transforming and selecting features进入提取、转换和选择特征,找到Word2vec,看例子
- 问题:数据量小的话,训练结果不是很好,不能发现相关语意的词
- 自己训练一个Word2vec,比如Spark Word2vec,
- 使用开源的,比如腾讯的Word2vec
- 腾讯AI实验室,根据百度百科、维基百科得到的
- 数据有两列,一列是词,一列是向量,下载可以直接用
- 可以得到字面不等、语意相关的词,用于推荐系统有很好的泛化性
4.4 TopN相似近邻搜索
得到每篇文章的向量之后,进行相似近邻搜索,输入一篇文章,计算相似得到TopN。方法有两种:scipy余弦相似度、LSH局部敏感哈希
- scipy余弦相似度,直接算出相似度,
scipy.spatial.distance.cosine(u,v)
u,v都是一维数字数组,
scipy库是C实现的,效果比python实现效果好。
有问题:需要自己实现每篇文章和其他文章的相似度,再排序找出TopN
- LSH局部敏感哈希
- spark官网——Programming Guides ——MLlib(Machine Learning)进入spark的机器学习库,点击Extracting,transforming and selecting features进入提取、转换和选择特征,找到Locality Sensitive Hashing局部敏感哈希
- 局部敏感哈希,一种重要的哈希算法,一般用于聚类、相似近邻搜索,
- 把一万篇文章,分到多个分桶,再分桶中计算相似
4.5 redis缓存
把相似近邻搜索的TopN文章,存储在redis中,key是文章ID,value是TopN文章ID的list
4.6Flask/Java Web服务
根据redis中存储的文章ID列表,查询文章并返回文章列表,实现内容相似推荐
参考链接:
什么是推荐系统?
5.业界广告推荐技术最新进展与趋势-阿里、腾讯、字节、微软
5.1 阿里推荐技术进展
阿里全年广告收入为3000亿量级,是中国互联网广告收入的第一。因为收入基线很高,其推荐技术的每一个改进,都可以带来很大的绝对业务收益。阿里的推荐技术进展代表了国内甚至国际电商场景推荐技术的业界前沿进展。
我们这次选择了4个跟阿里相关的推荐技术。包括:
-
+超长兴趣实时检索推荐(SIM CIKM 2020)
-
+多场景融合推荐(STAR CIKM 2021)
-
+特征共现关系建模推荐(CAN WSDM 2022)
-
+通用预训练推荐模型(UniSRec KDD 2022)
前三个是已经工业落地的推荐技术,最后一个是阿里与人大科研合作的推荐技术。我们下面来一一介绍这些最新的技术进展。
5.2 腾讯推荐技术进展
腾讯全年广告收入为1000亿量级,是中国互联网广告收入的第三。腾讯广告收入主力为以朋友圈为代表的社交场景,腾讯广告的推荐技术进展代表了国内的社交场景推荐技术的业界前沿进展。
我们这次选择了4个跟腾讯相关的推荐技术。包括:
-
+用户兴趣推荐大模型 (2022)
-
+多场景推荐大模型 (2022)
-
+推荐链路一致建模 (2022)
-
+层级意向嵌入网络推荐(HIEN SIGIR 2022)
前三个是已经工业落地的推荐技术,最后一个是科研合作的推荐技术。我们下面来一一介绍这些最新的技术进展。
5.3 字节推荐技术进展
字节全年广告收入为2000亿量级,是中国互联网广告收入的第二。字节广告收入主力为以抖音、头条为代表信息流场景,字节广告的推荐技术进展代表了国内的信息流场景推荐技术的业界前沿进展。
字节公开能够获取的技术类资料不多,我们这次选择了2个跟字节相关的推荐技术,包括:
-
大规模推荐系统磐石(2021)
-
深度开放智能推荐平台(2022)
大规模推荐系统磐石(2021)
这个工作的业务背景是,业界的推荐模型一直朝着大规模、实时化、精细化的趋势不断演进。模型训练样本达到可以达到百亿甚至数万亿,单个模型达到 TB 甚至 10TB 以上;特征、模型实时更新;特征工程、模型结构、优化方法等多方面各种创新思路层出不穷。但是,大规模推荐系统的落地,工程挑战很大。市面上已有的开源方案,包括Tensorflow、PyTorch、XDL、Angel等都不能很好支撑实时精细推荐大模型的研发和上线。
深度开放智能推荐平台(2022)
工业界推荐系统涉及的功能模块非常多和复杂。推荐系统离线部分需要对数据进行预处理、特征工程、模型训练;在线部分包括召回、粗排、精排等多个推荐环节;同时还要支持大量的AB实验来验证推荐效果。以前搭建一套推荐系统要配置多个平台和系统才能完成。系统搭建的门槛很高,而且不利于快速迭代更新推荐技术。
为了降低推荐系统搭建的门槛,提高技术迭代效率,字节推出了深度开放的智能推荐平台。这个平台能帮助企业实现从数据接入到推荐结果输出,这一完整的端到端推荐服务的搭建;在特征工程/模型开发模块,平台既能通过简单的配置提供入门级的功能,同时也提供了低代码的开发能力,让工程师可以结合自己的经验深度参与到效果的优化中;与此同时,模型支持实时训练,能够更快将用户的行为和偏好体现在推荐结果中。
5.4 微软推荐技术进展
这里要介绍的微软工作是2022年发表于SIGIR的多模态新闻推荐,Multimodal News Recommendation,简称为MM-Rec。
现在推荐内容的越来越丰富,内容从单一文本内容逐步扩展到包含更多图像、声音和视频。用户点击新闻不再单纯因为对于标题感兴趣,还可能是因为被新闻图片所吸引。以往的推荐相关性建模中往往是建模单个模态的相关性,比如文字和文字的相关性,图片和图片的相关性,跨越模态的相关性没有被充分利用。举例来说,下图中候选新闻的图像与用户第二次点击新闻标题文字中的球队名"Cowboys"存在的相关性就是跨模态的相关性。
5.5 总结
从以上工作我们能够看到2022年的业界推荐技术呈现出:多场景、多模态、大模型、全链路、平台化、知识化、预训练的7大技术发展趋势。具体来说:
-
多场景是从单个场景独立建模过渡到多个场景联合建模。阿里的多场景融合推荐(STAR CIKM 2021)和腾讯的多场景推荐大模型 (2022)都是代表多场景趋势的推荐技术。
-
多模态是从单个模态独立建模过渡到多个模态混合建模。微软的多模态新闻推荐(MM-Rec SIGIR 2022)是多模态趋势的代表推荐技术。
-
大模型是从【复杂离线特征工程】+【简单在线推荐模型】的小模型系统范式过渡到【简单离线特征工程】+【复杂在线推荐模型】的大模型推荐范式。阿里的超长兴趣实时检索推荐(SIM CIKM 2020)、多场景融合推荐(STAR CIKM 2021),腾讯的用户兴趣推荐大模型 (2022)、多场景推荐大模型 (2022)等都是代表大模型趋势的推荐技术。
-
全链路是从召回、粗排、精排各个推荐环节独立优化过渡到全链路所有推荐环节整体优化。腾讯的推荐链路一致建模 (2022)是全链路趋势的代表推荐技术。
-
平台化是从原来繁多独立的推荐工程组件过渡到端到端高效整体一站式推荐平台。字节的大规模推荐系统磐石(2021)、深度开放智能推荐平台(2022)是平台化趋势的代表推荐技术。
-
知识化是从单纯依赖用户行为建模过渡到同时引入特征、场景、样本本身的属性和关系的背景知识。阿里的特征共现关系建模推荐(CAN WSDM 2022),腾讯的层级意向嵌入网络推荐(HIEN SIGIR 2022)是知识化趋势的代表性推荐技术。
-
预训练是从单独依赖ID类非语义特征过渡到更多基于原始文本、图片等语义特征,构建通用可迁移推荐模型。阿里的通用预训练推荐模型(UniSRec KDD 2022)是预训练趋势的代表性推荐技术。
参考链接:2022业界广告推荐技术最新进展