阅读 2740

【推荐系统】浅谈推荐系统

浅谈推荐系统

简单定义来说:推荐系统是一个信息过滤系统,根据用户的历史行为,社交关系,兴趣点,来判断用户当前感兴趣的物品和内容。

其根据不同的目标定义,也会导致不同的推荐结果,从考虑的measure上来考虑,包括用户满意度,预测准确度,覆盖率,多样性,新颖性,精细度,实时性,内容时效性,内容质量,商业目标等等。

1. 常用评测指标

  1. 用户满意度:用户是推荐系统中非常重要的参与者,他们的满意度也直接决定了推荐系统的好坏.但是用户满意度这个指标无法离线计算,只能通过用户调查或者在线实验获得,一般都是线上行为统计,包括购买率(CVR),点击率(CTR),用户停留时间,转化率等等。

  2. 预测准确度:预测准确度是用来度量用户的实际行为与推荐系统预测结果的准确度,该指标是最重要的离线评价指标,因为可以通过离线计算得到.下面是预测准确度最常用的两个指标。

    1. 评分预测:预测用户对物品的评分行为,这种评分模型的预测准确度一般使用均方根误差(RMSE)和平均绝对误差(MAE)。其中用户uu, 物品ii, 实际 评分ruir_{ui}, 预测评分rui^\hat{r_{ui}}。则对应的RMSE和MAE为:

      RMSE=u,iT(ruirui^)2TRMSE=\sqrt{\frac{\sum _{u,i\in T}\left ( r_{ui}- \hat{r_{ui}}\right )^{2}}{\left | T \right |}}
      MAE=u,iTruirui^TMAE=\frac{\sum _{u,i\in T}\left | r_{ui}- \hat{r_{ui}} \right |}{\left | T \right |}
    2. TopN推荐:推荐系统在给用户推荐物品的时候,往往会给用户一个列表的推荐物品,这种场景下的推荐是TopN推荐,该推荐方式最常用的预测准确率指标一般是精确率(precision)和召回率(recall)。其中R(u)R(u)为推荐列表,T(u)T(u)为实际行为列表。

      Precision=u,iTR(u)T(u)))u,iTR(u))Precision=\frac{\sum _{u,i\in T}\left | R(u)\cap T(u))) \right |}{\sum _{u,i\in T}\left | R(u)) \right |}
      Recall=u,iTR(u)T(u)))u,iTT(u))Recall=\frac{\sum _{u,i\in T}\left | R(u)\cap T(u))) \right |}{\sum _{u,i\in T}\left | T(u)) \right |}

      有时候为了更加全面的评估TopN推荐,通常会选取不同的推荐列表长度计算多组精确率与召回率然后分别绘制出精确率曲线和召回率曲线,需要注意的是这里并不是PR曲线,感兴趣的可以了解一下PR曲线相关的知识。

  3. 覆盖率:描述一个推荐系统对物品长尾的发觉能力,一个简单的定义可以是:推荐系统所有推荐出来的商品集合数占总物品集合数的比例. 但是商品数太集中在几个商品集合的话也不行,可以通过研究物品在推荐列表中出现的次数分布来描述推荐系统挖掘长尾的能力,如果这个分布比较平缓说明推荐系统的覆盖率比较高,而如果分布比较陡说明推荐系统的覆盖率比较低.下面分别使用信息熵基尼系数来定义覆盖率.

    1. 信息熵定义覆盖率: 其中p(i)p(i)是物品ii的流行度除以所有物品流行度之和

      H=i=1np(i)logp(i)H = -\sum_{i=1}^n p(i) logp(i)
    2. 基尼系数定义覆盖率: 其中iji_j是按照物品流行度p从小到大排序的物品列表中第jj个物品

      G=1n1j=1n(2jn1)p(ij)G=\frac{1}{n-1} \sum_{j=1}^{n}(2j-n-1)p(i_{j})
  4. 多样性: 度量推荐列表中所有物品之间的不相似性。可通过不同的相似性函数度量推荐列表中的商品的相似性,比如商品基于内容的相似,基于协同过滤的相似,这样就可以得到不同角度的多样性。令函数s(i,j)s(i,j)为物品ii和物品jj的相似性,那么用户推荐列表的多样性可以定义为:

    Diversity(R(u))=1i,jR(u)s(i,j)12R(u)(R(u)1)Diversity(R(u))=1-\frac{\sum_{i,j \in R(u)}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)}

    推荐系统整体的多样性可以定义为所有用户推荐列表多样性的平均值:

    Diversity=1UuUDiversity(R(u))Diversity = \frac{1}{U} \sum_{u\in U}Diversity(R(u))
  5. 新颖性:满足推荐的新颖性最简单的方法就是给用户推荐他们之前没有看过的物品,但是每个用户没见过的物品数量是非常庞大的,所以一般会计算推荐物品的平均流行度,流行度越低的物品越有可能让用户觉得新颖,因此,如果推荐结果中的物品平均热门程度比较低说明推荐的结果就可能比较新颖.

  6. AUC曲线:AUC(Area Under Curve),ROC曲线下与坐标轴围成的面积

    auc

