深入流行推荐引擎第一部分:推荐系统基础

the Fundanmental of Recommendation Systems

这篇博客将探索推荐系统的迷人世界。随着互联网的兴起和智能设备的日益使用,了解用户偏好并提供个性化内容和服务变得比以往任何时候都更重要。网络应用程序可以通过提供个性化服务来保持用户的参与度,这是由推荐引擎实现的。

这些引擎利用用户数据(例如,关注者、推特、图片、喜欢和不喜欢、评级等)来提供个性化推荐。了解用户的品味对于成功推荐商品至关重要,而各种技术(例如,机器学习、统计学、概率和代数(probability, and algebra))都被用来实现这一点。

推荐系统已经成为许多服务和网络应用程序不可或缺的一部分,包括Netflix、亚马逊、领英和YouTube。每项服务都使用独特的技术和算法来分析用户数据,并提供建议。

这篇博客旨在让读者全面了解如何使用各种工具(如机器学习、统计学、概率和代数)来推荐流行的日常应用程序。将介绍推荐系统的基本原理,本课是关于深入流行推荐引擎101的三部分系列的第一节:

  1. 推荐系统基础(本教程)
  2. Netflix电影和剧集推荐系统
  3. 领英求职推荐系统

1. 推荐引擎及其类型

什么是推荐引擎?

当向用户推荐项目时,推荐引擎遵循一个简单的过程。它首先分析给定集合中的每个项目(例如,电影、书籍、视频或音乐)对任何用户的有用性。一旦确定了每个项目的效用,它就会为特定用户推荐最大化整体效用的项目。这是通过找到一个项目来完成的,该项目表示为c^*,在与用户进行比较时具有最高的实用性得分。换句话说,
latex公式可参考

c ∗   =   argmax c ∈ C f ( c , u ) c^* \ = \ \text{argmax}_{c \in C} f(c, u) c = argmaxcCf(c,u)

其中 f ( c , u ) f(c,u) f(c,u) 是衡量项目 c c c 对用户 u u u 的有用性的效用函数。

推荐引擎还可以基于集合C中的前N个项目对特定用户的效用来建议它们的列表。总的来说,推荐引擎可以帮助用户找到他们喜欢并觉得有用的项目。

推荐系统可应用的项目空间相当大,效用函数通常表示预测用户喜欢某个特定项目的可能性的评级。 例如,如果用户喜欢动作惊悚片,推荐的话他可能会喜欢汤姆·克鲁斯的电影。

每个用户都有一个具有各种特征的个人资料(例如,年龄、婚姻状况、观看历史、最近的查询、评级等)。同样,一个项目(例如电影)可以用类型、年份、导演、演员阵容、IMDB评级等特征来表示。效用函数测量用户个人资料和项目特征之间的相似性。创建推荐系统的最大挑战是效用函数,它需要为所有用户项目组合定义。 此外用户和项目空间也在不断增长和变化。这就是机器学习、统计学和代数发挥作用的地方。通过分析用户过去如何与物品互动,可以使用算法来近似效用函数,并做出用户会喜欢的个性化推荐。

基于内容的推荐(Content-Based Recommendations)

基于内容的推荐依赖于根据特定用户对类似项目的偏好来估计项目对特定用户的效用函数。这使得系统能够建议符合用户兴趣的项目,从而更容易发现他们喜欢的新内容。 例如,如果用户喜欢恐怖电影,基于内容的推荐系统会推荐其他恐怖电影。最终,该系统旨在找到符合用户偏好和兴趣的项目,为他们提供个性化推荐。
计算项目c对用户u的效用的最著名的度量之一是余弦相似度。为了理解这一点假设每个项c可以表示为特征向量,
c = ( w 1 , w 2 , … , w m ) c=(w_1,w_2,\dots,w_m) c=w1,w2,,wm)
其中 w i w_i wi 表示第i个特征的权重(例如,电影是否是恐怖片?电影是否由汤姆·克鲁斯主演?)。根据特征的性质,权重 w i w_i wi 可以是二进制的或连续的。给定这些项目特征向量,用户兴趣向量u可以被计算为该用户过去喜欢或评价的项目c_i(总共L个项目)的特征向量的平均值。
u   =   c 1 + c 2 + ⋯ + c L L . u \ = \ \displaystyle\frac{c_1 + c_2 + \dots + c_L}{L}. u = Lc1+c2++cL.
一旦有了用户兴趣向量,就可以使用余弦相似度来计算用户兴趣和新项目 c c c 之间的相似度。

