推荐系统技术

 

推荐系统技术

整体流程

推荐系统整个过程分为几个阶段,在这里把他分为四个阶段:用户画像、match(召回)、rank(排序)、adapter(后处理)。其中match和rank是两个关键任务,也是推荐方面优化的主要方向。

  1. 【用户画像】 这部分主要是为了对用户建模,根据用户的历史行为挖掘用户的偏好数据(偏好目的地、Item、Poi、类目、类型等等),挖掘用户的属性信息,为后面几个阶段服务(通过用户的偏好信息去召回推荐的商品列表,在adapter阶段作一些后处理等);
  2. 【match】 这部分主要是为了召回用户可能感兴趣的推荐列表,因为在实际应用场景中,商品的数量往往很多(例如新闻、音乐、电影、商品等,亿级别的数量),直接用一个模型对所有商品打分往往不太现实。可以认为match部分是一个粗排序的阶段,我们希望在这个阶段从广大的商品池子中召回出用户可能感兴趣的所有商品,因此需要从多个不同的角度去召回(根据用户偏好的目的地召回对应目的地下的热门Item、根据偏好的类目召回对应类目下的热门Item、根据用户偏好的Item召回相似的Item等等)。
  3. 【rank】 这部分是在match过后对召回的商品进行一个精确的排序,通过机器学习模型对商品打分,返回分数靠前的n个商品作为最终的推荐列表。
  4. 【adapter】 这部分就是对推荐列表进行预处理了,例如曝光过滤(控制商品的曝光次数,避免商品持续曝光导致用户的疲劳度)、打散(为了增加推荐的丰富性,对推荐结果进行类目、目的地的多样性化)、黑名单过滤等等。

Match与rank的关系,一图胜千言:

图片

用户画像

根据用户的历史行为计算偏好,score分为两个部分计算,从商品的角度计算商品的流行度(根据宝贝的成交、收藏、加购、点击设置不同的权重,以时间衰减的方式累加分数),从用户的角度计算用户对商品的偏好score,该阶段主要建立完善的用户画像体系,便于后续的召回、排序等。


match部分

match部分的方法很多,主要有CF(协同过滤)、基于graph embedding的方法(DeepWalk、LINE、NOde2Vec、SDNE)、session_based等。可以分为3大类:I2I(包括CFI2I,EmbedI2I,SwingI2I,SessionI2I,ContentI2I等)、X2I(例如Dest2I,Cat2I,Tag2I,Poi2I等)、hot(用来打底,当其他方式都无召回时,采用hot)。

CF(协同过滤)

分为基于用户的CF和基于Item 的CF,该方法被广为应用

基于User的CF:

U1看过I1,I2,I3,U2看过I1,I2,则认为U1,U2相似,则可以把I3推荐给U2。

基于Item的CF:

I1被U1,U2,U3看过,I2被U1,U2看过,则认为I1,I2相似,则可以把I2推荐给U3。

【CF-I2I实际应用举例】:对每个用户,计算用户权重u_score=1 /pow(log(2, 3 +count(item_id)), 2),根据用户历史行为商品数量计算一个user权重,用户行为Item数越多,权重越低;对每个Item,计算Item的I_score=sum(u_score)。考虑每一个item对(trig_item,rec_item),其中rec_item为与trig_item相似的item,未避免取所有这样的对,可对每一个对的类目进行限制,类目一致与不一致的考量。如何衡量他们的相似度?取出所有同时有过trig_item和rec_item的用户,记这样的用户数为n,将这部分用户的u_score相加记为sum_u_score,则sim_score=sum_u_score / (1.0 + pow(trig_item_I_score * rec_item_I_score, 0.5)),如下图,最后可根据trig_item与rec_item类目是否一致等信息进行加权。 根据以上式子可以看出,当rec_item与trig_item分布单独出现的次数增加时,两者的sim_score会越小,极端情况下,若所有用户的历史行为中,rec_item与trig_item要么同时出现要么不出现,此时的sim_score达到最大,即两者是非常相似的:有rec_item行为的用户也会有trig_item行为。

特点:CF实效成本低,全量发现能力弱,基于历史相似扩展;存在冷启动问题,抗噪音能力差,算出来结果中会有一些看起来不太准的case,实际用的时候会借助一些其他的信息,比如商品类目;另外一个问题就是“哈里波特”问题;

Swing

阿里原创算法-swing,基于图结构做match,计算商品间的相似度(swing利用user-item二部图计算i2i,比改进过的CF算法仍有明显提升,目前已在各场景中已经广泛应用),定义如下(Ui表示点击过i的user集合,Iu表示user u点击过的item集合):

swing定义
swing定义

含义:如果多个user在点击了s的同时,都只共同点了一个其他的item,那么这个item和s一定是强关联的;如果两个user pair对之间构成的swing结构越多,则每个结构越弱,在这个pair对上每个节点分到的权重越低。

CF以用户的共同点击次数来衡量商品i和j的相似度,SWING在此基础上考虑2个user pari对之间的结构,两个用户共同点击的item数越多,说明i和j的关联越弱。如下图,其中intersection表示u1和u2点击过的item交集数

# 关键代码
for i in xrange(0, len(u2items)):
    wi = math.pow(len(u2items[i]) + 5, -0.35)
    for j in xrange(i + 1, len(u2items)):
        intersection = u2items[i] & u2items[j]
        wj = wi * math.pow(len(u2items[j]) + 5, -0.35)
        for id in intersection:
            u2swing[id] = u2swing.get(id, 0.0) + wj / (1 + len(intersection))

【特点】:凭借着最强相关的Swing结构,可以最大程度的抵抗噪声的影响;和CF相比,swing要更严格,它更好的利用了人的协同能力,去噪能力强,每一个swing结构都是“有益”的信息,而CF中很多节点都可能是不相关的“噪声”,而且没有办法区分;另一个优点是它对网络结构的变化相对更灵敏,如果出现一个新的很相关的item,如果有部分用户都发现了这个item并且都点了它,那么它就很可能排上去。

Content I2I

对商品title的词向量作加权平均。1.根据word2Vec得到title的词向量;2.根据词的类型(如时间季节、人群、地区等),设置对应权重,将词向量加权平均得到新的item向量;3.计算item向量间的相似度作为宝贝的相似度。

Session-based I2I

可读读这方面的文章《A Survey on Session-based Recommender Systems》地址