下面介绍一下推荐的两大主要任务:召回和排序。

推荐系统

如上图所示,candidate generation是召回阶段,ranking是排序阶段。

2. 召回

2.1 召回层在推荐系统中的位置和作用

召回层和排序层在推荐系统中是核心的两个模块,将推荐过程分成召回层与排序层主要是基于工程上的考虑,其中召回阶段负责将海量的候选集快速缩小为几万到几千的规模;而排序层则负责对缩小后的候选集进行精准排序

  • 召回阶段往往会利用少量的特征简单的模型对大规模的数据集进行快速筛选
  • 排序层一般会使用更多的特征和更加复杂的模型进行精准排序

召回层和排序层的特点:

  • **召回层:**待计算的候选集合大、计算速度快、模型简单、特征较少,尽量让用户感兴趣的物品在这个阶段能够被快速召回,即保证相关物品的召回率
  • **排序层:**首要目标是得到精准的排序结果。需要处理的物品数量少,可以利用较多的特征,使用比较复杂的模型。

2.2 多路召回策略

在召回层设计中,“计算速度”和“召回率”是两个互相矛盾的指标,在同时要照顾这两个指标的情况下,业界主流的召回方法是采用多个简单策略叠加的“多路召回策略”。

zhaohui

所谓的“多路召回”策略,就是指采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用,可以明显的看出,“多路召回策略”是在“计算速度”和“召回率”之间进行权衡的结果。其中,各种简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率接近理想的状态,不至于损伤排序效果。

多路召回的策略其实是跟业务强相关的,比如视频推荐,召回规则可以是“热门视频”、“导演召回”、“演员召回”、“最近上映“、”流行趋势“、”类型召回“等等。

2.3 Embedding召回

Embedding其实是一种思想,主要目的是将稀疏的向量(如one-hot编码)表示转换成稠密的向量。

目前的Embedding策略分为三种:

  • text embedding: 目前使用最多的embedding技术,对于文本特征可以直接使用该技术,对于非文本的id类特征,可以先将其转化成id序列再使用text embedding的技术获取id的embedding再做召回
    • 静态向量:word2vec, fasttext, glove.
    • 动态向量:ELMO, GPT, BERT
  • image embedding: 根据图像或视频特征,用预训练model(提取图像或视频向量特征),然后用于召回。
  • graph embedding: 这个一般是做社交网络相关的推荐,进行推荐的用户与用于之间或者商品之间天然的存在某种复杂的图结构的关系,如何利用图中节点与节点之间的关系对其进行向量化是非常关键的,在这种场景下基于序列的text embedding和基于卷积模型的image embedding都显得力不从心,在这样的背景下Graph Embedding逐渐在推荐系统中流行起来。
    • 有的模型包括Deep Walk, Node2Vec,LINE以及阿里的EGES graph embedding。