f ( c j , u )   =   ⟨ c j , u ⟩ ∥ c j ∥ ⋅ ∥ u ∥ , f(c_j, u) \ = \ \displaystyle\frac{\langle c_j, u \rangle}{\Vert c_j \Vert \cdot \Vert u \Vert}, f(cj,u) = cjucj,u,

在使用基于内容的推荐时,考虑某些限制是很重要的。由于关于新用户兴趣的信息有限,新用户可能会发现建立用户兴趣向量很困难。这可能会导致提出意义不大的建议。
基于内容的推荐可能与用户已经参与的项目过于相似,导致过度专业化和对新兴趣的探索有限。

协作推荐(Collaborative Recommendations)

与基于内容的推荐不同,协作系统旨在根据其他用户提供的评分来预测项目对用户的有用性。这意味着系统可以建议与给定用户具有相似兴趣的用户喜欢或评价很高的项目。例如,如果两个用户,迈克和约翰,都喜欢恐怖电影,而迈克喜欢《招魂记》。那么,协作系统也会向约翰推荐《招魂》。

协作推荐系统为了预测未评级项目 c 对用户 u 的效用 f ( c , u ) f(c,u) f(c,u) ,定义了一个集合 u = { u 1 , u 2 , … , u K } u=\{u_1,u_2,\dots,u_K\} u={ u1,u2,,uK} ,该集合由与用户 u 最相似并且已经对项目 c 进行了评级的 K 个用户组成。可以通过测量这些用户与给定用户u之间的余弦相似性来找到这些K个最接近的用户。
因此,效用 f ( c , u ) f(c,u) f(c,u) 可以估计为效用 f ( c , u i ) ( u i ∈ u ) f(c,u_i)(u_i\in u) f(cui)(uiu) 的平均值,如下所示:
f ( c , u )   = ∑ i = 1 K f ( c , u ) K f(c, u) \ = \displaystyle\frac{\sum\limits_{i=1}^Kf(c, u)}{K} f(c,u) =Ki=1Kf(c,u)

在这里选择了一个类似average的简单函数来聚合实用程序 f ( c , u i ) f(c,u_i) fcui。一般来说,聚合器可以是任何函数。
与基于内容的推荐一样,协作系统也有其局限性:

  • 由于有关新用户兴趣的信息有限,很难为新用户确定最接近K的用户。因此,建议将没有意义。
  • 新项目定期添加到推荐系统中。协作系统取决于其他用户对某个项目的评分。因此,在大量用户对新项目进行评分之前,推荐系统不能推荐它。
  • 协作系统取决于对感兴趣的项目进行评分的类似用户的可用性。但是,通常情况下,已经获得的评分数量可能大于预测的评分。这使得这些建议无效。这通常被称为稀疏性问题。

混合动力推荐(Hybrid Recommendations)

混合系统在推荐引擎中越来越受欢迎,因为它们提供了基于内容和协作方法的好处,同时避免了它们的一些局限性。这两种方法有不同的组合方式,可分为以下几类:

  • 包含基于内容和协作系统的预测(例如,评级和投票方案的线性组合)
  • 将基于内容的特征结合到协作方法中,反之亦然(例如,协作系统还可以为每个用户维护基于内容的配置文件,该配置文件可以用于为评级不高的项目提供推荐)
  • 一个统一的推荐系统,整合了内容和协作推荐。

2. 评估推荐系统

在评估推荐系统的有效性时,建立使其成为优秀推荐系统的品质至关重要。此外,可以使用各种指标来评估推荐系统,深入研究这些指标并了解如何将其用于评估目的至关重要。

均方根误差(Root Mean Square Error RMSE)