向量召回

向量召回需要对user或item进行embedding,计算embedding向量之间的相似度,通过embedding的形式进行向量召回,能够大大增加召回率。

embedding

由于id类特征的稀疏性,大部分模型都或多或少会使用特征的embedding表示:将高维稀疏的one-hot编码表示转换为一个低维稠密实数向量(low-dimensional dense embedding),简单的可以将其理解为一种映射。类似于hash方法,embedding方法把位数较多的稀疏数据压缩到位数较少的空间,不可避免会有冲突;然而,embedding学到的是类似主题的语义表示,对于item的“冲突”是希望发生的,这有点像软聚类,这样才能解决稀疏性的问题。embedding原理参考地址

embedding常用的方法包括矩阵分解(MF)、因子分解机(FM)和神经网络。常用矩阵分解的方法把User-Item评分矩阵分解为两个低秩矩阵的乘积,这两个低秩矩阵分别为User和Item的隐向量集合,隐向量遍可以作为embedding,通过User和Item隐向量的点积来预测用户对未见过的物品的兴趣,处理部分冷启动的问题;MF方法可以看作是FM模型的一种特例,即MF可以看作特征只有userId和itemId的FM模型,FM的优势是能够将更多的特征融入到这个框架中,详细请参考下文FM部分;如今用的比较广泛的是基于神经网络的嵌入方法,网络的输入、输出都是实体ID的one-hot编码向量,两层之间就是Embedding层,层与层之间通过全连接的方式相连,Embedding层的神经元个数即Embeeding向量的维数,输入层与Embedding层的链接对应的权重矩阵M(n*m),即对应n个输入实体的m维embedding向量。由于one-hot向量同一时刻只会有一个元素值为1,其他值都是0,因此对于当前样本,只有与值为1的输入节点相连的边上的权重会被更新,即不同ID的实体所在的样本训练过程中只会影响与该实体对应的embedding表示。

神经网络embedding

 

graph embedding

图嵌入,即用一个低维,稠密的向量去表示图中的点,使节点间的向量相似度接近原始节点间在网络结构、近邻关系、Meta信息等多维度上的相似性,能够整体反映图中的结构。常用的graph embedding方法的介绍可参考地址

其中常用的Deep walk embedding方法是将网络中的节点映射为高维空间中的点(embedding向量),这些数据同时还保留着节点之间的结构信息。Deep walk包括两个部分,第一个是随机游走,其原理是对每一个节点,随机的选择其邻居节点,这样游走t-1以后,就获取了一个长度为t的序列,对每个节点进行f次如此的采样,这样会获取大量的随机序列,将原始的图结构转变为了大量序列结构;第二个部分是skip-gram算法,这本来是NLP任务word2vector中使用的算法,其原理就在于根据中心词预测两边的词,例如一个序列(或者说一个语句)是a b c d e f,假如我的窗口大小是2,中心词是c,那么我会得到(c,a)、(c,b)、(c,d)、(c,e)这样的训练数据,也就是找他的n跳邻居,开始随机初始化embedding向量,随着训练的迭代,embedding向量会越来越能反应网络的原始结构信息。

总体两步:1、随机游走产生行为序列 2、在行为序列上训练doc2vect模型

RankI2I

I2I的种类有很多,各种I2I得到的sim_score的scale不统一,人工计算得到的sim_score可能不足以反应到真实分数情况,造成在match的截断部分,根据sim_score取topN的召回数据时,会丢失有效的Item。例如,CFI2I召回项及score:a:0.8,b:0.7,c:0.6;SwingI2I召回项:d:0.5,e:0.4,f:0.3;matc截断数为4时,根据score的排序最终得到a:0.8,b:0.7,c:0.6,d:0.5,这样导致丢失可能效果更好的e:0.4,f:0.3。且ranki2i在item-CF得到的两个商品之间的相似度的基础上再乘以该商品对的联合ctr,对i2i的simScore进行修正,使得i2i表不仅考虑了两个商品的点击共现性,还考虑了召回商品的点击率。

方法:针对不同I2I得到的推荐Item,采用模型对每一对(trig_item,rec_item)进行打分,用模型的score代替match计算的sim_score作为I2I最终的score。

主要特点:1.多种MatchType召回的列表,存在权重不统一以及截断数量的问题;2.Match过程存在多次截断,避免丢失用户感兴趣的商品;3.基于相关性的召回,ranki2i:相关性召回的基础上引入ctr效果的影响。

Deep Match

基本思路:根据用户行为和用户信息预估用户下一个可能点击的商品的概率分布。这个概率分布通过最后的softmax层得到。

Youtube Deep Match

基本思路是根据用户基本信息与用户的行为生成一个用户的向量表达, 并通过该用户表达预估用户下一个可能点击的商品的概率分布。在线上召回阶段, 该模型使用向量检索召回点击概率高的商品集合作为候选。模型的网络结构如下图,通过 Average Pooling 将用户不定长的行为合为一个定长的向量, 将其与用户其他特征进行拼接, 最后通过若干层全连接得到用户的向量表达。在得到用户的向量表达之后, 便可以通过该向量与商品的向量进行匹配。之后的许多工作, 本质上没有脱离该模型的基本框架, 即通过学习用户与商品的向量表达进行两者的匹配。主要工作在于如何更好地建模用户、 商品表达。

Youtube DNN candidate generation model

TDM

Tree-based Deep Match以淘宝商品体系为初始化依托,自顶向下构造从粗到细的兴趣层次树(Tree),并在此基础上应用深度学习网络进行用户兴趣的推荐建模,赋能单点计算上的复杂模型,运用层次检索方法实现全量候选上的用户TopK商品兴趣推荐。

MIND

在计算用户和商品的相关关系时, 一般先将两者表达为相同维度的向量, 通过两个向量的距离函数, 比如内积, 来度量两者的相似度. 理论上, 向量维度越高, 表达能力越强. 但在实践中, 这个维度必定不能过高. 一是因为过高的维增加了训练的难度, 影响模型收敛; 二是受限于算力和存储的制约, 需要在表达能力与计算能力上取得平衡. 由此可见, 单一的、维度有限的向量在很大程度上会影响用户兴趣表达的准确性. 为了解决这个问题, 更好地对用户兴趣的多峰分布进行建模,提出了MIND。