2.4 常用召回模型

  • 基于内容召回:使用item之间的相似性来推荐与用户喜欢的item相似的item。
  • 协同过滤:同时使用query和item之间的相似性来进行推荐。
  • 基于FM模型召回:FM是基于矩阵分解的推荐算法,其核心是二阶特征组合。
  • 基于DNN模型召回:利用深度神经网络生成相应的候选集。

2.4.1 基于内容召回

也叫做标签召回,如下图所示,如电影推荐,首先我们根据用户之前的历史行为信息(如点击,评论,观看等),CB会使用item相关特征来推荐给用户与之前喜欢的item类似的item。

cb

内容召回的优点是不需要其他用户的任何数据,因为推荐是针对该用户的。 这使得更容易扩展到大量用户。且模型可以捕获用户的特定兴趣。但是缺点就是由于item的特征表示在某种程度上是手工设计的,因此该技术需要大量领域知识。因此,模型很依赖手工设计特征的好坏。并且该模型只能根据用户的现有兴趣提出建议。换句话说,该模型扩展用户现有兴趣的能力有限。

2.4.2 协同过滤

协同过滤是根据之前的喜好以及兴趣相近的用户选择来给用户推荐物品,仅基于用户的行为数据(评价,购买,下载等),不依赖项的附加信息(自身特征)或用户的附加信息(年龄性别等)。

  • User-Based CF: 要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。
  • Item-Based CF: 要考虑的是物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。
  • Model-Based CF: 目前最主流的协同过滤类型了,所含算法是非常之多的,如矩阵分解、关联算法、聚类算法、深度学习、图模型等等。

协同过滤的优点:

  • 无需领域知识:不需要相关领域知识,因为Embedding是自动学习的。
  • 发掘用户兴趣:该模型可以帮助用户发现新的兴趣点。 系统可能并不知道用户对给定的item的兴趣度,但是模型仍会推荐给他,因为相似的用户有着相同的兴趣点。
  • 很好的初始模型:在某种程度上,该方法仅需要反馈矩阵即可训练矩阵分解模型。 而且该方法不需要上下文特征。 实际上,该方法可以用作多个召回队列中的一个。

缺点:

  • 冷启动问题:模型预测结果是给定的(用户,商品)相应Embedding的点积。因此,如果在训练数据中item从未出现过,则系统也无法计算其Embedding,也无法得到相应的预测结果。此问题通常称为冷启动问题。目前可用来解决冷启动问题的方法是:

    • 利用WALS进行预测。
    • 启发式生成新item的embedding
  • 难以融入query/item的附加特征

2.4.3 基于因子分解机(FM)模型召回

FM算法的核心在于特征组合,以此来减少人工参与特征组合工作。对于FM,其优势可分以下三点:

  1. FM能处理数据高度稀疏场景,SVM则不能;
  2. FM具有线性的计算复杂度,而SVM依赖于support vector。
  3. FM能够在任意的实数特征向量中生效。

fm

其中在召回中使用了极简FM模型,即并不考虑上下文特征。查询离线fm中用户对应的特征embedding,然后将用户对应的n个特征embedding向量累加,形成这个用户的兴趣向量U,这个向量为度和每个特征的维度是相同的。类似也可以把每个物品对应的物品自己和的特征,查询离线FM模型对应的特征embedding向量,然后将m个物品自己和的特征embedding了,形成物品子集合的特征embedding向量累加,形成物品向量l。

极简fm

然后对每个用户以及物品,可以利用步骤一中得方法将每个用户的兴趣向量离线算好,存入在线数据库中比如Redis(用户ID及其对应的embedding),把物品的向量逐一离线算好,存入Faiss(Facebook开源的embedding高效匹配库)数据库中,进行knn索引,然后高效检索。

接下来当用户登陆或者刷新页面时,可以根据用户ID取出其对应的兴趣向量embedding,然后和Faiss中存储的物料embedding做内积计算,按照得分由高到低返回得分Top K的物料作为召回结果。

2.4.4 矩阵分解

可以认为FM是加了特征的矩阵分解(MF),原来用户和物品侧都只有一个id特征,现在用户侧加了年龄、性别、学历等特征,物品侧加了品类、店铺等特征,然后进一步融入到FM模型后,它将所有的特征转化为embedding低维向量表达,然后用户侧的特征和物品侧特征两两矩阵分解,即两两特征embedding的内积,得到特征组合的权重。