均方根误差(RMSE)是评估推荐引擎的最简单方法之一。RMSE测量项目 c 对用户 u 的预测效用 f ( c , u ) f(c,u) fcu 与用户的实际评级相比有多好。在数学上,
RMSE =   ∑ ( u , c ) ∈ R ( f ( c , u ) − r c u 2 ∣ R ∣ \text{RMSE} = \ \sqrt {\displaystyle\frac{\sum_{(u,c)\in R} (f(c,u)-r_{cu}^2}{\vert R \vert}} RMSE= R(u,c)R(f(c,u)rcu2

其中 r c u r_{cu} rcu 是用户 u 对项目 c 的评分, r 是已经有评分的用户和项目的集合。

Precision@K精度衡量

Precision@K精度衡量机器学习算法的效率。对于推荐系统,Precision@K测量与用户实际相关的前K个推荐的分数。相关推荐是用户可能会喜欢推荐项目的推荐。
假设推荐系统根据用户 u 的实用程序向用户 u 推荐前 K 个项目,其中 C = { C 1 , C 2 , … , C K } {C}=\{C_1,C_2,\dots,C_K\} C={ C1,C2,,CK} 。并且假设集合 C ∗ C^* C 表示与用户 u 实际相关的前 K 个项目(即基本事实推荐)。这个Precision@K则定义为
Precision@K  =   ∣ C ^ ∩ C ∗ ∣ K . \text{Precision@K} \ = \ \displaystyle\frac{\vert\hat{C }\cap C^*\vert}{K}. Precision@K = KC^C.

Recall@K召回衡量

Recall@K召回衡量机器学习系统的有效性。对于推荐系统,Recall@K衡量前K个建议中涵盖的相关项目的比例。
假设推荐系统根据用户 u 的实用程序向用户 u 推荐前 K 个项目,其中${C}=\ {C_1,C_2,\dots,C_K}。并且假设集合 C ∗ C^* C 表示与用户 u 实际相关的前 K 个项目(即基本事实推荐)。Recall@K则定义为
KaTeX parse error: Expected 'EOF', got '}' at position 69: …} \cap C^*\vert}̲.
可以根据准确度召回定义其他几个指标(例如,F评分、ROC(受试者-操作者特征)曲线、AUC(曲线下面积)等)。如下图所示:
在这里插入图片描述

平均倒数排名

假设项目 c ∗ c^* c 是基本事实推荐 c ∗ c^* c 中最相关的项目,并且在推荐引擎提供的前K个推荐中排名r,其中 c = { c 1 , c 2 , … , c K } {c}=\{c_1,c_2,\dots,c_K\} c={ c1,c2,,cK} 。然后,平均倒数排名(MRR)被定义为最相关项 c ∗ c^* c 秩的“乘法逆”:
MRR  =   1 Q ∑ i = 1 Q 1 r i , \text{MRR} \ = \ \displaystyle\frac{1}{Q} \displaystyle\sum_{i=1}^Q \displaystyle\frac{1}{r_i}, MRR = Q1i=1Qri1,
其中Q是为其提供建议的用户数量。

推荐技巧

数据挖掘技术对于揭示数据中的模式和相关性非常有价值。然后可以使用该信息来进行推荐(例如,建议相似的项目或将具有相似兴趣的用户分组)。 图5概述了目前推荐引擎中常用的各种数据挖掘技术,将更详细地研究这些技术中的每一种。
在这里插入图片描述

文本挖掘(Text Mining)

文本挖掘是从文本数据中提取有价值信息的强大工具。这在推荐博客、新闻文章和其他基于文本的内容时尤其有用。 例如,对于基于内容的推荐系统,文本挖掘可以通过分析每一篇文章的底层语义结构来帮助识别和推荐相似的项目。同样,对于协同推荐模型,文本挖掘可以帮助评估用户之间信息数据的语义知识,使系统能够基于相似性做出更准确的项目推荐。

例如,术语频率-逆文档频率(TF-IDF)是基于内容推荐中流行的文本挖掘技术。**TF-IDF算法根据重复次数和整个语料库为文本中的不同关键词分配权重。**它包括以下内容:

  • 术语频率(Term frequency TF)分配的权重与关键字在文本中出现的次数成比例。换句话说,更多的重复意味着关键词在给定的文本中是必不可少的。
  • 逆文档频率(Inverse document frequency IDF)分配的权重与关键字在整个语料库中出现的次数成反比。如果一个关键词出现在大多数文本语料库中,那么它就不那么重要了。

该技术将文本项表示为特征向量,可用于计算与其他项特征向量的余弦相似度。

K最近邻(K-Nearest Neighbors)

K最近邻(KNN)是一种算法,可用于根据距离测量(例如欧几里得距离、余弦相似性或皮尔逊相关性(Euclidean distance, cosine similarity, or Pearson correlation))找到数据点的K个最近点。在协作推荐模型中,KNN算法可以识别与给定用户最接近的K个用户。然后使用这些K个最近邻居的项目评级来向给定用户推荐项目。对于基于内容的推荐,该算法可以为用户先前评级的特定项目找到K个相似项目。

聚类(Clustering)

聚类是一类将数据分离成一组确定聚类的算法,使得相似点位于同一聚类中,而不同点位于不同聚类中。推荐引擎中可以使用几种聚类算法(例如,K-means和谱聚类(spectral clustering))。

例如,K-means的工作原理是首先选择K个随机点作为聚类中心。然后,它将数据中的每个数据点分配给最近的聚类中心。之后,它计算分配给每个聚类的所有数据点的平均值,并将聚类中心移动到该平均值。重复此过程,直到群集中心不再移动为止。

聚类主要用于协作设置,将用户划分为相似的兴趣组。这样,推荐问题就归结为为为集群找到相关项目,而不是单独为每个用户找到相关项目。

矩阵分解(Metric Factorization)

矩阵分解是一种技术,用于通过分解存储在评级矩阵中的用户评价数据来找到将用户信息和偏好表达到同一潜在空间中的变换。奇异值分解(Singular value decomposition SVD)是一种流行的矩阵分解方法,它将用户和所选项目转换到具有相同潜在因素的空间中。

为了理解这一点,假设一个评级矩阵M(大小为M\times n),其条目M(i,j)为1
如果用户i对项目j评分为0,如果未分级。现在,给定这个用户-项目矩阵M,SVD分解该矩阵,从而独立地获得用户矩阵和项目矩阵。SVD将原始矩阵m分解为用户U和项目V矩阵,将用户和项目转换为维度为r的同一潜在因子。

奇异值分解(SVD)在推荐引擎中被广泛使用,通过它们各自的用户和项目矩阵来查找相似的项目和用户。

神经网络

神经网络由于能够捕捉用户项目数据中的复杂模式,在推荐引擎中越来越受欢迎。他们现在可以处理各种数据(例如,语音、文本、图像、表格和图表),使其适用于各种推荐设置。

深度神经网络用于学习用户和项目嵌入,这是表示实体特征的向量。这些嵌入有助于确保相似的实体(例如,用户或项目)在向量空间中具有相似的距离。神经网络还可以同时针对多个目标进行训练,使其成为一种高效的数据挖掘技术。

推荐系统中一个活跃的研究领域是基于土匪的算法(bandit-based algorithm),这是一种强化学习的形式,试图在探索和利用可能性之间取得平衡。这些算法可以考虑与用户满意度相关的多个目标和度量。例如,音乐推荐系统中的一个额外目标可以是为新的和长尾艺术家提供“公平性”。

图神经网络(Graph neural networks GNN)是另一个积极研究的领域,因为它们可以从图中提取信息,捕捉客户和物品之间的互动。GNN比基于序列的神经网络具有优势,因为用户可能喜欢的项目不一定有固定的顺序。

总结

这篇博客介绍了推荐系统的基本原理。推荐系统通过基于用户的兴趣和偏好对用户的项目(例如电影)进行排名来提供个性化。给定一个项目,推荐引擎衡量该项目对用户的有用性或效用。推荐系统的核心挑战是开发效用函数,因为它并不是为用户和项目的所有组合定义的。

根据效用函数的性质,推荐系统可以分为三种类型:

  • 基于内容的

  • 协作的

  • 混合的

    基于内容的推荐系统试图推荐与用户已经喜欢或评价的项目相似的项目。另一方面,协作系统建议与给定用户具有相似兴趣的其他用户评价或喜欢的项目。然而,这两种设置都有缺点(例如,稀疏性、新用户问题、新项目问题、过度专业化等(sparsity, new user problems, new item problems, overspecialization))。混合系统结合了基于内容和协作的方法来避免这些问题。

有几种衡量推荐系统优劣的方法:均方根误差(RMSE)衡量项目对用户的预测效用与用户提供的实际评级相比有多好。Precision@K测量与用户相关的前K个推荐的分数。Recall@K测量前K个建议中包含的相关项目的分数。最后,平均倒数排名(MRR)被定义为最相关项秩的平均“乘法逆”。

在推荐系统中使用各种数据挖掘算法来导出有用的信息(例如数据中的模式和相关性)。这些技术包括:文本挖掘、最近邻、聚类、矩阵分解和神经网络。

  • 文本挖掘在从文本数据中提取有用信息方面很有用。它可以通过对项目进行语义分析来推荐类似的项目。
  • K近邻算法可以识别与给定用户最接近的K个用户。然后可以使用这些K个最近邻居的项目评级来向给定用户推荐项目。
  • 聚类主要用于协作设置,将用户划分为相似的兴趣组。
  • 矩阵分解是一种技术,用于通过分解存储在评级矩阵中的用户评价数据来找到将用户信息和偏好表达到同一潜在空间中的变换。
  • 神经网络可以捕捉用户项目数据中的复杂模式,并处理各种数据(例如,语音、文本、图像、表格、图表等)。

参考

猜你喜欢

转载自blog.csdn.net/qq_40985985/article/details/131477055
今日推荐