Multi-Interest Network with Dynamic Routing (MIND)的motivation是根据用户的实时行为实时生成多个用户向量来刻画用户的多峰兴趣。具体地,利用胶囊网络构建了用户向量和商品向量在统一的向量空间的多个用户兴趣向量,以表达用户多样的兴趣分布。然后通过向量召回技术,利用这多个兴趣向量去检索出TopK个与其近邻的商品向量,得到TopK个用户兴趣相关的商品。mind模型生成的多个向量相比传统deepmatch生成的单个向量来说,可以更好刻画用户的多个兴趣,进而提升召回的丰富度和准确度。

MIND_model_architecture.png

Multi-Interest Extractor Layer with Dynamic Routing:相似的商品应该有相似的向量表达, 而所谓的兴趣实际可以看成是相似商品的集合。文中使用了 Dynamic Routing 实现了Multi-Interest Extractor Layer, 达到对用户行为进行聚合, 抽取用户兴趣点的目的,文中在原始的算法上进行了一定适配。

Label-aware Attention Layer:在训练过程中, 针对每个用户, 在抽取出的多个兴趣中, 挑出一个与其下一次点击行为最接近的兴趣, 进入到后续的训练。该机制只应用于模型的训练过程, 在线服务的过程中, 模型到产生多个兴趣向量这一步就终止了, 生成的多个兴趣向量将直接用于后续的召回中。

  • 从用户表达的角度来看, MIND 可以看成是Youtube Deep Match 在用户表达方式上的扩展与延伸。Youtube Deep Match 中使用一个向量对用户进行表达, 而在 MIND 中将单个用户的表达扩展成了多个兴趣表达, 更精确地刻画了用户, 从而取得更好的效果。
  • MIND 可以看成是 Deep I2I 在行为序列建模上的扩展。在 Deep I2I 中, 可以理解为将用户行为序列中的每个行为都看成一个单独的兴趣点, 而在 MIND 中对整个行为序列进行了信息的聚合与过滤. 通过兴趣点的聚合, 对行为序列中的噪声进行了过滤, 也更好地利用了整个行为序列信息。

PDN(path-based deep network)

《Path-based Deep Network for Candidate Item Matching in Recommenders》 (sigir-2021)

【背景】

解决的问题:

  • I2I范式缺少了用户信息和商品信息;

  • 向量召回范式没有显式地建模商品共现信息。

本文提出了一种新型框架path-based deep network (PDN),来合理使用所有信息以实现低时延的个性化用户多峰兴趣召回。

【方法】

本文将用户对目标商品的喜爱程度解耦成二度图,其中第一跳表示用户对交互商品的喜爱程度,第二跳表示交互商品与目标商品的相似程度。如下图1所示,其中,Zu表示用户u的用户信息(id,性别等),xjk表示用户交互过的n个商品的商品信息(id,类目等),xi表示目标商品的商品信息,aujk表示用户对第k个交互商品的行为信息(停留时长,购买次数等),cjki表示第k个交互商品和目标商品的相关性信息(共现次数等),边的粗细表示该条边的权重大小。

整体框架如下图2所示,对于n条二跳路径,(1)基于用户信息,行为信息和交互商品信息,采用一个TriggerNet建模用户对每一个交互过商品的喜爱程度,最终得到一个变长的用户表示向量(维度为1 * n),其中,第k个维度表示用户对第k个交互商品的喜爱程度;(2)基于交互商品与目标商品的信息,相关性信息,采用Similarity Net建模交互商品与目标商品的相似度,最终得到一个变长的目标商品表示向量,其中,第k维表示第k个交互商品和目标商品的相似度。最后综合n+1条路径的权重,预测最后对目标商品的喜爱程度。

 PDN主要包含Embedding Layer,Trigger Net (TrigNet),  Similarity Net (SimNet),  Direct & Bias Net 四个模块。

f_d表示直接路径权重的计算函数,PATH_uij表示基于交互商品j的二跳路径权重,AGG表示融合n+1条路径权重,预测用户与目标商品相关性的评分函数。MEG表示融合每条二跳图权重的函数。为了保证PDN满足召回环节的时延要求,我们将MEG定义为两个向量的点积或相加,f_d定义为点积,因此,PDN可以被形式化的定义为:

输入特征embedding后:

Trigger Net:         Similarity Net:     CAT表示embedding的拼接,t_{uj}表示u对j的喜爱程度,当用户有n个交互商品时,可以被看作一个变长的用户表示,其能更加细粒度地刻画用户的多峰兴趣,且更具可解释性,因为向量中的每一个维度显式传递了用户的感兴趣程度。s_{ji}表示商品j和i的相似度,可以被看作目标商品的变长向量表示。SimNet显式的学习了商品间的相似度,因此,它可以实现线上的独立部署来代替原有的i2i策略。

PDN计算得到每条二跳路径的相关性权重:

Direct & Bias Net:位置偏差等选择性偏差被证明是推荐系统中的重要影响因素。例如,一个用户更倾向于去点击靠近顶部的商品,即使它不是最相关的商品。为了消除该类偏差,基于会导致选择性偏差的特征(位置信息等)训练了一个浅层塔。

Loss function:用户是否会点击该商品可以被看作是二分类任务。因此,PDN融合了n+1条路径的权重以及偏差得分得到用户与商品的相关性得分,并将其转化为点击概率:

   loss:

【recall】

将路径检索(path retrieval)解耦为两部分:(1)利用TrigNet检索出用户最感兴趣的top-m个交互商品;(2)利用SimNet构建的商品相似度索引分别对top-m中的每个交互商品实现i2i检索。


Rank部分

rank部分主要是训练一个ctr打分模型,对候选集进行实时排序,下面对常用模型进行介绍。

LR

LR是业界最常用也最通用的基本模型,函数形式来看,LR模型可以看做是一个没有隐层的神经网络模型(感知机模型)。其一直是CTR预估问题的benchmark模型,由于其简单、易于并行化实现、可解释性强等优点而被广泛使用。然而由于线性模型本身的局限,不能处理特征和目标之间的非线性关系,因此模型效果严重依赖于算法工程师的特征工程经验。为了让线性模型能够学习到原始特征与拟合目标之间的非线性关系,通常需要对原始特征做一些非线性转换。常用的转换方法包括:特征聚类、连续特征离散化(包括等频离散、等间距离散,或者采用树模型通过gain来找到最优分裂点进行划分)、特征交叉(数值累加、累乘,类目组合等)等。特征离散化相当于把线性函数变成了分段线性函数,从而引入了非线性结构;同时可以起到一个平滑的作用,对异常值和噪音有一定的鲁棒性。特征交叉主要是将领域知识融入模型,往往单个特征对目标判定的贡献是较弱的,而不同类型的特征组合在一起就能够对目标的判定产生较强的贡献。例如用户性别和商品类目交叉就能够刻画例如“女性用户偏爱美妆类目”,“男性用户喜欢球类类目”的知识。