2.4.5 基于DNN

矩阵分解的一些限制包括:

  • 使用附加特征(即queryID /itemID以外的其他特征)困难。 因此只能对训练集中存在的用户或item进行推荐。
  • 推荐的相关性。 正如前文所描述的那样,倾向于向所有人推荐热门item,尤其是在使用点积作为相似性度量时。 难以刻画特定的用户兴趣。

深度神经网络(DNN)模型可以解决矩阵分解的这些限制。 DNN可以轻松地融入query特征和item特征(由于网络输入层的灵活性),这可以帮助捕获用户的特定兴趣并提高推荐的相关性。

现在DNN模型都会把最后一层用softmax做输出,把问题转化为多分类问题。

3. 排序

排序是推荐系统的第二阶段,从召回阶段获得少量的商品交给排序阶段,排序阶段可以融入较多特征,使用复杂模型,来精准地做个性化推荐。排序所强调的是快和准,快指的是高效的反馈结果,准指的是推荐结果准确性高。

推荐系统可能具有使用不同来源的多个召回队列,例如:

  • 矩阵分解模型的相关item。
  • 根据各类标签下的用户item。
  • “本地”与“非本地”项目; 也就是说,要考虑地理信息。
  • 热门或流行item。
  • 社交网络; 也就是朋友喜欢或推荐的item。

系统将这些不同的来源组合成一个通用的候选库,然后由单个模型对其进行打分并根据该分数进行排名。

3.1 建模目标

3.1.1 pointwise、pairwise、listwise

为了解决排序整体的能力,现如今排序已经从单一指标转向了多目标排序。目前的排序算法框架有pointwise、pairwise、listwise三类。

ranking_1

上图中x1,x2,... 代表的是训练样本1,2,... 的特征,y1,y2,s1,... 等是训练集的label(目标函数值)。pointwise学习单个样本,如果最终预测目标是一个实数值,就是回归问题,如果目标是概率预测,就是一个分类问题,例如CTR预估。pairwise和listwise分别学习一对有序对和一个有序序列的样本特征,考虑得更加精细。在推荐系统中常用pointwise方法来做排序,它更直观,易于理解,也更简单。

3.1.2 多目标排序

多目标建模中难点在于如何平衡多个建模目标之间的关系,目前的通用做法是将多个q加权或连乘,比如Prob(click) * watch_time,也就是人工的去制定规则,这种方式可以快速见效、简单、快捷,而且便于理解。但⼀个很致命的问题是,人工规则没办法挑选出最优的解。其次,当其中的⼀个因⼦发生变化时,比如值域发生变化,就会导致整体的公式失效。如何系统的去解决这两个问题,是多目标建模中的重点和难点。

Google在2019年发表的一篇讨论youtube的排序问题的文章,提出了一套大规模多目标排序框架应用于Youtube视频推荐,引入MMoE解决多目标学习,以及解决用户隐式反馈中的selection Bias问题。

3.2 样本特征

合适的样本和特征在选取模型前是十分重要的准备工作,一方面样本空间要尽量的去拟合真实数据的分布,并且要符合业务产出逻辑。而特征方面的工作就是特征工程,做得好的数据清洗和ETL,以及特征交叉等等。好的特征工程才能事半功倍。

3.2.1 常见基础特征

用户侧的特征,如用户的性别、年龄、地域、购买力、家庭结构等。

商品侧的特征,如商品描述信息、价格、标签等。

上下文及场景特征,如位置、页面、是否是周末节假日等。

交叉特征,如用户侧特征与商品侧特征的交叉等。

用户的行为特征,如用户点击、收藏、购买、观看等。

3.3 常见模型

推荐系统排序早期都是lr,后续演变成gbdt + lr的方式,再到后来的dnn、fm、wide & deep等。排序目标上,目前业内主要还是pointwise。

3.3.1 LR

