A. 推荐算法综述
推荐系统的目的是通过推荐计算帮助用户从海量的数据对象中选择出用户最有可能感兴趣的对象。涉及三个基本内容:目标用户、待推荐项目以及推荐算法,基本流程为:描述为用户模型构建、项目模型建立以及推荐算法处理三个基本流程;
为了能够为用户提供准确的推荐服务,推荐系统需要为用户构建用户模型,该模型能够反映用户动态变化的多层次兴趣偏好,有助于推荐系统更好的理解用户的特征和需求。构建用户模型通常需要经历三个流程:用户数据收集,用户模型表示以及用户模型更新。
(1)用户数据收集:用户数据是用户模型构建的基础,用户数据收集的方式一般有显示方式获取和隐式方式获取两种。
显示方式获取的数据是用户特征属性和兴趣偏好的直接反映,所获得的信息数据是较为客观全面的,比如用户在注册时包含的性别、年龄等信息可以直接表示出用户的基本人口学信息和兴趣信息,用户对项目的评分可以反映出用户的偏好。但显示获取的方式最大的缺陷是其实时性较差,并且具有很强的侵袭性。
隐式方式获取用户数据是在不干扰用户的前提下,采集用户的操作行为数据,并从中挖掘出用户的兴趣偏好。用户的很多操作行为都能反映出用户的喜好,比如用户浏览网页的速度、用户查询的关键字等,推荐系统在不影响用户使用系统的情况下,通过行为日志挖掘出用户的偏好。隐式获取方式由于具有较好的实时性和灵活性和较弱的侵袭性,己经成为推荐系统中主要的用户数据采集方式。
(2)用户模型表示:用户模型是从用户数据中归纳出的推荐系统所理解的用户兴趣偏好的结构化形式。
a 基于内容关键词表示;
b 基于评分矩阵表示;
(3)用户模型更新:推荐系统面临的问题之一是兴趣漂移,兴趣漂移的根本原因在于用户的兴趣会随时间发生改变。为了使用户模型够准确的代表用户的兴趣,推荐系统需要根据最新的用户数据对用户模型进行更新。
目前项目模型主要通过基于内容和基于分类这两类方式来建立。基于内容的方式是以项目本身内容为基础,向量空间模型表示是目前御用最为广泛的基于内容的方式。
基于分类的方式是根据项目的内容或者属性,将项目划分到一个或者几个类别中,利用类别信息来表示项目,这种方法可以很方便地将项目推荐给对某一类别感兴趣的用户。常见的分类算法有朴素贝叶斯算法和KNN分类算法等。
推荐系统实现的核心是其使用的推荐算法。针对不同的使用环境及其系统的数据特征,选取不同的推荐算法,可以在本质上提高推荐系统的推荐效果。根据不同的分类标准,推荐算法出现了有很多不同的分类方法,本文采用了比较普遍的分类方法。
推荐系统通常被分为基于内容的推荐算法、协同过滤推荐算法以及混合模型推荐算法三大类。
基于内容的推荐算法,其本质是对物品或用户的内容进行分析建立属性特征。系统根据其属性特征,为用户推荐与其感兴趣的属性特征相似的信息。算法的主要思想是将与用户之前感兴趣的项目的内容相似的其他项目推荐给用户。
CBF(Content-based Filter Recommendations)算法的主要思想是将与用户之前感兴趣的项目的内容相似的其他项目推荐给用户,比如用户喜欢Java开发的书籍,则基于内容过滤算法将用户尚未看过的其他Java开发方面的书籍推荐给用户。因此,该推荐算法的关键部分是计算用户模型和项目模型之间的内容相似度,相似度的计算通常采用余弦相似性度量。
基于内容的推荐过程一般分为以下三个模块:
(1)特征提取模块:由于大多数物品信息是非结构化的,需要为每个物品(如产品、网页、新闻、文档等)抽取出一些特征属性,用某一恰当的格式表示,以便下一阶段的处理。如将新闻信息表示成关键词向量,此种表示形式将作为下一模块(属性特征学习模块)的输入。
(2)特征学习模块:通过用户的历史行为数据特征,机器学习出用户的兴趣特征模型。本模块负责收集代表用户喜好的数据信息,并泛化这些数据,用于构建用户特征模型。通常使用机器学习的泛化策略,来将用户喜好表示为兴趣模型。
(3)推荐模块:该模块利用上一阶段得到的用户特征模型,通过对比用户兴趣模型与带推荐物品的特征相似度,为用户推荐与其兴趣相似度较高的物品,从而达到个性化推荐的目的。该模块一般采用计算用户兴趣向量与待推荐物品特征向量的相似度来进行排序,将相似度较高的物品推荐给相应用户。计算相似度有多种方法,如皮尔逊相关系数法、夹角余弦法、Jaccard相关系数法等。
协同过滤算法(Collaborative Filtering)是于内容无关的,即不需要额外获取分析用户或物品的内容属性特征。是基于用户历史行为数据进行推荐的算法。其通过分析用户与物品间的联系来寻找新的用户与物品间的相关性。
该算法算法通常有两个过程,一个过程是预测,另一个过程是推荐。主流的协同过滤算法包括三种:基于用户的协同过滤(User-Based Collaborative Filtering,UBCF)、基于项目的协同过滤(Item-Based Collaborative Filtering, IBCF)和基于模型的协同过滤(Model-Based Collaborative Filtering, MBCF)
(1)基于用户的协同过滤算法
基于用户的协同过滤推荐算法,先通过用户历史行为数据找到和用户u相似的用户,将这些用户感兴趣的且u没有点击过的物品推荐给用户。
算法主要包括以下两个步骤:
(1)找到与目标用户喜好相似的邻居用户集合。
(2)在邻居用户集合中,为用户推荐其感兴趣的物品。
UBCF的基本思想是将与当前用户有相同偏好的其他用户所喜欢的项目推荐给当前用户。一个最典型的例子就是电影推荐,当我们不知道哪一部电影是我们比较喜欢的时候,通常会询问身边的朋友是否有好的电影推荐,询问的时候我们习惯于寻找和我们品味相同或相似的朋友。
(2)基于物品的协同过滤算法
基于物品的协同过滤算法(Item-based Collaborative Filtering)其主要思想是,为用户推荐那些与他们之前喜欢或点击过的物品相似的物品。不过基于物品的协同过滤算法并不是利用物品的内容属性特征来计算物品之间的相似度的。该类算法是利用用户的历史行为数据计算待推荐物品之间的相似度。在该类算法中,如果喜欢物品A的用户大都也喜欢物品B,那么就可以认为物品A和物品B之间的相似度很高。
算法分为以下两个步骤:
(1)根据用户历史行为数据,计算物品间的相似度。
(2)利用用户行为和物品间的相似度为用户生成推荐列表。
IBCF算法是亚马逊在2003年发表的论文中首次提出,该算法的基本思想是根据所有用户的历史偏好数据计算项目之间的相似性,然后把和用户喜欢的项目相类似的并且用户还未选择的其他项目推荐给用户,例如,假设用户喜欢项目a,则用户喜欢与项目a高度相似且还未被用户选择的项目b的可能性非常大,因此将项目b推荐给用户。
UBCF和IBCF都属于基于内存的协同过滤算法,这类算法由于充分发挥了用户的评分数据,形成全局推荐,因此具有较高的推荐质量。但随着用户和项目的规模增长,这类算法的计算时间大幅上升,使得系统的性能下降。针对该问题,研究人员提出将数据挖掘中的模型和CF算法结合,提出了基于模型的协同过滤算法(MBCF) 。
MBCF算法利用用户历史评分数据建立模型,模型建立的算法通常有奇异值分解、聚类算法、贝叶斯网络、关联规则挖掘等,且通常是离线完成。由于MBCF通常会对原始评分值做近似计算,通过牺牲一定的准确性来换取系统性能,因此MBCF的推荐质量略差于UBCF和IBCF。
由于基于内容的推荐算法和协同过滤推荐算法都有其各自的局限性,混合推荐算法应运而生。混合推荐算法根据不同的应用场景,有多
种不同的结合方式,如加权、分层和分区等。
目前使用的混合推荐算法的思想主要可以分成以下几类:
(1)多个推荐算法独立运行,获取的多个推荐结果以一定的策略进行混合,例如为每一个推荐结果都赋予一个权值的加权型混合推荐算法和将各个推荐结果取TOP-N的交叉混合推荐算法。
(2)将前一个推荐方法产出的中间结果或者最终结果输出给后一个推荐方法,层层递进,推荐结果在此过程中会被逐步优选,最终得到一个精确度比较高的结果。
(3)使用多种推荐算法,将每种推荐算法计算过程中产生的相似度值通过权重相加,调整每个推荐算法相似度值的权重,以该混合相似度值为基础,选择出邻域集合,并结合邻域集合中的评估信息,得出最优的推荐结果。
BP (Back Propagation)神经网络是目前应用最广泛的神经网络模型之一,是一种按误差逆传播算法训练的多层前馈网络。
BP神经网络模型包括输入层、隐藏层和输出层,每一层由一个或多个神经元组成,其结构图如图2-3所示。BP神经网络拥有很强的非线性映射能力和自学习、自适应能力,网络本身结构的可变性,也使其十分灵活,一个三层的BP神经网络能够实现对任意非线性函数进行逼近。
BP神经网络的训练过程通常分为3个过程,依次分别为数据初始化过程、正向推演计算过程以及反向权重调整过程。数据初始化是BP神经网络能够进行有效训练的前提,该过程通常包括输入数据进行归一化处理和初始权重的设置;正向推演计算是数据沿着网络方向进行推演计算;反向权重调整则是将期望输出和网络的实际输出进行对比,从输出层开始,向着输入层的方向逐层计算各层中各神经元的校正差值,调整神经元的权重。正向推演计算和反向权重调整为对单个训练样本一次完整的网络训练过程,经过不断的训练调整,网络的实际输出越来越趋近于期望输出,当网络输出到达预期目标,整个训练过程结束。
TF-IDF(Term Frequency-Inverse Document Frequency,词频一逆文档)是文本处理中常用的加权技术,广泛应用于信息检索、搜索引擎等领域。
TF-IDF的主要思想是:如果一个关键词在文档中出现的频率很高,而在其他文档中出现次数较少,则该关键词被认为具有较强的代表性,即该关键词通过TF-IDF计算后有较高的权重。
TextRank算法,是一种用于文本关键词排序的算法,页排序算法PageRank。
PageRank基本思想是将每个网页看成一个节点,网页中的链接指向看成一条有向边,一个网页节点的重要程度取决于链接指向该网页节点的其他节点的数量和重要权值,该过程描述如下:让每一个网页对其所包含的链接指向的网页进行迭代投票,每次迭代投票过程中票的权重取决于网页当前拥有的票数,当投票结果收敛或者达到指定的迭代次数时,每个网页所获得票数即为网页重要程度权值。
TextRank算法相比于TF-IDF最大的优点是TextRank是一种无监督的学习,因此不会受限于文本的主题,并且无需大规模的训练集,可以针对单一文本进行快速的关键词的权重计算。
B. 推荐算法简介
在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情;作为信息生产者, 如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。推荐系统就是解决这一矛盾的重要工具。推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息 生产者的双赢。和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用 户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息 个性化推荐的成功需要两个条件。第一是存在 信息过载 ,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐。第二用 户大部分时候没有特别明确的需求 ,因为用户没有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。
一个完整的推荐系统一般存在3个参与方:用户、物品提供者和提供推荐系统的网站。以图书推荐为例, 首先,推荐系统需要满足用户的需求,给用户推荐那些令他们感兴趣的图书。其次,推荐系统要让各出版社的书都能够被推荐给对其感兴趣的用户,而不是只推荐几个大型出版社的书。最后, 好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加 用户和网站的交互,提高网站的收入。因此在评测一个推荐算法时,需要同时考虑三方的利益, 一个好的推荐系统是能够令三方共赢的系统。
推荐系统中,主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。
2.1 离线实验
离线实验的方法一般由如下几个步骤构成: (1) 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集; (2) 将数据集按照一定的规则分成训练集和测试集; (3) 在训练集上训练用户兴趣模型,在测试集上进行预测; (4) 通过事先定义的离线指标评测算法在测试集上的预测结果。
从上面的步骤可以看到,推荐系统的离线实验都是在数据集上完成的,也就是说它不需要一个实际的系统来供它实验,而只要有一个从实际系统日志中提取的数据集即可。这种实验方法的 好处是不需要真实用户参与,可以直接快速地计算出来,从而方便、快速地测试大量不同的算法。它的主要缺点是无法获得很多商业上关注的指标,如点击率、转化率等,而找到和商业指标非常相关的离线指标也是很困难的事情
2.2 用户调查
3.3 在线实验
在完成离线实验和必要的用户调查后,可以将推荐系统上线做 AB测试 ,将它和旧的算法进行比较。 AB测试 是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组用户采取不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法的好坏。 AB测试的优点是可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。 AB测试的缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用 AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。其次, 一个大型网站的AB测试系统的设计也是一项复杂的工程。
一般来说,一个新的推荐算法最终上线,需要完成上面所说的3个实验。 1)首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。 2)然后,需要通过用户调查确定它的用户满意度不低于现有的算法。 3)最后,通过在线的AB测试确定它在我们关心的指标上。
本节将介绍各种推荐系统的评测指标。这些评测指标可用于评价推荐系统各方面的性能。这 些指标有些可以定量计算,有些只能定性描述,有些可以通过离线实验计算,有些需要通过用户 调查获得,还有些只能在线评测。
(1) 用户满意度
用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。
在在线系统中,用户满意度主要通过一些 对用户行为的统计得到 。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以 利用购买率度量用 户的满意度 。此外,有些网站会通过设计一些用户 反馈界面收集用户满意度 。比如在视频网站中,都有对推荐结果满意或者不满意的 反馈按钮 ,通过统计两种按钮的单击情况就可以度量系统的用户满意度。更一般的情况下,我们可以用 点击率、用户停留时间和转化率等指标度量 用户的满意度。
(2) 预测准确度
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标
在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。 预测准确度指标有分为以下几种:
评分预测:
预测用户对物品评分的行为成为评分预测,在评分预测中,预测准确度一般通过均方根误差RMSE和平均绝对误差MAE计算,对于测试集中的一个用户u和物品i,令[图片上传失败...(image-62a797-1560412790460)] 是用户u对物品i的实际评分,而[图片上传失败...(image-28cfbc-1560412790460)] 是推荐算法给出的预测评分,那么RMSE定义为:
其中T为样本个数
MAE采用绝对值计算预测误差,它的定义为:
TopN推荐
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。 令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:
推荐结果准确率定义:
(3) 覆盖率
覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合U,推荐系统给每个用户推荐一个长度为N的物品集合R(u)。那么推荐系统的覆盖率可以通过下面的公式计算:
I为总物品数
此外,从上面的定义也可以看到,热门排行榜的推荐覆盖率是很低的,它只会 推荐那些热门的物品,这些物品在总物品中占的比例很小。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。
但是上面的定义过于粗略。覆盖率为100%的系统可以有无数的物品流行度分布。为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的 物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。因此, 可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比 较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。 在信息论和经济学中有两个着名的指标可以用来定义覆盖率。第一个是信息熵:
其中:n代表推荐列表中物品类别个数,p(i)代表每个类别的所占的比率
第二个指标是基尼系数:
(4) 多样性
为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。多样性推荐列表的好处用一句俗话表示就是(不在一棵树上吊死)。尽管用户的兴趣在较长的时间跨度中是一样的。但具体到用户访问推荐系统的某一时刻,其兴趣往往是单一的,那么如果推荐列表只能覆盖用户的一个兴趣点,而这个兴趣点不是用户这个时刻的兴趣点,推荐结果就不会让用户满意。反之如果推荐列表表较多样,覆盖用户绝大多数的兴趣点,那么久会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。
多样性描述了推荐列表中物品两两之间的不相似性,因此,多样性和相似性是对应的。假设s(i, j) ∈Î[0,1] 定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:
而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:
(5) 新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中 实现新颖性 的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。比如在一个视 频网站中,新颖的推荐不应该给用户推荐那些他们已经看过、打过分或者浏览过的视频。 评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越 可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
(6) 惊喜度
惊喜度(serendipity)是最近这几年推荐系统领域最热门的话题。如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。
(7) 信任度
度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。 提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度(transparency), 而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用 户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。其次是考虑用户的社交网络 信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的 好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任
(8) 实时性
在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效 性时就将它们推荐给用户。 推荐系统的实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的 行为变化。实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。这主要考验了推 荐系统处理物品冷启动的能力。
(9) 健壮性
健壮性(即robust,鲁棒 性)指标衡量了一个推荐系统抗击作弊的能力。算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法 给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后 利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表 的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算 法比较健壮
(10) 商业目标
很多时候,网站评测推荐系统更加注重网站的商业目标是否达成,而商业目标和网站的盈利模式是息息相关的
(11) 总结
上一节介绍了很多评测指标,但是在评测系统中还需要考虑评测维度,比如一个推荐算法, 虽然整体性能不好,但可能在某种情况下性能比较好,而增加评测维度的目的就是知道一个算法 在什么情况下性能最好。这样可以为融合不同推荐算法取得最好的整体性能带来参考。
一般来说,评测维度分为如下3种。 1) 用户维度 :主要包括用户的人口统计学信息、活跃度以及是不是新用户等。 2) 物品维度 :包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。 3) 时间维度 :包括季节,是工作日还是周末,是白天还是晚上等。 如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能帮我们全面地了解推 荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。
C. 推荐系统论文阅读(十)-基于图神经网络的序列推荐算法
论文:
论文地址: https://arxiv.org/abs/1811.00855
论文题目:《Session-based Recommendation with Graph Neural Networks》SR-GNN
github: https://github.com/CRIPAC-DIG/SR-GNN
基于会话的推荐一般是将序列会话建模,将整个session进行编码,变成一个隐向量,然后利用这个隐向量进行下一个点击预测。但是这种方法没有考虑到item直接复杂的转换(transitions)关系,也就是item之间在点击的session中除了时间顺序外还有复杂的有向图内的节点指向关系,所以之前的方法不足以很好的对点击序列进行建模。
现有基于会话的推荐,方法主要集中于循环神经网络和马尔可夫链,论文提出了现有方法的两个缺点:
1)当一个session中用户的行为数量十分有限时,这些方法难以获取准确的用户行为表示。如当使用RNN模型时,用户行为的表示即最后一个单元的输出,论文认为只有这样并非十分准确。
2)根据先前的工作发现,物品之间的转移模式在会话推荐中是十分重要的特征,但RNN和马尔可夫过程只对相邻的两个物品的 单向转移关系 进行建模,而忽略了会话中其他的物品。
为了克服上述缺陷,本文提出了用图神经网络对方法对用户对session进行建模:
下面具体介绍怎么进行图序列推荐
V = {v1,v2...vm}为全部的item,S = { }为一个session里面按时间顺序的点击物品,论文的目标是预测用户下一个要点击的物品vs,n+1,模型的任务是输出所有item的预测概率,并选择top-k进行推荐。
我们为每一个Session构建一个子图,并获得它对应的出度和入度矩阵。
假设一个点击序列是v1->v2->v4->v3,那么它得到的子图如下图中红色部分所示:
另一个例子,一个点击序列是v1->v2->v3->v2->v4,那么它得到的子图如下:
同时,我们会为每一个子图构建一个出度和入度矩阵,并对出度和入度矩阵的每一行进行归一化,如我们序列v1->v2->v3->v2->v4对应的矩阵如下:
这个矩阵里面的值是怎么计算的呢?下面讲一下:
看左边的出度矩阵,第一行为 0 1 0 0 ,代表着v1->v2,因为v1,只有一个指向的item,所以为1;看第二行,0 0 1/2 1/2,因为v2有指向v3和v4的边,所以进行归一化后每一个值都变成了1/2。入度矩阵的计算方法也是一样的,就不再说了。
本文采用的是GRU单元进行序列建模,将图信息嵌入到神经网络中,让GRU充分学习到item之间的关系,传统的GRU只能学到相邻的两个物品之间的关系,加入图信息后就能学到整个session子图的信息。
计算公式如下:
为了刚好的理解这个计算过程,我们还是使用之前那个例子:v1->v2->v3->v2->v4来一步步分析输入到输出的过程。
(1) 是t时刻,会话s中第i个点击对应的输入, 是n✖️2n的矩阵,也就是会话子图的完整矩阵,而 是其中一行,即物品vi所对应的那行,大小为1✖️2n,n代表序列中不同物品的数量。
如果按照例子来看,如果i取2,那么 为 [0 0 1/2 1/2 1/2 0 1/2 0]
进一步的,可以把 :拆解为[ , ]
(2) 可以理解为序列中第i个物品,在训练过程中对应的嵌入向量,这个向量随着模型的训练不断变化,可以理解为隐藏层的状态,是一个d维向量。
(3) H是d*2d的权重向量,也可以看作是一个分块的矩阵,可以理解为H=[Hin|Hout],每一块都是d*d的向量。
那么我们来看看计算过程:
1)[ ..., ] ,结果是d * n的矩阵,转置之后是n*d的矩阵,计作
2) : H相当于[ ],即拆开之后相乘再拼接,因此结果是一个1 * 2d的向量。
上面就是完整的第i个点击的输入的计算过程,可以看到,在进入GRU计算之前,通过跟As,i矩阵相乘,把图信息嵌入到了神经网络中取,加深了神经网络学习到的item之间的交互信息。
此外,就是GRU的计算过程了,跟原始的GRU不一样的地方在于输入从xt变成了嵌入了图信息的as,i。
通样也有更新门和重置门,计算方法跟原始GRU一模一样。
这里的 其实就是相当于原始gru中的 ,只不过在SR-GNN里面,进行一轮运算的时候i是没有变化,相当于每个物品单独进去GRU进行计算,得到自己的向量,也就是说在GRU的计算过程中, 是不断变化的,看一下源码更易于理解:
hidden就是公式里面的 ,在gru的每一个step计算中都会进行更新,这里我有个疑问,如果所有item的hidden都更新的话,那么应该是整个序列中所有的item并行进入GRU中进行计算,每一个step都得到自己的vector,当每个item的vector更新后,下一个step就重新根据新的 计算 ,接着计算下一个step。
计算过程大概就是下面这样:
这里有四个GRU并行计算,没次更新自己的hidden状态,输入则考虑所有的hidden和图信息。
从上面的图看来,每一个item都要进行T个step得到自己的item-vec,所以经过T个step后,我们就得到了序列中所有item的向量,即:
图中用蓝色框框画出来的向量,有了这些向量后,我们怎么得到预测结果呢?这就引入了下一个问题。
观察上面的模型结构,我们看到attention,没错,我们认为一个session中的这些item-vec并不都对预测结果产生影响,有些item对结果影响很大,有些影响很小,所以我们进行了加权求和。同时,论文认为session对最后一个item-vec,s1=vn是重要的,所以单独拿出来:
公式(6)就是简单的attention操作,其实从公式上来看就是计算每个vi跟最后一个向量vn的权值,然后进行加权求和。
在最后的输出层,使用sh和每个物品的embedding进行内积计算,这里vi应该是item的embedding层出来的向量,而不是后面一直更新的hidden:
最后通过一个softmax得到最终每个物品的点击概率:
损失函数为交叉熵损失函数:
从数据上来看,SR-GNN超过了经典的GRU4REC,这也说明了图信息的嵌入能带来更好的推荐效果。
本论文很巧妙的将图信息嵌入的神经网络中,更高地让GRU学习到每个item之间的关系,不再局限于相邻的物品之间进行学习。近年来,图神经网络的思想和方法屡屡被用在推荐系统中,学好图神经网络应该是推荐系统的下一个热潮。
D. 推荐算法有哪些
推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西。
基于协同过滤的推荐
基于用户的协同过滤算法: 基于一个这样的假设“跟你喜好相似的人喜欢的东西你也很有可能喜欢。”所以基于用户的协同过滤主要的任务就是找出用户的最近邻居,从而根据最近邻 居的喜好做出未知项的评分预测。这种算法主要分为3个步骤:
1、用户评分。可以分为显性评分和隐形评分两种。显性评分就是直接给项目评分(例如给网络里的用户评分),隐形评分就是通过评价或是购买的行为给项目评分 (例如在有啊购买了什么东西)。
2、寻找最近邻居。这一步就是寻找与你距离最近的用户,测算距离一般采用以下三种算法:1.皮尔森相关系数。2.余弦相似性。3调整余弦相似性。调整余弦 相似性似乎效果会好一些。
3、推荐。产生了最近邻居集合后,就根据这个集合对未知项进行评分预测。把评分最高的N个项推荐给用户。 这种算法存在性能上的瓶颈,当用户数越来越多的时候,寻找最近邻居的复杂度也会大幅度的增长。
组合推荐
在组合方式上,有研究人员提出了七种组合思路:
1、加权(Weight):加权多种推荐技术结果。
2、变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。
3、混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。
4、特征组合(Feature combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。
5、层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步作出更精确的推荐。
6、特征扩充(Feature augmentation):一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。
7、元级别(Meta-level):用一种推荐方法产生的模型作为另一种推荐方法的输入。
E. 推荐系统的研究主要包括哪些方面
推 荐系统的研究主要包括以下几个方面:
(1)用户信息获取和建模。
早期的推荐系统只需获取简单的用户信息,随着推荐系统 发展, 推荐系统由简单的信息获取转变为和用户交互的系统, 需要考虑用户多兴趣和用户兴 趣转变的情况,将数据挖掘应用到用户信息获取中,挖掘用户的隐性需求。
(2)推荐算法研究。
要实现被顾客接受和认可的个性化推荐,设计准确、高效率的个 性化推荐算法是核心。基于内容的推荐和协同过滤是最主要的两种。为了克服各自的缺点, 可以将各种推荐方法混合使用,以提高推荐精度和覆盖率。同时,信息获取和人工智能,以 及模糊推荐等相关领域的引入扩宽了推荐算法的思路。
(3)推荐系统的评价问题。
要使推荐系统为广大用户所接受,必须对推荐系统作出客 观综合的评价。 推荐结果的准确性和可信性是非常重要的两个方面。 如何对推荐结果的准确 性进行判定, 如何把推荐结果展示给用户以及如何获取用户对推荐结果的评价都是需要深入 研究的问题。
(4) 推荐系统的应用和社会影响研究。
需要建立推荐系统在其他应用领域的应用框架, 研究如何与企业其它信息系统的集成。
F. 个性化推荐算法的四大策略02
在复杂的推荐系统中,推荐算法作为其最核心、最关键的部分,很大程度上决定了推荐系统性能的好坏,且重点体现在数据决策层。
在个性化推荐系统中,简单推荐策略主要分为:基于热门推荐推荐、基于基本信息推荐、基于内容推荐、基于关联规则推荐。
热门推荐,顾名思义就是使用统计的方法将最热门的物品进行推荐,越热门的物品被点击的可能性越大。
基于基本信息推荐是根据用户的基本信息如:领域、职位、工作年龄、性别和所在地等给用户推荐感兴趣或者相关的内容,比如年龄-关联电影表、收入-关联商品类型表,性别-文章关联表等等。
因为基于热门推荐与基于基本信息推荐使用比较简单,所以这两个推荐策略应用比较广泛。
基于内容推荐是指(Content Based Recommandation)利用用户和物品的相关信息,例如前述用户和物品画像信息及用户对物品的行为构建的模型,例如浏览、点击、打电话、收藏、评论、下单等。内容推荐算法根据用户行为推断用户偏好,并为用户推荐相同偏好的物品。
基于内容推荐的计算过程一般分为四个步骤:
由这些共性属性查找其他物品,并实施推荐。
基于关联规则推荐(Association Rules)是通过数据挖掘的方法找到物品之间的相关关系,再进行标签推荐,比如大家所熟知的“啤酒”和“尿布”,就是某超市工作人员通过对顾客的购物清单进行分析后,才发现了啤酒和尿布之间的共现关系。
而衡量物品之间的关联性时,主要看支持度、置信度和提升度这三大指标。
支持度表示 AB 共现情况占所有情况的比例,则有表达式 Support(A->B)=P(A&B),它往往用来评估搜索词当中该词出现的概率。
置信度表示 AB 共现情况占 A 情况的比例,其表达式为 Confidence(A->B)=P(A&B)/P(A)。
提升度表示以 A 为前提下 B 出现的情况与 B 情况的比例,表达式为 Lift(A->B)=P(B|A)/P(B) ,它往往用来评估推荐效果。
在计算 Lift(A->B) 时,主要出现以下三种情况:
Lift(A->B)>1 时,说明搜索 A 时推荐 B 比直接推荐 B 的效果更好
Lift(A->B)=1 时,说明搜索 A 和搜素 B 属于独立事件,二者没什么关系
Lift(A->B)<1 时,说明搜索 A 和搜索 B 负相关,搜索 A 还不如不去推荐 B。
G. 推荐系统产品和算法概述丨产品杂谈系列
本文主要是对最近所学的推荐系统的总结,将会简单概述非个性化范式、群组个性化范式、完全个性化范式、标的物关联标的物范式、笛卡尔积范式等5种常用的推荐范式的设计思路。
许多产品的推荐算法都依赖于三类数据:标的物相关的描述信息(如推荐鞋子,则包括鞋子的版型、适用对象、材质等信息、用户画像数据(指的是用户相关数据,如性别、年龄、收入等)、用户行为数据(例如用户在淘宝上的浏览、收藏、购买等)。这三类数据是推荐模型的主要组成部分,除此之外一些人工标注的数据(例如为商品人工打上标签)、第三方数据也能够用于补充上述的三类数据。
服务端在有以上数据的基础上,就可以从三个维度进行推荐:
根据个性化推荐的颗粒度,我们可以将基于用户维度的推荐分为非个性化推荐、群组个性化推荐及完全个性化推荐三种类型。
非个性化推荐指的是每个用户看到的推荐内容都是一样的 在互联网产品中,我们最常见的非个性化推荐的例子是各种排行榜,如下图是酷狗音乐的排行榜推荐,通过各个维度计算各类榜单,不管是谁看到这个榜单,上面的排序和内容都是一致的。
群组个性化推荐指的是将具有相同特征的用户聚合成一组,同一组用户在某些方面具备相似性,系统将为这一组用户推荐一样的内容 。这种推荐方式是很多产品进行用户精细化运营时会采用的方式,通过用户画像系统圈定一批批用户,并对这批用户做统一的运营。例如音乐软件的推荐播放,若以摇滚乐为基准将一批用户聚合成组,则为这些用户提供的每日推荐歌单是相同的内容和顺序,但与另一组爱听民谣的用户相比,两组用户看到的每日推荐内容将是不同的。
完全个性化指的是为每个用户推荐的内容都不一样,是根据每一位用户的行为及兴趣来为用户做推荐,是当今互联网产品中最常用的一种推荐方式 。大多数情况下我们所说的推荐就是指这种形式的推荐,例如淘宝首页的“猜你喜欢”就是一个完全个性化的推荐,千人千面,每个人看到的推荐尚品都不一样。
完全个性化可以只基于用户行为进行推荐,在构建推荐算法时只考虑到用户个人的特征和行为 ,不需要考虑其他用户,这也是最常见的内容推荐方式。除此之外, 还可以基于群组行为进行完全个性化推荐,除了利用用户自身的行为外,还依赖于其他用户的行为构建推荐算法模型 。例如,用户属性和行为相似的一群用户,其中90%的用户买了A商品后也买了B商品,则当剩下的10%用户单独购买B商品时,我们可以为该用户推荐商品A。
基于群组行为进行的完全个性化推荐可以认为是全体用户的协同进化,常见的协同过滤、基于模型的推荐等都属于这类推荐形式。
基于标的物的推荐指的是用户在访问标的物详情页或者退出标的物详情页时,可以根据标的物的描述信息为用户推荐一批相似的或者相关的标的物,对应的是最开始提到的“标的物关联标的物范式” 。如下图酷狗的相似歌曲推荐,
除了音乐产品外,视频网站、电商、短视频等APP都大量使用基于标的物维度的推荐。如下图便是YouTube基于标的物关联标的物的推荐。在YouTube上我观看一个周杰伦的音乐视频时,YouTube在该页面下方为我推荐更多与周杰伦有关的视频。
基于用户和标的物交叉维度的推荐指的是将用户维度和标的物维度结合起来,不同用户访问同一标的物的详情页时看到的推荐内容也不一样,对应的是开头提到的笛卡尔积推荐范式。 拿酷狗音乐对相似歌曲的推荐来举例,如果该推荐采用的是用户和标的物交叉维度的推荐的话,不同用户看到的“没有理想的人不伤心”这首歌曲,下面的相似歌曲是不一样的。拿淘宝举例的话,一样是搜索“裤子”这一关键词,不同的人搜索得到的搜索结果和排序是不同的,可能用户A搜索出来优先展示的是牛仔裤,而用户B优先展示的是休闲裤,淘宝将结合搜索关键词与用户个人的历史行为特征展示对应的搜索结果和排序。
对于基于笛卡尔积推荐范式设计的推荐系统来说,由于每个用户在每个标的物上的推荐列表都不一样,我们是没办法是先将所有组合计算出来并储存(组合过多,数量是非常巨大的),因此对于系统来说,能否在用户请求的过程中快速地为用户计算个性化推荐的标的物列表将会是一个比较大的挑战,对于整个推荐系统的架构也有更高的要求,因此在实际应用中,该种推荐方式用的比较少。
非个性化范式指的是为所有用户推荐一样的标的物列表,常见的各种榜单就是基于此类推荐规则,如电商APP中的新品榜、畅销榜等。排行榜就是基于某个规则来对标的物进行排序,将排序后的部分标的物推荐给用户。例如新品榜是按照商品上架的时间顺序来倒序排列,并将排序在前列的产品推荐给用户。而畅销榜则是按照商品销量顺序降序排列,为用户推荐销量靠前的商品。
根据具体的产品和业务场景,即使同样是非个性化范式推荐,在具体实施时也可能会比较复杂。例如在电商APP中畅销榜的推荐可能还会将地域、时间、价格等多个维度纳入考虑范围内,基于每个维度及其权重进行最终的排序推荐。
大部分情况下,非个性化范式推荐可以基于简单的计数统计来生成推荐,不会用到比较复杂的机器学习算法,是一种实施门槛较低的推荐方式。基于此,非个性化范式推荐算法可以作为产品冷启动或者默认的推荐算法。
完全个性化范式是目前的互联网产品中最常用的推荐模式,可用的推荐方法非常多。下面对常用的算法进行简单梳理。
该推荐算法只需要考虑到用户自己的历史行为而不需要考虑其他用户的行为,其核心思想是:标的物是有描述属性的,用户对标的物的操作行为为用户打上了相关属性的烙印,这些属性就是用户的兴趣标签,那么我们就可以基于用户的兴趣来为用户生成推荐列表。还是拿音乐推荐来举例子,如果用户过去听了摇滚和民谣两种类型的音乐,那么摇滚和民谣就是这个用户听歌时的偏好标签,此时我们就可以为该用户推荐更多的摇滚类、民谣类歌曲。
基于内容的个性化推荐在实操中有以下两类方式。
第一种是基于用户特征标识的推荐。
标的物是有很多文本特征的,例如标签、描述信息等,我们可以将这些文本信息基于某种算法转化为特征向量。有了标的物的特征向量后,我们可以将用户所有操作过的标的物的特征向量基于时间加权平均作为用户的特征向量,并根据用户特征向量与标的物特征向量的乘积来计算用户与标的物的相似度,从而计算出该用户的标的物推荐列表。
第二种是基于倒排索引查询的推荐。
如果我们基于标的物的文本特征(如标签)来表示标的物属性,那么基于用户对该标的物的历史行为,我们可以构建用户画像,该画像即是用户对于各个标签的偏好,并且对各个标签都有相应的偏好权重。
在构建完用户画像后,我们可以基于标签与标的物的倒排索引查询表,以标签为关键词,为用户进行个性化推荐。
举个粗暴的例子,有歌曲A、B、C分别对应摇滚、民谣、古风三个音乐标签,我听了歌曲A、B,则在我身上打了摇滚和民谣的标签,又基于我听这两个歌曲的频率,计算了我对“摇滚”和“民谣”的偏好权重。
在倒排索引查询表中,摇滚和民谣又会分别对应一部分歌曲,所以,可以根据我对摇滚和民谣的偏好权重从查询表中筛选一部分歌曲并推荐给我。
基于倒排索引查询的推荐方式是非常自然直观的,只要用户有一次行为,我们就可以据此为用户进行推荐。但反过来,基于用户兴趣给用户推荐内容,容易局限推荐范围,难以为用户推荐新颖的内容。
基于协同过滤的推荐算法,核心思想是很朴素的”物以类聚、人以群分“的思想。所谓物以类聚,就是计算出每个标的物最相似的标的物列表,我们就可以为用户推荐用户喜欢的标的物相似的标的物,这就是基于物品的协同过滤。所谓人以群分,就是我们可以将与该用户相似的用户喜欢过的标的物(而该用户未曾操作过)的标的物推荐给该用户,这就是基于用户的协同过滤。
常见的互联网产品中,很多会采用基于标的物的协同过滤,因为相比之下用户的变动概率更大,增长速度可能较快,这种情况下,基于标的物的协同过滤算法将会更加的稳定。
协同过滤算法思路非常简单直观,也易于实现,在当今的互联网产品中应用广泛。但协同过滤算法也有一些难以避免的问题,例如产品的冷启动阶段,在没有用户数据的情况下,没办法很好的利用协同过滤为用户推荐内容。例如新商品上架时也会遇到类似的问题,没有收集到任何一个用户对其的浏览、点击或者购买行为,也就无从基于人以群分的概念进行商品推荐。
基于模型的推荐算法种类非常多,我了解到的比较常见的有迁移学习算法、强化学习算法、矩阵分解算法等,且随着近几年深度学习在图像识别、语音识别等领域的进展,很多研究者和实践者也将其融入到推荐模型的设计当中,取得了非常好的效果。例如阿里、京东等电商平台,都是其中的佼佼者。
由于该算法涉及到比较多的技术知识,在下也处于初步学习阶段,就不班门弄斧做过多介绍了,有兴趣的朋友可以自行进行学习。
群组个性化推荐的第一步是将用户分组,因此,采用什么样的分组原则就显得尤为重要。常见的分组方式有两种。
先基于用户的人口统计学数据(如年龄、性别等)或者用户行为数据(例如对各种不同类型音乐的播放频率)构建用户画像。用户画像一般用于做精准的运营,通过显示特征将一批人圈起来形成同一组,对这批人做针对性的运营。因为前头已经提到此算法,这里不再重复介绍。
聚类是非常直观的一种分组思路,将行为偏好相似的用户聚在一起成为一个组,他们有相似的兴趣。常用的聚类策略有如下两类。
标的物关联标的物就是为每个标的物推荐一组标的物。该推荐算法的核心是怎么从一个标的物关联到其他的标的物。这种关联关系可以是相似的(例如嘉士伯啤酒和喜力啤酒),也可以是基于其他维度的关联(例如互补品,羽毛球拍和羽毛球)。常用的推荐策略是相似推荐。下面给出3种常用的生成关联推荐的策略。
这类推荐方式一般是利用已知的数据和标的物信息来描述一个标的物,通过算法的方式将其向量化,从而根据不同标的物向量之间的相似度来急速标的物之间的相似度,从而实现相识标的物的推荐。
在一个成熟的产品中,我们可以采集到的非常多的用户行为,例如在电商平台中,我们可以手机用户搜索、浏览、收藏、点赞等行为,这些行为就代表了用户对某个标的物的某种偏好,因此,我们可以根据用户的这些行为来进行关联推荐。
例如,可以将用户的行为矩阵分解为用户特征矩阵和物品特征矩阵,物品特征矩阵可以看成是衡量物品的一个向量,利用该向量我们就可以计算两个标的物之间的相似度了,从而为该用户推荐相似度高的其他产品。
再例如, 采用购物篮的思路做推荐,这种思路非常适合图书、电商等的推荐 。 以电商为例,我们可以把用户经常一起浏览(或者购买)的商品形成一个列表,将过去一段时间所有的列表收集起来。对于任何一个商品,我们都可以找到与它一起被浏览或者购买的其他商品及其次数,并根据次数来判断其关联性,从而进行关联推荐。
我们可以对用户进行分组,同样,我们也能够对标的物进行聚类分组。通过某位参考维度,我们将一些列具有相似性的标的物分成一组,当我们为用户进行推荐的时候,便可以将同一组内的其他标的物作为推荐对象,推荐给用户。
笛卡尔积范式的推荐算法一般是先采用标的物关联标的物范式计算出待推荐的标的物列表。再根据用户的兴趣来对该推荐列表做调整(例如根据不同兴趣的权重重新调整推荐列表的排序)、增加(例如基于个性化增加推荐对象)、删除(例如过滤掉已经看过的),由于其复杂程度较高在实际业务场景中应用较少,这边不再详细介绍。
好了,本次的介绍就到此为止了。本次主要是做了一个非常简单的推荐算法概述,在实际的业务场景中,还经常需要与产品形态或者更多的未读(如时间、地点等)相结合,是一个很有意思的领域,有兴趣的朋友可以进一步了解。
H. 推荐系统的研究主要包括哪些方面
推
荐系统的研究主要包括以下几个方面:
(1)用户信息获取和建模。
早期的推荐系统只需获取简单的用户信息,随着推荐系统
发展,
推荐系统由简单的信息获取转变为和用户交互的系统,
需要考虑用户多兴趣和用户兴
趣转变的情况,将数据挖掘应用到用户信息获取中,挖掘用户的隐性需求。
(2)推荐算法研究。
要实现被顾客接受和认可的个性化推荐,设计准确、高效率的个
性化推荐算法是核心。基于内容的推荐和协同过滤是最主要的两种。为了克服各自的缺点,
可以将各种推荐方法混合使用,以提高推荐精度和覆盖率。同时,信息获取和人工智能,以
及模糊推荐等相关领域的引入扩宽了推荐算法的思路。
(3)推荐系统的评价问题。
要使推荐系统为广大用户所接受,必须对推荐系统作出客
观综合的评价。
推荐结果的准确性和可信性是非常重要的两个方面。
如何对推荐结果的准确
性进行判定,
如何把推荐结果展示给用户以及如何获取用户对推荐结果的评价都是需要深入
研究的问题。
(4)
推荐系统的应用和社会影响研究。
需要建立推荐系统在其他应用领域的应用框架,
研究如何与企业其它信息系统的集成。
I. 推荐算法简介
写在最前面:本文内容主要来自于书籍《推荐系统实践》和《推荐系统与深度学习》。
推荐系统是目前互联网世界最常见的智能产品形式。从电子商务、音乐视频网站,到作为互联网经济支柱的在线广告和新颖的在线应用推荐,到处都有推荐系统的身影。推荐算法是推荐系统的核心,其本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。
推荐系统的主要功能是以个性化的方式帮助用户从极大的搜索空间中快速找到感兴趣的对象。因此,目前所用的推荐系统多为个性化推荐系统。个性化推荐的成功应用需要两个条件:
在推荐系统的众多算法中,基于协同的推荐和基于内容的推荐在实践中得到了最广泛的应用。本文也将从这两种算法开始,结合时间、地点上下文环境以及社交环境,对常见的推荐算法做一个简单的介绍。
基于内容的算法的本质是对物品内容进行分析,从中提取特征,然后基于用户对何种特征感兴趣来推荐含有用户感兴趣特征的物品。因此,基于内容的推荐算法有两个最基本的要求:
下面我们以一个简单的电影推荐来介绍基于内容的推荐算法。
现在有两个用户A、B和他们看过的电影以及打分情况如下:
其中问好(?)表示用户未看过。用户A对《银河护卫队 》《变形金刚》《星际迷航》三部科幻电影都有评分,平均分为 4 .7 分 ( (5+4+5 ) / 3=4.7 );对《三生三世》《美人鱼》《北京遇上西雅图》三部爱情电影评分平均分为 2.3 分 ( ( 3十2+2 ) /3=2.3 )。现在需要给A推荐电影,很明显A更倾向于科幻电影,因此推荐系统会给A推荐独立日。而对于用户B,通过简单的计算我们可以知道更喜欢爱情电影,因此给其推荐《三生三世》。当然,在实际推荐系统中,预测打分比这更加复杂些,但是其原理是一样的。
现在,我们可以将基于内容的推荐归纳为以下四个步骤:
通过上面四步就能快速构建一个简单的推荐系统。基于内容的推荐系统通常简单有效,可解释性好,没有物品冷启动问题。但他也有两个明显的缺点:
最后,顺便提一下特征提取方法:对于某些特征较为明确的物品,一般可以直接对其打标签,如电影类别。而对于文本类别的特征,则主要是其主题情感等,则些可以通过tf-idf或LDA等方法得到。
基于协同的算法在很多地方也叫基于邻域的算法,主要可分为两种:基于用户的协同算法和基于物品的协同算法。
啤酒和尿布的故事在数据挖掘领域十分有名,该故事讲述了美国沃尔玛超市统计发现啤酒和尿布一起被购买的次数非常多,因此将啤酒和尿布摆在了一起,最后啤酒和尿布的销量双双增加了。这便是一个典型的物品协同过滤的例子。
基于物品的协同过滤指基于物品的行为相似度(如啤酒尿布被同时购买)来进行物品推荐。该算法认为,物品A和物品B具有很大相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步:
基于物品的协同过滤算法中计算物品相似度的方法有以下几种:
(1)基于共同喜欢物品的用户列表计算。
此外,John S. Breese再其论文中还提及了IUF(Inverse User Frequence,逆用户活跃度)的参数,其认为活跃用户对物品相似度的贡献应该小于不活跃的用户,应该增加IUF参数来修正物品相似度的公式:
上面的公式只是对活跃用户做了一种软性的惩罚, 但对于很多过于活跃的用户, 比如某位买了当当网80%图书的用户, 为了避免相似度矩阵过于稠密, 我们在实际计算中一般直接忽略他的兴趣列表, 而不将其纳入到相似度计算的数据集中。
(2)基于余弦相似度计算。
(3)热门物品的惩罚。
从上面(1)的相似度计算公式中,我们可以发现当物品 i 被更多人购买时,分子中的 N(i) ∩ N(j) 和分母中的 N(i) 都会增长。对于热门物品,分子 N(i) ∩ N(j) 的增长速度往往高于 N(i),这就会使得物品 i 和很多其他的物品相似度都偏高,这就是 ItemCF 中的物品热门问题。推荐结果过于热门,会使得个性化感知下降。以歌曲相似度为例,大部分用户都会收藏《小苹果》这些热门歌曲,从而导致《小苹果》出现在很多的相似歌曲中。为了解决这个问题,我们对于物品 i 进行惩罚,例如下式, 当α∈(0, 0.5) 时,N(i) 越小,惩罚得越厉害,从而使热门物品相关性分数下降( 博主注:这部分未充分理解 ):
此外,Kary pis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化, 可以提高推荐的准确率。 其研究表明, 如果已经得到了物品相似度矩阵w, 那么可以用如下公式得到归一化之后的相似度矩阵w':
归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。假设物品分为两类——A和B, A类物品之间的相似度为0.5, B类物品之间的相似度为0.6, 而A类物品和B类物品之间的相似度是0.2。 在这种情况下, 如果一个用户喜欢了5个A类物品和5个B类物品, 用ItemCF给他进行推荐, 推荐的就都是B类物品, 因为B类物品之间的相似度大。 但如果归一化之后, A类物品之间的相似度变成了1, B类物品之间的相似度也是1, 那么这种情况下, 用户如果喜欢5个A类物品和5个B类物品, 那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。 从这个例子可以看出, 相似度的归一化可以提高推荐的多样性。
那么,对于两个不同的类,什么样的类其类内物品之间的相似度高,什么样的类其类内物品相似度低呢?一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。
最后,利用物品相似度矩阵和用户打过分的物品记录就可以对一个用户进行推荐评分:
基于用户的协同算法与基于物品的协同算法原理类似,只不过基于物品的协同是用户U购买了A物品,会计算经常有哪些物品与A一起购买(也即相似度),然后推荐给用户U这些与A相似的物品。而基于用户的协同则是先计算用户的相似性(通过计算这些用户购买过的相同的物品),然后将这些相似用户购买过的物品推荐给用户U。
基于用户的协同过滤算法主要包括两个步骤:
步骤(1)的关键是计算用户的兴趣相似度,主要是利用用户的行为相似度计算用户相似度。给定用户 u 和 v,N(u) 表示用户u曾经有过正反馈(譬如购买)的物品集合,N(v) 表示用户 v 曾经有过正反馈的物品集合。那么我们可以通过如下的 Jaccard 公式简单的计算 u 和 v 的相似度:
或通过余弦相似度:
得到用户之间的相似度之后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了UserCF算法中用户 u 对物品 i 的感兴趣程度:
首先回顾一下UserCF算法和ItemCF算法的推荐原理:UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品, 而ItemCF给用户推荐那些和他之前喜欢的物品具有类似行为的物品。
(1)从推荐场景考虑
首先从场景来看,如果用户数量远远超过物品数量,如购物网站淘宝,那么可以考虑ItemCF,因为维护一个非常大的用户关系网是不容易的。其次,物品数据一般较为稳定,因此物品相似度矩阵不必频繁更新,维护代价较小。
UserCF的推荐结果着重于反应和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反应了用户所在小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反应了用户自己的个性传承。因此UserCF更适合新闻、微博或微内容的推荐,而且新闻内容更新频率非常高,想要维护这样一个非常大而且更新频繁的表无疑是非常难的。
在新闻类网站中,用户的兴趣爱好往往比较粗粒度,很少会有用户说只看某个话题的新闻,而且往往某个话题也不是每天都会有新闻。 个性化新闻推荐更强调新闻热点,热门程度和时效性是个性化新闻推荐的重点,个性化是补充,所以 UserCF 给用户推荐和他有相同兴趣爱好的人关注的新闻,这样在保证了热点和时效性的同时,兼顾了个性化。
(2)从系统多样性(也称覆盖率,指一个推荐系统能否给用户提供多种选择)方面来看,ItemCF的多样性要远远好于UserCF,因为UserCF更倾向于推荐热门物品。而ItemCF具有较好的新颖性,能够发现长尾物品。所以大多数情况下,ItemCF在精度上较小于UserCF,但其在覆盖率和新颖性上面却比UserCF要好很多。
在介绍本节基于矩阵分解的隐语义模型之前,让我们先来回顾一下传统的矩阵分解方法SVD在推荐系统的应用吧。
基于SVD矩阵分解在推荐中的应用可分为如下几步:
SVD在计算前会先把评分矩阵 A 缺失值补全,补全之后稀疏矩阵 A 表示成稠密矩阵,然后将分解成 A' = U∑V T 。但是这种方法有两个缺点:(1)补成稠密矩阵后需要耗费巨大的储存空间,对这样巨大的稠密矩阵进行储存是不现实的;(2)SVD的计算复杂度很高,对这样大的稠密矩阵中进行计算式不现实的。因此,隐语义模型就被发明了出来。
更详细的SVD在推荐系统的应用可参考 奇异值分解SVD简介及其在推荐系统中的简单应用 。
隐语义模型(Latent Factor Model)最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的算法有LSI,pLSA,LDA和Topic Model。本节将对隐语义模型在Top-N推荐中的应用进行详细介绍,并通过实际的数据评测该模型。
隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品。让我们通过一个例子来理解一下这个模型。
现有两个用户,用户A的兴趣涉及侦探小说、科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?
我们可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。简言之,这个基于兴趣分类的方法大概需要解决3个问题:
对于第一个问题的简单解决方案是找相关专业人员给物品分类。以图书为例,每本书出版时,编辑都会给出一个分类。但是,即使有很系统的分类体系,编辑给出的分类仍然具有以下缺点:(1)编辑的意见不能代表各种用户的意见;(2)编辑很难控制分类的细粒度;(3)编辑很难给一个物品多个分类;(4)编辑很难给一个物品多个分类;(5)编辑很难给出多个维度的分类;(6)编辑很难决定一个物品在某一个类别中的权重。
为了解决上述问题,研究员提出可以从数据出发,自动找到那些分类,然后进行个性化推荐。隐语义模型由于采用基于用户行为统计的自动聚类,较好地解决了上面提出的5个问题。
LFM将矩阵分解成2个而不是3个:
推荐系统中用户和物品的交互数据分为显性反馈和隐性反馈数据。隐式模型中多了一个置信参数,具体涉及到ALS(交替最小二乘法,Alternating Least Squares)中对于隐式反馈模型的处理方式——有的文章称为“加权的正则化矩阵分解”:
一个小细节:在隐性反馈数据集中,只有正样本(正反馈)没有负反馈(负样本),因此如何给用户生成负样本来进行训练是一个重要的问题。Rong Pan在其文章中对此进行了探讨,对比了如下几种方法:
用户行为很容易用二分图表示,因此很多图算法都可以应用到推荐系统中。基于图的模型(graph-based model)是推荐系统中的重要内容。很多研究人员把基于领域的模型也称为基于图的模型,因为可以把基于领域的模型看作基于图的模型的简单形式。
在研究基于图的模型之前,需要将用户行为数据表示成图的形式。本节的数据是由一系列用户物品二元组 (u, i) 组成的,其中 u 表示用户对物品 i 产生过行为。
令 G(V, E) 表示用户物品二分图,其中 V=V U UV I 由用户顶点 V U 和物品节点 V I 组成。对于数据集中每一个二元组 (u, i) ,图中都有一套对应的边 e(v u , v i ),其中 v u ∈V U 是用户对应的顶点,v i ∈V I 是物品i对应的顶点。如下图是一个简单的物品二分图,其中圆形节点代表用户,方形节点代表物品,用户物品的直接连线代表用户对物品产生过行为。比如下图中的用户A对物品a、b、d产生过行为。
度量图中两个顶点之间相关性的方法很多,但一般来说图中顶点的相关性主要取决于下面3个因素:
而相关性高的一对顶点一般具有如下特征:
举个例子,如下图,用户A和物品c、e没有边直连,但A可通过一条长度为3的路径到达c,而Ae之间有两条长度为3的路径。那么A和e的相关性要高于顶点A和c,因而物品e在用户A的推荐列表中应该排在物品c之前,因为Ae之间有两条路径。其中,(A,b,C,e)路径经过的顶点的出度为(3,2,2,2),而 (A,d,D,e) 路径经过了一个出度比较大的顶点D,所以 (A,d,D,e) 对顶点A与e之间相关性的贡献要小于(A,b,C,e)。
基于上面3个主要因素,研究人员设计了很多计算图中顶点相关性的方法,本节将介绍一种基于随机游走的PersonalRank算法。
假设要给用户u进行个性化推荐,可以从用户u对应的节点 v u 开始在用户物品二分图上进行随机游走。游走到任一节点时,首先按照概率α决定是继续游走还是停止这次游走并从 v u 节点重新开始游走。若决定继续游走,则从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
上述算法可以表示成下面的公式:
虽然通过随机游走可以很好地在理论上解释PersonalRank算法,但是该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,知道所有顶点的PR值都收敛。这一过程的时间复杂度非常高,不仅无法在线进行实时推荐,离线计算也是非常耗时的。
有两种方法可以解决上面PersonalRank时间复杂度高的问题:
(1)减少迭代次数,在收敛之前停止迭代。但是这样会影响最终的精度。
(2)从矩阵论出发,重新涉及算法。另M为用户物品二分图的转移概率矩阵,即:
网络社交是当今社会非常重要甚至可以说是必不可少的社交方式,用户在互联网上的时间有相当大的一部分都用在了社交网络上。
当前国外最着名的社交网站是Facebook和Twitter,国内的代表则是微信/QQ和微博。这些社交网站可以分为两类:
需要指出的是,任何一个社交网站都不是单纯的社交图谱或兴趣图谱。如QQ上有些兴趣爱好群可以认识不同的陌生人,而微博中的好友也可以是现实中认识的。
社交网络定义了用户之间的联系,因此可以用图定义社交网络。我们用图 G(V,E,w) 定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合,如果用户va和vb有社交网络关系,那么就有一条边 e(v a , v b ) 连接这两个用户,而 w(v a , v b )定义了边的权重。一般来说,有三种不同的社交网络数据:
和一般购物网站中的用户活跃度分布和物品流行度分布类似,社交网络中用户的入度(in degree,表示有多少人关注)和出度(out degree,表示关注多少人)的分布也是满足长尾分布的。即大部分人关注的人都很少,被关注很多的人也很少。
给定一个社交网络和一份用户行为数据集。其中社交网络定义了用户之间的好友关系,而用户行为数据集定义了不同用户的历史行为和兴趣数据。那么最简单的算法就是给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣 p ui 可以通过如下公式计算。
用户u和用户v的熟悉程度描述了用户u和用户在现实社会中的熟悉程度。一般来说,用户更加相信自己熟悉的好友的推荐,因此我们需要考虑用户之间的熟悉度。下面介绍3中衡量用户熟悉程度的方法。
(1)对于用户u和用户v,可以使用共同好友比例来计算他们的相似度:
上式中 out(u) 可以理解为用户u关注的用户合集,因此 out(u) ∩ out(v) 定义了用户u、v共同关注的用户集合。
(2)使用被关注的用户数量来计算用户之间的相似度,只要将公式中的 out(u) 修改为 in(u):
in(u) 是指关注用户u的集合。在无向社交网络中,in(u)和out(u)是相同的,而在微博这种有向社交网络中,这两个集合的含义就不痛了。一般来说,本方法适合用来计算微博大V之间的相似度,因为大v往往被关注的人数比较多;而方法(1)适用于计算普通用户之间的相似度,因为普通用户往往关注行为比较丰富。
(3)除此之外,还可以定义第三种有向的相似度:这个相似度的含义是用户u关注的用户中,有多大比例也关注了用户v:
这个相似度有一个缺点,就是在该相似度下所有人都和大v有很大的相似度,这是因为公式中的分母并没有考虑 in(v) 的大小,所以可以把 in(v) 加入到上面公式的分母,来降低大v与其他用户的相似度:
上面介绍了3种计算用户之间相似度(或称熟悉度)的计算方法。除了熟悉程度,还需要考虑用户之间的兴趣相似度。我们和父母很熟悉,但很多时候我们和父母的兴趣确不相似,因此也不会喜欢他们喜欢的物品。因此,在度量用户相似度时,还需要考虑兴趣相似度,而兴趣相似度可以通过和UserCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度很高。
最后,我们可以通过加权的形式将两种权重合并起来,便得到了各个好有用户的权重了。
有了权重,我们便可以针对用户u挑选k个最相似的用户,把他们购买过的物品中,u未购买过的物品推荐给用户u即可。打分公式如下:
其中 w' 是合并后的权重,score是用户v对物品的打分。
node2vec的整体思路分为两个步骤:第一个步骤是随机游走(random walk),即通过一定规则随机抽取一些点的序列;第二个步骤是将点的序列输入至word2vec模型从而得到每个点的embedding向量。
随机游走在前面基于图的模型中已经介绍过,其主要分为两步:(1)选择起始节点;(2)选择下一节点。起始节点选择有两种方法:按一定规则抽取一定量的节点或者以图中所有节点作为起始节点。一般来说会选择后一种方法以保证所有节点都会被选取到。
在选择下一节点方法上,最简单的是按边的权重来选择,但在实际应用中需要通过广度优先还是深度优先的方法来控制游走范围。一般来说,深度优先发现能力更强,广度优先更能使社区内(较相似)的节点出现在一个路径里。
斯坦福大学Jure Leskovec教授给出了一种可以控制广度优先或者深度优先的方法。
以上图为例,假设第一步是从t随机游走到v,这时候我们要确定下一步的邻接节点。本例中,作者定义了p和q两个参数变量来调节游走,首先计算其邻居节点与上一节点t的距离d,根据下面的公式得到α:
一般从每个节点开始游走5~10次,步长则根据点的数量N游走根号N步。如此便可通过random walk生成点的序列样本。
得到序列之后,便可以通过word2vec的方式训练得到各个用户的特征向量,通过余弦相似度便可以计算各个用户的相似度了。有了相似度,便可以使用基于用户的推荐算法了。
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动问题。
冷启动问题主要分为三类:
针对用户冷启动,下面给出一些简要的方案:
(1)有效利用账户信息。利用用户注册时提供的年龄、性别等数据做粗粒度的个性化;
(2)利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品;
(3)要求用户在登录时对一些物品进行反馈,手机用户对这些物品的兴趣信息,然后给用推荐那些和这些物品相似的物品;
(4)提供非个性化推荐。非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,在切换为个性化推荐。
对于物品冷启动,可以利用新加入物品的内容信息,将它们推荐给喜欢过和他们相似的物品的用户。
对于系统冷启动,可以引入专家知识,通过一定高效的方式快速建立起物品的相关度表。
在上面介绍了一些推荐系统的基础算法知识,这些算法大都是比较经典且现在还在使用的。但是需要注意的是,在实践中,任何一种推荐算法都不是单独使用的,而是将多种推荐算法结合起来,也就是混合推荐系统,但是在这里并不准备介绍,感兴趣的可以查阅《推荐系统》或《推荐系统与深度学习》等书籍。此外,在推荐中非常重要的点击率模型以及基于矩阵的一些排序算法在这里并没有提及,感兴趣的也可自行学习。
虽然现在用的很多算法都是基于深度学习的,但是这些经典算法能够让我们对推荐系统的发展有一个比较好的理解,同时,更重要的一点——“推陈出新”,只有掌握了这些经典的算法,才能提出或理解现在的一些更好地算法。
J. 关于推荐算法未来的思考:推荐诗与远方
2021年8月27日,国家互联网信息办公室发布了关于《互联网信息服务算法推荐管理规定(征求意见稿)》公开征求意见的通知。
其中第十五条规定:
这从国家层面再次引发了大家对于推荐算法的本质的思考。
信息茧房(Information Cocoon)是哈佛大学教授桑斯坦(Cass R. Sunstein)在2006年出版的《信息乌托邦》(Infotopia)一书中提出的概念。这个概念的意思是:
这个概念一经提出,就迅速引起轰动。支持和反对的声音都不绝于耳,甚至这个话题被写进了2020年江苏省高考语文作文题目中:
反对信息茧房论者,比如有文章将这种思想归结为人类对于技术的恐惧。
比如,文中说:
如果这个逻辑成立的话,我们可以说,因为喜爱高油高热量高糖的食物,我们的食堂就只提供这些食物就好了。
尼采认为,生命的本质就是追求权力意志(will to power)。但是,人类也是存在弱点的,可以通过一些手段压抑人类的权力意志。比如催眠,机械性重复的活动,微小的快乐,群体认同,让某些情感过度发展等。
宗教曾经做到过这些,使西方经过了上千年的中世纪。今天的网络游戏也可以做到其中的很多点,我们不能说因为宗教当年就是这样压抑人性的,所以网游这么做也是好的。
1775年,美国独立宣言起草者之一的帕特里克·亨利在弗吉尼亚州会议的演讲上讲出了着名的那句"Give me liberty or give me death",不自由,毋宁死。
那么,人是不是自由的呢?
让我们把时间推回原点,当人出生的时候,他或她没有权利选择自己的性别、父母、民族、家庭、国家,用海德格尔的话来说,人是被“抛”入这个世界的。
出生了之后,人类也是无法离开他人独立生存的,小时候是,长大之后仍然是。为了跟他人共同生存,就不得不受他人的影响。人总是在这种或那种处境中操劳。
我们所处的环境,就像一张大网,把我们困在其中。跟别人的交流、书籍、报纸、广播、电视、互联网上的信息也不断地影响着我们的想法。为广告、媒体、电子商务服务的推荐算法,正是这大网中提供能力增强的一部分。
这种受到别人的很大影响,而缺乏自我思考的状态,海德格尔称为“常人”。人们处于“常人”状态而不自知的这种状态,海德格尔称之为“沉沦”。
最基础的推荐算法叫做“协同过滤”。分为基于商品的协同过滤,也就是你买了商品A,就推荐相似的商品B给你;以及基于用户的协同过滤,也就是说你和朋友C的喜好相似,他买了商品D,那么也将商品D推荐给你。
举例来说,你买了辛拉面,就推荐相似的韩式火鸡面给你。
再比如,你和雷姆老师的喜好相似,比如你们都喜欢喝可乐。现在发现雷姆老师喜欢吃火锅,那就推荐你也吃火锅。
将这个原理做得更复杂一些,比如我们可以写成下面的公式:
但是不管表示起来如何复杂,本质上推荐算法所做的事情就是大网的一部分,让人沉沦于自己或者别人的兴趣的计算结果之中。
看到上面的结论,有些同学觉得不对。学过算法的同学都知道BandIt,在利用与探索中寻找平衡。你说我用推荐算法来网住你,我给你增加随机性总该可以了吧?
还有的同学认为,人生来就是有好奇心的,好奇心会让我们突破大网,找到更广阔的世界,打破这个限制。
那么我们不提哲学理论了,就从大家最常见的刷手机的场景上来说。比如休息一天在家刷手机,看短视频,看小说,追剧,看八卦新闻,打手机游戏。这样的一天度过了之后,躺在床上如果不能入睡的话你会感觉到什么,是充实,还是空虚?
我们在生活中也会遇到很多人好奇心很强,知道的东西很多,但是却没有什么很精通的东西。
这是因为,好奇心确实是人类探索未知世界的有力武器,但是光有好奇还不行,人类的默认模式是注意力涣散,兴趣点很快从一个事物迅速跳到另一个事物上。
就像仙剑中灵儿的那首小诗:“今日种种,似水无痕。明夕何夕,君已陌路”。
我们知道,人类是个视觉动物。观察人类的视线就可以看到,眼睛正常是不会盯着同一个地方一直看的。眼珠不动的反而可能是视障人士。
这种没有思考的好奇心,会让我们的生活消散在一片虚无之中,如无根之浮萍,没有根基,最终回归沉沦之中。
法国哲学家萨特认为,人类的本质就是虚无。人有无限种潜在的可能性,但是人类的天性是希望寻找确定性而非可能性。人类可以通过占有物品,比如买东西去获得一种确定性的感受,但是有限的、固定不变的东西没有办法填满无限的可能性。
这也是从哲学上对于现有的推荐算法无法满足人类的需求的解释。
最后,因为沉沦,因为不愿意独立思考,人们也不愿意做决策,更不愿意承担决策的后果。推荐算法可以帮助人们逃避决策,继续沉沦。
这当然谈不上有多负面,但是也谈不上有多正面。
那么,问题来了,这也不行,那也不行,那到底该怎么办?
答案是像《勇敢的心》里的威廉.华莱士一样,通过思考,追求自由,从沉沦中觉醒出来,进入一种称为“本真”的状态。
在沉沦状态下,我们其实是放弃了自由,把决定自己生存的决断交给流行的意见和习俗。
本真的生存状态并不是要标新立异,跟流行对着干,那其实仍然是一种沉沦的状态。而是理解我们生来是有自由决断和选择权的。纵然受到各种限制,纵然要承受决断带来的后果,那就对不起自己的良心。这不是因为我们不能做,而是我们明明能做但是没有做,自己没有对自己的生存负责。
那么是不是理解了这个道理,我们就可以过好这一生了呢?
哪有那么容易!你太小看常人状态的力量了。这种生来就伴随着我们的巨大惯性和旋涡一样裹挟着我们,想逃出去的可能性非常小。
得多强的力量才能像成为地球卫星的第一宇宙速度一样飞上太空呢?可能只有到了生命的尽头才能明悟,所谓“人之将死,其言也善”。
在那样的时刻,人们才能真正发现,自己要死了,但是平时沉沦所在的世界并不会跟自己一起去死。这是将某个人和常人环境分离的一个突破口。在这一时刻,人后悔想做而没有做的事情,跟别人的期望、其他人的看法等终于完全没有关系了,这一个,人终于成为了自己。
人的个体性和无可替代性终于从常人的状态中脱离出来。
试问,现有的推荐算法能够推荐出满足本真状态需求的东西么?推荐的结果本身也随着沉沦态一起被分离出去了。
那么,有没有办法不等到最后一刻才能进入本真的状态?
美国作家萨洛扬说:“每个人都会死,但是我总以为自己不会”。这是沉沦状态的常态。但是如果我们能够直面死亡,真真切切地去用心体会对于自己将要死亡的感受,保持对于死亡的“畏”的状态,我们就有可能进入到本真的状态。
但是,懂得了进入本真的方法,仍然不见得能过好一生,因为本真的状态可能只存在一瞬间,你马上又被常人状态拉回到沉沦之中。
尽管回到了沉论,但是良心的种子已经在慢慢生根发芽。你就有更多的机会跳出沉沦,去反思什么才是真正你这个个体所想要的。
当然,通过反思悟到脱离沉沦状态的方法不止“向死而生”这一种。比如针对似水无痕的好奇心,对于死亡之畏,你悟到的是“无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦集灭道,无智亦无得”。那么你一样可以摆脱沉沦状态,但不是进入本真状态,而是“远离颠倒梦想,究竟涅磐”了。
有同学讲了,我看你这篇文章是想看推荐算法的思考,你跟我讲向死而生有什么用,这是靠人自己思考和反思的,推荐算法能帮上什么忙?光推荐,人不反思,还是会一直沉沦下去啊。
幸好除了完全脱离沉沦回归本真的方法之外,我们还有在沉沦中打开一扇看到另外的世界的窗口,这就是诗歌、艺术与自然的召唤,我们统一称做“诗与远方”。
脱离沉沦可以认为是离开黑暗进入光明,而诗与远方就像是夜空中明亮的心,同样可以给沉沦中的我们带来不指引。
当海德格尔在思考沉论的时候,他看到了被人遗忘了100多年的德国诗人荷尔德林的诗:《人,诗意的栖居》
无独有偶,当存在主义的思潮逐渐散去,新时代运动兴起,西方人民在寻找心灵渴望的源泉的时候,找到的是700多年前伊斯兰教苏菲派诗人鲁米的诗。
2007年,联合国教科文组织将这一年定为“国际鲁米年”,以纪念鲁米诞辰800周年。
比如这首:
语言可以揭示存在,同时又很容易遮蔽存在。当我们使用一套惯用的语言,很多观念就变成了现成的、理所当然的,从而让人陷入沉沦,让存在本身被遮蔽和遗忘。而诗歌就是揭示存在,让读者进入澄明的虫洞的入口。
同诗歌一样,海德格尔认为,每一件伟大的艺术作品都在混沌一片的沉沦状态下照亮了一片场域,也让观看者同时进入澄明无蔽的真实之境。
我个人认为,作为人类心灵归宿的大自然,也起到同样的澄明作用。
那么我们的推荐算法呢?是不是也能照亮一片场域,澄明一块无蔽的真实之境?让用户在沉沦中能够找到本真自我的真实的需求?
新的推荐算法,应该具有下面的几个特征:
最后,让我们引入一小段鲁米的话来作为结束:
算法不能只推荐眼前的苟且,还要像诗与远方一样澄明一片场域的遮蔽。