LR模型公式

缺点:LR模型完全依靠于人工特征工程,需要对领域知识有一定了解,而且即使有经验的工程师也很难穷尽所有的特征交叉组合。LR模型可以理解为一个简单的一层神经网络,事实上这种方法最大的优势是具有强大的的记忆能力,但是这种模型在泛化能力上会有一些欠缺。

LR+GBDT

针对LR的缺点,Facebook 在14年的论文中提出了采用GBDT(Gradient Boost Decision Tree)的叶子节点作为组合特征的方法。设计思路:对于连续型特征或者值空间较小的类别特征输入到GBDT(一般采用浅层的树),将其得到的每棵树的叶子节点编号作为LR的组合特征(叶子节点个数即表示特征维度),再将其他离散特征和组合特征共同输入到LR去做预测。如下图有两棵树,左树有三个叶子节点,右树有两个叶子节点,最终的特征即为五维的向量。对于输入x,假设他落在左树第一个节点,编码[1,0,0],落在右树第二个节点则编码[0,1],所以整体的编码为[1,0,0,0,1],这类编码作为特征,输入到LR中进行分类。     GBDT模型能够学习高阶非线性特征组合,对应树的一条路径(用叶子节点来表示);而其他稀疏特征则通过LR进行处理,这样既能做高阶特征组合又能利用线性模型易于处理大规模稀疏数据的优势。

LR+GBDT​​​​​​

【为什么建树采用GBDT而非RF】:很多实践证明GBDT的效果要优于RF,且GBDT前面的树,特征分裂主要体现对多数样本有区分度的特征;后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本。优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理,这应该也是用GBDT的原因。

LR VS GBDT

高维稀疏特征的时候,使用 gbdt 很容易过拟合,lr 的效果会比 gbdt 好;GBDT只是对历史的一个记忆,泛化能力较弱。

参考知乎假设有1w个样本,y类别0和1,100维特征,其中10个样本都是类别1,而特征f1的值为0,1,且刚好这10个样本的f1特征值都为1,其余9990样本都为0(在高维稀疏的情况下这种情况很常见),我们都知道这种情况在树模型的时候,很容易优化出含一个使用f1为分裂节点的树直接将数据划分的很好,但是当测试的时候,却会发现效果很差,因为这个特征只是刚好偶然间跟y拟合到了这个规律,这也是我们常说的过拟合。但是当时我还是不太懂为什么线性模型就能对这种case处理的好?照理说线性模型在优化之后不也会产生这样一个式子:y=W1*f1+Wi*fi....,其中W1特别大以拟合这十个样本吗,因为反正f1的值只有0和1,W1过大对其他9990样本不会有任何影响。

是因为现在的模型普遍都会带着正则项,而lr等线性模型的正则项是对权重的惩罚(l1,l2),也就是W1一旦过大,惩罚就会很大,进一步压缩W1的值,使他不至于过大;而树模型则不一样,树模型的惩罚项通常为叶子节点数和深度等,而我们都知道,对于上面这种case,树只需要一个节点就可以完美分割9990和10个样本,惩罚项极其之小,这也就是为什么在高维稀疏特征的时候,线性模型会比非线性模型好的原因了:带正则化的线性模型比较不容易对稀疏特征过拟合。

【工业界的经验】,先根据业务场景做提取统计类特征使用gbdt模型快速拿到收益,然后考虑加入海量离散类特征,使用LR/FM模型进一步提升效果。至于原有的统计类特征可以通过gbdt叶子节点转换成离散特征一并加入到LR/FM中。

FM/FFM

FM(Factorization Machines)模型通过隐变量的方式,发现两两特征之间的组合关系,但这种特征组合仅限于两两特征之间,即二阶组合,模型如下式,式中前两部分即普通的LR,较LR多了最后的组合部分,将任意两个特征进行组合,其中<Vi,Vj>表示组合特征的权重。

FM

FM和树模型都能够自动学习特征交叉组合,但基于树的模型只适合连续型或值空间较小的稀疏数据,容易学到高阶组合,却不适合学习高度稀疏数据的特征组合,一方面高度稀疏数据的特征维度一般很高,这时基于树的模型学习效率很低,甚至不可行,这个在GBDT+LR一节中已讨论过;另一方面树模型也不能学习到训练数据中很少或没有出现的特征组合,因为树模型只是对历史的一个记忆,泛化能力较弱。相反,FM模型因为通过隐向量的内积来提取特征组合,对于训练数据中很少或没有出现的特征组合也能够学习到(当然,FM只能学习到二阶的特征组合,对于高阶特征组合则需采用其他方法),避免了由于数据稀疏性导致特征权重不可学的问题(在数据很稀疏的情况下,满足xi,xj都不为0的情况非常少,这样将导致ωij无法通过训练得出;为了求出ωij,我们对每一个特征分量xi引入辅助向量Vi=(vi1,vi2,⋯,vik)。然后,利用vivj^T对ωij进行求解,如下图)。例如,特征i和特征j在训练数据中从来没有成对出现过,但特征i经常和特征k成对出现,特征j也经常和特征k成对出现,因而在FM模型中特征i和特征j会有一定的相关性。毕竟所有包含特征i的训练样本都会导致模型更新特征的隐向量Vi,同理,所有包含特征j的样本也会导致模型更新隐向量Vj,这样<Vi,Vj>就不太可能为0。

fm权重矩阵

FFM(Field-aware Factorization Machine)模型是对FM模型的扩展,通过引入field的概念,FFM把相同性质的特征归于同一个field。例如:“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中。同理,商品的末级品类编码生成了550个特征,这550个特征都是说明商品所属的品类,因此它们也可以放到同一个field中。简单来说,同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等。在FFM中,每一维特征 xi,针对其它特征的每一种field fj,都会学习一个隐向量 Vi,fj。因此,隐向量不仅与特征相关,也与field相关。也就是说,“Day=26/11/15”这个特征与“Country”特征和“Ad_type”特征进行关联的时候使用不同的隐向量,这与“Country”和“Ad_type”的内在差异相符,也是FFM中“field-aware”的由来。