lr是比较简单的线性模型,通过学习用户点击行为来构建CTR预估。利用logistic回归构建推荐算法模型,具体模型如下面公式:

log(p1p)=ni=1wiFi\log \left ( \frac{p}{1-p} \right )=\sum_{n}^{i=1}w_{i}F_{i}

其中, pp 是用户喜欢某个标的物的概率; wiw_i 是权重,是需要学习的模型参数; FiF_i 是特征 ii 的值。我们可以通过上述公式计算待推荐标的物的 pp 值。最终我们可以按照 pp 值的大小降序排列来对召回的标的物列表做排序。

3.3.2 LR + GBDT

GBDT(Gradient Boosting Decision Tree)是一种基于迭代思路构造的决策树算法,该算法在实际问题中将生成多棵决策树,并将所有树的结果进行汇总来得到最终答案,该算法将决策树与集成思想进行了有效的结合,通过将弱学习器提升为强学习器的集成方法来提高预测精度。GBDT是一类泛化能力较强的学习算法。

gbdt

2014年Facebook发表了一篇介绍将GBDT+LR(Logistic Regression)模型用于其广告CTR预估的论文,开启了利用GBDT模型应用于搜索、推荐、广告业务的先河。GBDT作为一种常用的树模型,可天然地对原始特征进行特征划分、特征组合和特征选择,并得到高阶特征属性和非线性映射。从而可将GBDT模型抽象为一个特征处理器,通过GBDT分析原始特征获取到更利于LR分析的新特征,这也正是GBDT+LR模型的核心思想——利用GBDT构造的新特征来训练LR模型。

3.3.3 Wide&Deep

Wide&deep

Wide&deep模型最早被Google提出来,并用于Android手机应用商店上APP的推荐排序。目前该算法在国内很多互联网企业得到大规模的采用,有比较好的效果。该模型将传统模型和深度学习模型相结合。wide部分(传统模型,如logistic回归)起记忆(memorization)的作用,即从历史数据中发现item或者特征之间的相关性,deep部分(深度学习模型)起泛化(generalization)的作用,即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合,寻找用户的新偏好。通过将这两个模型结合起来可以更好地在用户的历史兴趣和探索新的兴趣点之间做到平衡。

3.3.4 DeepFM

deepFM

DeepFM 的结构其实很简单:采取Wide & Deep的框架,差异在于将Wide部分的LR替换为了FM,从而自动构造二阶特征叉乘,而非手工设计叉乘。其中,DeepFM的输入可由连续型变量和类别型变量共同组成,且类别型变量需要进行One-Hot编码。而正由于One-Hot编码,导致了输入特征变得高维且稀疏。应对的措施是:针对高维稀疏的输入特征,采用word2vec的词嵌入方式,把高维稀疏的向量映射到相对低维且向量元素都不为零的空间向量中。由上面网络结构图可以看到,DeepFM 包括 FM和 DNN两部分,所以模型最终的输出也由这两部分组成:

y^=sigmoid(yFM+yDNN)\hat{y}=sigmoid(y_{FM}+y_{DNN})

3.4 模型排序效果评估

排序结果的评估主要是两个步骤:

第一步:离线评估

在离线准备好的验证集上进行数据验证,如果效果优于先前的模型数据,则进行第二步,这里的效果包含多个指标,比如准确率、覆盖率、多样性等,在不同阶段侧重的指标也许是不一样的,这个就是产品经理要去把控确定的,当前这一产品阶段侧重点在哪里或者是怎么去取舍,平衡。

第二步:线上实验

直接对于线上用户进行AB分桶实验,先小流量实验一段时间,一般在10天到半个月左右,对比实验组和对照组数据;如果实验数据为正向,则推到更多的用户;如数据持续稳定,则推全到所有用户。

参考文章:

  1. (深入理解推荐系统:召回)[zhuanlan.zhihu.com/p/115690499].

  2. (深入理解推荐系统:排序)[zhuanlan.zhihu.com/p/138235048].

  3. (推荐系统概述)[github.com/datawhalech…]

文章分类
人工智能
文章标签