FFM

FM是FFM的特例,在FM模型中,每一维特征的隐向量只有一个,即FM是把所有特征都归属到一个field时的FFM模型。FM与FFM的详细对比见博客

MLR

MLR(混合逻辑回归)是阿里在2012年提出并使用的广告点击率预估模型。MLR模型是对线性LR模型的推广,它利用分片线性方式对数据进行拟合。基本思路是采用分而治之的策略:如果分类空间本身是非线性的,则按照合适的方式把空间分为多个区域,每个区域里面可以用线性的方式进行拟合,最后MLR的输出就变为了多个子区域预测值的加权平均。如下图(C)所示,就是使用4个分片的MLR模型学到的结果。分片数为时,退化为普通LR,分片数越多,模型的拟合能力越强。

MLR模型在大规模稀疏数据上探索和实现了非线性拟合能力,在分片数足够多时,有较强的非线性能力;同时模型复杂度可控,有较好泛化能力;同时保留了LR模型的自动特征选择能力。


存在的问题

虽然理论上来讲FM可以对高阶特征组合进行建模,但实际上因为计算复杂度的原因一般都只用到了二阶特征组合。由于上述几种方法无法建模两个特征之间深层次的关系或者说高阶交叉特征,为了解决该问题,学者们通过Deep Network来建模更高阶的特征之间的关系,但是对于离散特征的处理,我们使用的是将特征转换成为one-hot的形式,将One-hot类型的特征输入到DNN中,会导致网络参数过多,因此一般都会把稀疏类特征embedding后输入到网络中。由此学者们提出了一系列方法,例如:FM系列(FNN,AFM,NFM,DeepFM,xDeepFM,PNN),DCN,Wide&Deep等。其中FM系列又分为两种主流的方法:并行结构和串行结构。

FM与DNN融合
结构描述模型
并行

FM部分和DNN部分分开计算,只在输出层进行一次融合得到结果

DeepFM,DCN,Wide&Deep
串行将FM的一次项和二次项结果(或其中之一)作为DNN部分的输入,经DNN得到最终结果PNN,NFM,AFM,FNN

目前也有很多基于CNN与RNN的用于CTR预估的模型。但是基于CNN的模型比较偏向于相邻的特征组合关系提取,基于RNN的模型更适合有序列依赖的点击数据,例如阿里提出的DIN,DIEN等。

FNN

FNN(Factorization-machine supported Neural Network),FNN模型就是用FM模型学习到的embedding向量初始化MLP,再由MLP完成最终学习。分为两个阶段:第一个阶段先用一个模型做特征工程;第二个阶段用第一个阶段学习到新特征训练最终的模型,类似于LR+GBDT。其模型结构如下:

缺点:不能对低阶特征拟合,需要预训练模型。针对FNN的缺点,下文的NFM有了更完善的改进。

AFM

根据上面介绍的FM,我们知道FM在进行预测时,会让一个特征固定一个特定的向量,当这个特征与其他特征做交叉时,都是用同样的向量去做计算。这个是很不合理的,因为不同的特征之间的交叉,重要程度是不一样的。如何体现这种重要程度,之前介绍的FFM模型是一个方案。另外,结合attention机制也是一种处理方案,而AFM便是采用的这种方式。attention可参考地址。网络结构如下图,图中的前三部分:sparse iput,embedding layer,pair-wise interaction layer,都和FM是一样的。而后面的两部分,则是AFM的创新所在。从比较宏观的角度理解,AFM就是通过一个attention net生成一个关于特征交叉项的权重,然后将FM原来的二次项直接累加,变成加权累加。

AFM网络结构
Attention部分

缺点:AFM只是在FM的基础上添加了attention的机制,但是实际上,由于最后的加权累加,二次项并没有进行更深的网络去学习非线性交叉特征,所以AFM并没有发挥出DNN的优势。

NFM

NFM(Neural Factorization Machines),其函数形式,其中,f(x)是用来建模特征之间交互关系的多层前馈神经网络模块。NFM网络结构如下图,embedding layer 得到的vector即FM中要学习的隐向量v,B-Interaction Layer其实就是计算FM中的二次项的过程,因此得到的向量维度就是我们的Embedding的维度,其结果为:,Hidden Layers就是我们的DNN部分,将Bi-Interaction Layer得到的结果接入多层的神经网络进行训练,从而捕捉到特征之间复杂的非线性关系。在进行多层训练之后,将最后一层的输出求和,同时加上一次项和偏置项,就得到了我们的预测输出。

 

NFM网络结构

PNN

思想来源:MLP中的节点add操作可能不能有效探索到不同类别数据之间的交互关系,虽然MLP理论上可以以任意精度逼近任意函数,但越泛化的表达,拟合到具体数据的特定模式越不容易。DNN的高阶特征交互建模是元素级的(bit-wise),也就是说同一个域对应的embedding向量中的元素也会相互影响,而FM类方法是以向量级(vector-wise)的方式来构建高阶交叉关系,vector-wise的方式构建的特征交叉关系比bit-wise的方式更容易学习。虽然两种建模交叉特征的方式有一些区别,但两者并不是相互排斥的,如果能把两者集合起来,便会相得益彰。PNN便是采用了这种方式。

           PNN(Product-based Neural Networks)主要是在深度学习网络中增加了一个inner/outer product layer,用来建模特征之间的关系。网络结构如下图,Embedding Layer和Product Layer之间的权重为常量1,在学习过程中不更新。Product Layer的节点分为两部分,一部分是线性部分Z向量,一部分是非线性部分P向量,Z向量的维数与输入层的Field个数(N)相同,Z=(f_{1},f_{2},f_{3},...,f_{N})P向量的每个元素的值由embedding层的feature向量两两成对并经过Product操作之后生成,,维度为N*(N-1),fi即每个field的embedding向量。

PNN核心部分在于其Product思想,来源于在ctr预估中,认为特征之间的关系更多是一种and“且”的关系,而非add"加”的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。Product操作有两种:内积和外积;对应的网络结构分别为IPNN和OPNN,两者的区别如下图,IPNN中P的计算即使用内积来代表pij,所以,pij其实是一个数;而OPNN的计算使用外积f_{i}{f_{j}}^{T},此时pij为M*M的矩阵。

由于IPNN和OPNN中的计算复杂度过高,文章对其计算进行了优化。

在IPNN中,由于Product Layer的P向量由field两两配对产生,因此维度膨胀很大,给l1 Layer的节点计算带来了很大的压力。受FM启发,可以把这个大矩阵转换分解为小矩阵和它的转置相乘(对称矩阵的分解),表征到低维度连续向量空间,来减少模型复杂度:

在OPNN中,外积操作带来更多的网络参数,为减少计算量,使得模型更易于学习,采用了多个外积矩阵按元素叠加(element-wise superposition)的技巧来减少复杂度,其重新定义了p矩阵,具体如下: 

Wide&Deep

上述几种串行结构,将embedding后的向量输入到神经网络中,使低阶和高阶特征组合隐含地体现在隐藏层中,学习到一个隐式交叉特征,这样无法确定学习到了多少阶的交叉特征。而如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合,这就产生了并行的网络结构。

像LR这样的wide模型学习特征与目标之间的直接相关关系,偏重记忆(memorization),如在推荐系统中,wide模型产生的推荐是与用户历史行为的物品直接相关的物品。这样的模型缺乏刻画特征之间的关系的能力,比如模型无法感知到“土豆”和“马铃薯”是相同的实体,在训练样本中没有出现的特征组合自然就无法使用,因此可能模型学习到某种类型的用户喜欢“土豆”,但却会判定该类型的用户不喜欢“马铃薯”。

WDL(Wide & Deep Learning)是Google在2016年提出的模型,其巧妙地将传统的特征工程与深度模型进行了强强联合。模型结构如下:

WDL分为wide和deep两部分联合训练,单看wide部分与LR模型并没有什么区别;deep部分则是先对不同的ID类型特征做embedding,在embedding层接一个全连接的MLP(多层感知机),用于学习特征之间的高阶交叉组合关系。由于Embedding机制的引入,WDL相对于单纯的wide模型有更强的泛化能力。

特点:PNN与FM相比,舍弃了低阶特征,也就是线性的部分,这在一定程度上使得模型不太容易记住一些数据中的规律。而WDL模型混合了宽度模型与深度模型,其宽度部分保留了低价特征,偏重记忆;深度部分引入了bit-wise的特征交叉能力。WDL模型的一大缺点是宽度部分的输入依旧依赖于大量的人工特征工程。

DeepFM

FNN模型首先预训练FM,再将训练好的FM应用到DNN中。PNN网络的embedding层与全连接层之间加了一层Product Layer来完成特征组合。PNN和FNN与其他已有的深度学习模型类似,都很难有效地提取出低阶特征组合。WDL模型混合了宽度模型与深度模型,但是宽度模型的输入依旧依赖于特征工程。

上述模型要不然偏向于低阶特征或者高阶特征的提取,要不然依赖于特征工程。而DeepFM模型可以以端对端的方式来学习不同阶的组合特征关系,并且不需要其他特征工程。DeepFM的结构中包含了因子分解机部分以及深度神经网络部分,分别负责低阶特征的提取和高阶特征的提取。其等价于FM + WDL,网络结构如下图:

上图中红色箭头所表示的链接权重恒定为1(weight-1 connection),在训练过程中不更新,可以认为是把节点的值直接拷贝到后一层,再参与后一层节点的运算操作。DeepFM包含两部分:神经网络部分与因子分解机部分,这两部分共享相同的输入与embedding向量。对于给定特征i,向量Wi用于表征一阶特征的重要性,隐变量Vi是用于表示该特征与其他特征的相互影响。在FM部分,Vi用于表征二阶特征,同时在DNN部分用于构建高阶特征。所有的参数端到端的进行训练。DeepFM最终的预测结果: ,其中即与前面介绍的FM模型一致, H为隐层的层数。

特点:DeepFM在融合bit-wise和vector-wise交叉特征的基础上,同时还能保留低阶特征。DeepFM模型融合了FM和WDL模型,其FM部分实现了低阶特征和vector-wise的二阶交叉特征建模,其Deep部分使模型具有了bit-wise的高阶交叉特征建模的能力。

DeepFFM

有了DeepFM自然就有DeepFFM,相比DeepFM,DeepFFM将FM换成了FFM,且在FFM侧去除了二阶特征,在DNN侧输入可采用2中不同的方式。公式

两种方式得到DNN部分的输入,分别是计算内积和哈达玛积,如下式,最终输入DNN的维度分别是n(n-1)/2,n(n-1)/2*k


存在的问题

FM、DeepFM和Inner-PNN都是通过原始特征隐向量的内积来构建vector-wise的二阶交叉特征,这种方式有两个主要的缺点:1.必须要穷举出所有的特征对,即任意两个field之间都会形成特征组合关系,而过多的组合关系可能会引入无效的交叉特征,给模型引入过多的噪音,从而导致性能下降;2.二阶交叉特征有时候是不够的,好的特征可能需要更高阶的组合。虽然DNN部分可以部分弥补这个不足,但bit-wise的交叉关系是晦涩难懂、不确定并且不容易学习的。

DCN

思想来源:二阶交叉特征通过穷举所有的原始特征对得到,那么通过穷举的方法得到更高阶的交叉特征,必然会产生组合爆炸的维数灾难,导致网络参数过于庞大而无法学习,同时也会产生很多的无效交叉特征。DCN(Deep & Cross Network)便是针对该问题进行了有效处理。

DCN模型从嵌入和堆积层(embedding and stacking layer)开始,接着是一个交叉网络(cross network)和一个与之平行的深度网络(deep network),之后是最后的组合层(combination output layer),它结合了两个网络的输出,如下图所示。

embedding and stacking layer:将稀疏特征的embedding向量与连续特征向量叠加起来形成一个向量,作为模型的输入,;cross network:核心思想是以有效的方式应用显式特征交叉(显式地捕获高阶特征组合),每个层的输出其中l表示对应层数,w_{l},b_{l}为对应层的weight和bias参数,如下图Figure2所示,在完成一个特征交叉f后,每个cross layer会将它的输入加回去。cross network的独特结构使得交叉特征的阶(the degress of cross features)随着layer的深度而增长,在第l层layer,它的最高多项式阶为l+1。如果用Lc表示交叉层数,d表示输入维度,则总参数数量为:d * Lc * 2 (w和b)。一个cross network的时间和空间复杂度对于输入维度是线性关系。因而,比起它的deep部分,一个cross network引入的复杂度微不足道,DCN的整体复杂度与传统的DNN在同一水平线上。Deep network:获取高阶隐式特征交叉。 combination output layer:链接层将两个并行网络的输出连接起来,经过一层全链接层得到输出。

特点:DCN能够有效地捕获有限度的有效特征的相互作用,学会高度非线性的相互作用,不需要人工特征工程或遍历搜索,实验结果表明,交叉网络(DCN)在LogLoss上与DNN相比少了近一个量级的参数量,具有较低的计算成本。同时,上图Figure2我们注意到的计算为一个数值标量,因此Cross Network的输出就相当于输入x0不断乘以一个数,只不过这个数与x0高度相关,DCN模型的两个主要的不足:1.CrossNet的输出被限定在一种特殊的形式上;2.特征交叉还是以bit-wise的方式构建的。

xDeepFM

为了引入更高阶的vector-wise的交叉特征,同时又能控制模型的复杂度,避免产生过多的无效交叉特征,xDeepFM应运而生(DCN的进阶)。

xDeepFM模型是自动构建交叉特征且能够端到端学习的集大成者,为了实现自动学习显式的高阶特征交互,同时使得交互发生在向量级上,xDeepFM首先提出了一种新的名为压缩交互网络(Compressed Interaction Network,简称CIN)的模型。xDeepFM的框架结构如下图,模型的输入是所有field的embedding向量,这个与上面几个模型类似,从图中可以看出,最终输出包含三部分:原始特征部分、CIN模块和mlp。

模型的主要贡献就是CIN模块,详细结构如下图所示。该模块的主要功能就是捕捉特征高阶交叉,而且可以具体指定最高多少阶。CIN的输入是所有field的embedding向量构成的矩阵m表示field的个数,D为embedding的维度,该矩阵的第i行对应第i个field的embedding向量。CIN网络也是一个多层的网络,它的第k层的输出也是一个矩阵,记为H_{k}表示k层的embedding向量个数,H_{0}=m。CIN每层的输入包括两部分:上层的输出和整体输入x^{0}X^{k}的第h行计算:其中括号部分表示两者的哈达玛积,即两个矩阵或向量对应元素相乘得到相同大小的矩阵或向量。根据下图(a)对该公式进行理解,在计算X^{k+1}时,定义一个中间变量, Z^{k+1}是个3维tensor,由D个数据矩阵堆叠而成,其中每个数据矩阵是由X^{k}的一个列向量与X^{0}的一个列向量的外积运算(Outer product)而得,Z^{k+1}的生成过程实际上是由X^{k}X^{0}沿着各自embedding向量的方向计算外积的过程。Z^{k+1}可以被看作是一个宽度为m、高度为H_{k}、通道数为 的图像,在这个虚拟的图像上进行卷积操作即得到X^{k+1},如下图(b),W^{k,h}是其中一个卷积核,总共有H_{k+1}个不同的卷积核,因而借用CNN网络中的概念,X^{k+1} 可以看作是由H_{k+1}个feature map堆叠而成。

CIN的宏观框架如下图(c)所示,它的特点是,最终学习出的特征交互的阶数是由网络的层数决定的,每一层隐层都通过一个池化操作连接到输出层,从而保证了输出单元可以见到不同阶数的特征交互模式。同时不难看出,CIN的结构与循环神经网络RNN是很类似的,即每一层的状态是由前一层隐层的值与一个额外的输入数据计算所得。不同的是,CIN中不同层的参数是不一样的,而在RNN中是相同的;RNN中每次额外的输入数据是不一样的,而CIN中额外的输入数据是固定的,始终是X^{0}

集成的CIN和DNN两个模块能够帮助模型同时以显式和隐式的方式学习高阶的特征交互,而集成的线性模块和深度神经模块也让模型兼具记忆与泛化的学习能力。值得一提的是,为了提高模型的通用性,xDeepFM中不同的模块共享相同的输入数据。而在具体的应用场景下,不同的模块也可以接入各自不同的输入数据,例如,线性模块中依旧可以接入很多根据先验知识提取的交叉特征来提高记忆能力,而在CIN或者DNN中,为了减少模型的计算复杂度,可以只导入一部分稀疏的特征子集。

FAT-DeepFFM

AFM模型,是在特征进行交叉之后,再对交叉特征进行权重计算,但本文认为,在特征进行交叉之前,对特征的重要性进行一个计算也十分重要。当特征为n个时,交叉后计算重要性的权重个数为n的平方,但是交叉前计算特征重要性的话,只需要计算n个权重。这么做的话在特征比较多的时候,对计算资源的节省是十分明显的。

该模型由张俊林老师提出,主要贡献:1.在特征进行交叉之前,对特征的重要性进行计算也十分重要,其效果比在特征交叉后加attention好;2.借鉴图像领域的SENet网络做attention

上图除了中间attention模块,其他同Deep FFM,文章主要贡献就在图中的attention部分,作者称为CENet Field Attention。分为两个阶段:

1.Compose阶段

每一个向量压缩成一维的值,每一个特征对应的Embedding Matrix是k * n,压缩之后变为一个n维的向量,较SENet的max pooling方式,本文改为采用一维卷积(1*1*k大小的filter)

2.Excitation阶段

将每个特征i对应的n维压缩向量计作DVi,n个特征向量拼接输入到2层的神经网络,输出n*n维度的向量作为每个field的attention权重。

DIN

DIN(Deep Interest Network)是最早的一批对用户序列进行挖掘的文章,它通过设计一个局部激活单元来自适应地学习用户对某个广告的历史行为的兴趣表示。这种表示向量在不同的广告中是不同的,大大提高了模型的表达能力。而传统的深度CTR模型中,固定长度表示的向量是捕捉用户兴趣多样性的瓶颈,为了提高模型的表达能力,设计了一种新的方法DIN来激活相关的用户行为,获得用户兴趣的自适应表示向量。

 

DIEN

对于CTR预测模型,需要捕捉用户行为数据背后潜在的用户兴趣。此外,考虑到外部环境和内部认知的变化,用户兴趣会随着时间的推移而动态演化。兴趣建模的CTR预测方法有多种,但大多将行为的表现直接视为兴趣,缺乏对具体行为背后潜在兴趣的专门建模。此外,很少有研究考虑兴趣的变化趋势。

深度兴趣演化网络DIEN,设计了兴趣提取层来从历史行为序列中捕捉时间兴趣。兴趣提取层中引入一个辅助损失来抽取每一步的时间兴趣信息。针对用户兴趣的多样性,特别是在电子商务系统中,其提出了兴趣演化层来捕捉与目标商品相关的兴趣演化过程。在兴趣演化过程中,注意力机制不断强化,并嵌入到序列结构中。

模型包括2个部分

Interest Extractor Layer:从序列化的用户行为中抽取一系列兴趣状态,用户在电子商务系统中的点击行为是丰富的,为了平衡效率和效果,使用GRU来进行建模,输入的数据是依据行为的发生顺序的行为,但是隐藏状态ht只能捕获行为之间的依懒性而不能完全表示兴趣,由于每一步的兴趣状态会带来连续的行为,所以此处文中提出了辅助loss,其使用行为bt+1来监督兴趣状态ht的学习,除了使用真实的下一步行为正实例,其还使用从商品集中排除了点击商品的负实例作为负样本。整体上,辅助loss的引入可以带来的好处:1.帮助GRU的每个隐藏单元更好地表示兴趣;2.在建模长时间序列的时候,辅助loss可以降低back propagation的困难;可以拿到更好的emebdding矩阵。

Interest Evolving Layer:在第一步,伴随着辅助loss的帮助,我们可以获得更加具有表示能力的兴趣序列。 通过分析兴趣变化的特性,将注意力机制的局部激活能力与从GRU到模型兴趣演化的顺序学习能力相结合。GRU的每个步骤中的局部激活可以强化相对兴趣的影响,并减弱兴趣漂移的干扰,有助于建立与目标项相关的兴趣演化过程。该部分采用作者提出的AUGRU(GRU with attentional update gate)建模。

ESMM

多任务学习方法包括hard parameter sharing、soft parameter sharing。hard parameter sharing将排序模型的底层的全连接层进行共享,学习共同的模式,上层用一些特定的全连接层学习任务特定的模式。ESMM(Entire Space Multi-Task Model)是这一类的一种特例,因为ESMM的多任务优化目标是CTR、CVR,只有存在点击行为后才会可能存在购买行为,这种序列关系可以被用来缓解或者解决CVR任务中的数据稀疏性问题(Data Sparisity, DS)和样本选择偏差问题(Sample Selection Bias, SSB)。SSB问题:CVR任务的训练样本是点击数据,点击购买为正样本,否则为负样本,但在线预测时,面对的却是整个曝光样本空间,这会降低模型的泛化性能。DS问题:CVR任务使用的点击训练样本量远小于CTR任务使用的曝光训练样本量。

ESMM通过引入两个task,预估曝光后的点击概率pCTR、预估曝光后点击且转化的概率pCTCVR来处理上面两个问题:由于pCTR、pCTCVR在全域样本空间中学习的,所以pCVR也是全域样本空间的,消除了SSB问题。此外CVR与CTR任务的共享了底层的embedding,由于CTR训练所能利用的样本量更多,所以可以辅助学习CVR,使CVR任务可以隐式地从大量曝光未点击样本中学习,这种类似于迁移学习的参数共享机制可以极大缓解DS问题。

MMoE

MMoE(Multi-gate Mixture-of-Experts)属于soft parameter sharing的方法。MoE(Mixture-of-Experts)将底层共享embedding输出变成了多个expert,并且只设置了一个gate,不同任务通过gate的输出加权各个expert的输出,而MMoE在MoE基础上设计了多个gate,考虑到不同任务之间的特异性,使得每个任务都有不同的gate,用来控制不同目标选择每个expert的信号占比,类似于weighted sum pooling操作。MMoE通过共享experts学习到不同任务的联系和差异,提高了每个任务的学习效率和质量,同时通过gates来平衡多个任务对experts信号的选择,不要求目标之间必须是高相关性的。

 

 

未完待续。。。

 

【参考】

https://www.zhihu.com/question/35821566

https://mp.weixin.qq.com/s/s79Dpq5v6ouvCE_vneTYBA

https://www.jianshu.com/p/152ae633fb00

Factorization Machines;

Wide & Deep Learning for Recommender Systems;

Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

Deep Learning over Multi-Field Categorical Data: A Case Study on User Response Prediction;

Product-based Neural Networks for User Response Prediction;

DeepFM: A Factorization-Machine based Neural Network for CTR Prediction;

Neural Factorization Machines for Sparse Predictive Analytics;

Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks;

Deep & Cross Network for Ad Click Predictions;

Deep Interest Network for Click-Through Rate Prediction

xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems

Deep Interest Network for Click-Through Rate Prediction

Deep Interest Evolution Network for Click-Through Rate Prediction

国内推荐系统技术的发展历程可以大致分为以下几个阶段: 1. 初期阶段(2000年-2010年):这个阶段主要是国外的推荐系统技术开始逐渐引入中国,国内的推荐系统技术主要以基于内容的推荐为主,如基于文本、音乐、图像等内容的推荐系统。 2. 基于协同过滤的推荐系统阶段(2010年-2014年):随着互联网的普及和数据的爆发式增长,基于协同过滤的推荐系统技术开始在国内兴起。这个阶段主要的突破是利用大数据和分布式计算技术来优化协同过滤算法,如基于Hadoop的MapReduce算法。 3. 混合推荐系统阶段(2014年-2017年):随着业务场景的复杂化和用户需求的多样化,单一的推荐算法已经不能满足需求,混合推荐系统成为了主流。这个阶段主要的突破是利用机器学习和深度学习算法来训练模型,如基于神经网络的深度学习算法。 4. 大规模分布式推荐系统阶段(2017年至今):随着云计算和大数据技术的日益成熟,大规模分布式推荐系统开始崭露头角。这个阶段主要的突破是将推荐系统部署到云端,实现大规模分布式计算,如基于Spark的分布式推荐算法。 总的来说,国内推荐系统技术的发展历程经历了从基于内容的推荐系统到基于协同过滤的推荐系统,再到混合推荐系统和大规模分布式推荐系统的发展阶段,技术不断升级和创新,为用户提供更加个性化的推荐服务。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值