基于模型的协同过滤算法
基于模型的协同过滤算法是源自于推荐过程可以被视为分类或预测问题的这一思想,它将评分矩阵作为训练数据和测试数据,使用统计学、机器学习、数据挖掘等方法构建出用户与物品之间的关系模型,然后据此产生合理的推荐。
基于隐因子模型的推荐算法:
它是基于用户观看或者或者评分等历史行为数据,从中挖掘出用户隐含的兴趣,即隐因子,然后将用户或视频用隐因子来分类,最后通过这些隐因子进行推荐,用户会对某些特定的隐因子有一定的喜好度,这样便可以利用这种用户或视频与隐因子的关系来做出推荐。
用SVD分解技术来从用户评分数据中确定出隐因子,以及确定出如何计算用户或视频与隐因子的关系,SVD将U-V矩阵所表示的用户评分数据分解为用户与隐因子的关系矩阵U、视频与隐因子的关系矩阵V,以及表示隐因子的矩阵(求和符号)。
在计算用户对视频的喜好程度时,公式中包含了用户和某一个隐类的关系,也包含了视频和隐类的关系,要计算这两个参数,需要一个训练集,对于每个用户,训练集都包含了用户喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模型参数。
推荐系统的用户行为分为显性反馈和隐性反馈,显性反馈就是用户对视频的打分,隐性反馈就是用户的观看浏览行为。隐因子模型在显性反馈数据上解决评分预测问题得到了很好的精度。但是对于隐性反馈数据集,这种数据集只有正样本(用户观看了什么视频),而没有负样本(用户对什么视频不感兴趣),因而存在一个负样本采样过程。根据以往的经验总结,负样本采样需要遵循以下原则:
(1)对每个用户,要保证正负样本的平衡。
(2)对每个用户采负样本时,要选取那些很热门,而用户却没有行为的视频。
2.算法流程
基于隐因子模型的推荐算法流程如下:
访问用户行为数据——构造训练数据集——迭代求解目标函数的参数——当收敛时——输出用户兴趣向量和视频的类别向量—
获取用户U的兴趣向量P(u)——获取视频i的类别向量q(i)——计算用户对视频的喜好度——根据喜好度进行排序——输出Top-k视频列表。
算法输入:用户行为日志,用户兴趣向量、视频类别向量。
算法输出:初始推荐结果。
1.从用户行为日志中获取最近浏览过视频的用户集合U.
2.针对集合U中的每个用户u(可并行处理):
2.1从用户行为日志中获取该用户近期观看的视频集合M(u);
2.2访问“基于隐因子的视频相似矩阵”获取与M(u)相似的视频集合N(u);
2.3针对视频集合N(u)中的每个视频,计算用户对该视频的偏好值;
2.4依据用户偏好值,对N(u)的视频进行排序;
2.5取Top-k个视频,为每个视频赋予解释,如“您近期浏览过与之近似的视频”;
2.6保存Top-k个视频到“初始推荐结果”中。
它主要适用于缺少用户兴趣信息和视频类别信息,但是具有大量的用户行为的系统,它一般适用于离线推荐,不适用于实时推荐。
基于朴素贝叶斯分类的推荐算法
算法原理:由于推荐问题可以被看成分类问题,因此可以使用一些机器学习领域中的分类算法对推荐问题加以解决,朴素贝叶斯的基本思想是:对于给出的待分类物品和既定的类别,计算该物品在各个类别中出现的概率,哪个类别计算出的概率最大就将带分类物品分到那个类别。
朴素贝叶斯分类在推荐系统中有着一定程度的应用,它能用于在已知某些评分的情况下通过计算概率预测出未知评分。
算法流程:
算法输入:已知目标用户对视频Vx之外的视频评分情况,以及其他用户对各视频的评分情况。
算法输出:确定目标用户对视频Vx的评分。
朴素贝叶斯实现起来比较简单,准确率较高,但是分类的时候需要学习全部样本的信息。因此,朴素贝叶斯分类更适用于数据量不大,类别较少的分类问题。
基于内容的推荐方法:(CB)
他以物品的内容描述信息为依据来做出推荐,本质上是基于对物品和用户自身的特征或属性的直接分析与计算。CB推荐方法是依赖于用户过去时的数据对现在时的用户进行推荐,所以不能像CF那样实现实现用户潜在兴趣的挖掘。
在CB推荐系统中,需要为每个物品创建一个物品画像用于记录该物品的内容固有属性,也需要为每个用户创建一个用户画像用于记录用户的特定偏好,物品/用户画像的本质是由一些表示特征的向量组成的。我们尝试使用向量来表示物品的所有属性,例如,由于演员是电影的一个属性,那么就假设每个演员都是这个属性的一个向量分量,其中,若向量中相应位置的演员有出演这部电影,则该向量中的对应位置值设为1,否则为0.同样的电影的导演、类型等其他固有属性也可以用0、1来表示。
视频推荐中的用户画像:
我们用效用矩阵代表用户和物品之间的联系。对于用户喜欢的物品,我们可以做的最好预测是聚合这些物品画像。如果效用矩阵只有1这个取值,那么,最简单的聚合就是将效用矩阵中各个值为1的位置对应的物品画像中的向量取值求平均值得到结果。
例如,假设用户对电影的效用矩阵只有0和1两种取值,代表用户是否看过电影,若用户U看过的电影中由百分之30的电影都有演员王俊凯,那么用户U的用户画像中对应王俊凯的分量取值就是0.3.
如果效用矩阵不是布尔型,比如评分取值1~5,那么我们就可以通过数值来衡量物品相似度。将每个元素减去这个用户评分的平均值进行正则化是很有必要的。通过正则化,当用户物品评分低于均值时就会得到一个负值,当用户对物品评分高于均值时我们能得到一个正数。例如,考虑和上例相同的电影信息,但是现在效用矩阵的元素取值为1~5.假设用户U对于所有电影的平均分为3,其中4部电影有王俊凯参演,对应电影评分分别是3、4、5、4.那么在用户U的画像中,对应王俊凯的分量取值就是0、1、2、1的平均值,即为1.
基础CB推荐算法:
该方法不考虑非结构化特征,不考虑反馈,单纯基于视频的内容固有属性来进行相似度计算及视频推荐。在内容过滤视频推荐系统中,最基础的就是抽取出特征,以及如何通过这些特征计算视频间的相似度。每个视频可以用特征向量矩阵来表示,通过该向量和用户偏好内容偏好进行加权内积,则可以得到该视频和用户喜好的相关程度,进而用相关程度排序就可以进行视频推荐了。
算法原理
利用视频的基本信息和用户偏好内容的相似性进行视频推荐。通过分析用户已经观看过的电影的内容,如演员、导演、风格等,生成用户的偏好内容,然后推荐与用户感兴趣的电影内容相似度高的其他电影
算法流程
视频信息(类型、演员、上映时间等)——内容分析器——视频特征矩阵(1)
用户行为(评价、分享、收藏、浏览的视频)——概要学习器——用户内容偏好(2)
(1)和(2)相似度计算——根据相似度排序——输出Top-k视频列表
算法输入:视频信息,用户行为日志。
算法输出:初始推荐结果。
1.视频表示:每个视频使用特征向量表示,分量为视频的特征属性,如视频名称、导演、主演等。
2.从“用户行为日志中”,获取该用户所浏览、收藏、评价、分享的视频集合M,根据视频集合M中视频的特征数据,可以学习得到用户的内容偏好。用户的喜好模型包括如下内容:
2.1视频的导演列表:每个导演之间用$符号隔开;
2.2视频的演员列表:每个演员之间用$符号隔开;
2.3通过计算用户喜好模型与每个视频特征向量间的相似度;
2.4对相似度进行排序,取Top-k个视频,为每个视频赋予解释。
3.保存Top-k个视频到“初始推荐结果中”。
这种方法尤其对新上线视频会马上被推荐非常有效,被推荐的机会与老的视频时相同的。
基于TF-IDF的CB推荐算法
该方法重点考虑非结构化的处理
1.算法背景:
在实际的视频推荐中,上线视频往往还会结合用户给予的评论信息进行实时推荐。用户的评论一般分为评分与文字评论两种,前者通过分数直接反应用户对视频的喜恶,后者则需要我们从冗长的文字中提取关键信息。TF-IDF等技术被引入。
TF指的是某一个给定的词语在该文件中出现的次数,这个数字通常会被正则化,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。IDF是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
算法原理
TF-IDF算法基于这样一个假设:若一个词语在目标文档中出现的频率高而在其他文档中出现的频率低,那么这个词语就可以用来区分出目标目标文档。这个假设需要掌握的由两点:
1.在本文档出现的频率高;
2.在其他文档出现的频率低。
因此,TF-IDF算法的计算可以分为词频TF和逆转文档频率IDF两部分,由TF和IDF的乘积来设置文档词语的权重。
TF指的是一个词语在文档中的出现频率。假设文档集包含的文档数为N,文档集中包含关键词Ki的文档数为Ni,Fij表示关键词Ki在文档Dj中出现的次数,Fdj表示文档Dj中出现的词语总数,Ki在文档Dj中的词频TFij定义为
TFij=Fij/Fdj
这个数字通常会被正则化,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。
IDF是一个词语普遍重要性的度量。ni/N表示某一词语在整个文档集中出现的频率,由它计算的结果取对数得到关键词ki的逆文档频率IDFi
IDFi=logN/ni
由TF和IDF计算词语的权重为TFij*IDFi=Fij/Fdj*logN/ni
可以看出,TF-IDF与词语在文档中的出现次数成正比,与该词在整个文档集中的出现次数成反比。在目标文档中,提取关键词的方法就是将该文档所有词语的TF-IDF计算出来并进行对比,取其中TF-IDF值最大的K个数组成目标文档的特征向量用以表示文档。在此,注意一点,文档中存在的停用词,如‘是’、‘的’之类的,对于文档的中心思想表达没有意义的词,在分词时需要先过滤掉再计算其他词语的TF-IDF值。
算法举例
对于计算影评的TF-IDF,以电影“加勒比海盗:黑珍珠号的诅咒”为例,假设它总共由1000篇影评,其中一篇影评的总词语数为200,其中出现最频繁的词语为“海盗”、“船长”、“自由”出现最频繁,分别时20、15、10次,并且这三个词在所有影评中被提及的次数分别为1000、800、100就这三个词语作为关键词的顺序计算如下。
1.将影评中出现的停用词过滤掉,计算其他词语的词频,以出现最多的三个词为例进行计算如下。“海盗”出现的词频为20/200=0.1、“船长”出现的词频为0.075,“自由”出现的词频为0。05;
2.计算词语的逆文档频率如下。海盗的IDF为IDF=log1000/1000=0、船长出现的IDF为log(1000/800)=0.3,自由的IDF为log(1000/100)=1.
3.由1和2的计算的结果求出词语的TF-IDF结果,海盗为0、船长为00225,自由为0.05.通过对比可得,该篇影评的关键词排序应为:自由、船长、海盗。把这些词语的TF-IDF值作为它们的权重按照对应的顺序依次排列,就得到这篇影评的向量,我们就用这个向量来代表这篇影评,向量中每一个维度的大小对应这个属性的重要性。将总的影评集中所有的影评向量与特定的系数相乘求和,得到这部电影的综合影评向量,与电影的基本属性结合构建视频的物品画像,同理构建用户画像,可采用多种方法计算视频的物品画像和用户画像之间的相似度,为用户做出推荐。
基于KNN的CB推荐算法
该方法其实是一种接近无反馈的方法。
KNN算法基于这样的假设,如果在特征空间中,一个样本的K个最邻近样本中的大多数样本属于某一个类别,则该样本也属于这个类别,KNN算法通过计算样本个体间的距离或相似度来确定最近邻,算法的时间复杂度跟样本的个数直接相关。应用在推荐系统中时,KNN算法能够将与目标物品的内容的k个最相似物品推荐给用户。由于内容固有属性一旦创建就基本保持不变,所以基于内容固有属性的KNN最近邻计算不需要频繁的重复刷新。
由于KNN算法依赖于周围有限的已正确分类的邻居样本来对待分类样本进行分类,所以它更适合类域的交叉或重叠较多的待分类样本集的分类问题。同时,KNN算法的主要不足是当分类的各样本容量不平衡时,会出现计算结果不准确的问题,为了克服这个问题,就需要采用一些赋权值的方法来加以改进。
算法原理
KNN在CB推荐算法中的应用与在CF推荐算法中的应用极为相似,它们都是要首先找到与目标物品相似的且已经被用户u评价过的k个物品,然后根据用户U对这K个物品的评价来预测其对目标物品的评价。它们的差别在于,CF推荐算法中的KNN时根据用户对物品的评分来计算物品间相似度的,而CB推荐算法中KNN是根据物品画像来计算物品间相似度的,所以对于后者来说,如何通过物品画像来计算物品间的相似度是算法中的关键步骤,相似度的计算可以使用杰卡德距离(对于结构化的数据)、余弦相似度(对于用向量空间模型表示的物品)或者Pearson相关系数的计算方法。KNN算法流程如下:
算法输入:用户已评分视频、目标视频i.
算法输出:用户对目标视频i的评分。
由于用户对视频的评分趋势各有不同,如有的用户评分严格,有的用户评分宽松,这种趋势被称为全局作用,所以也需要在KNN的基本模型中考虑到全局作用的影响。常用的全局作用有1.全局评分的平均值2.电影的被评分倾向、用户的评分倾向、以及用户第一次评分后相距当前的用时。将全局作用纳入在KNN模型的目标是为该全局作用计算出一个特定的参数,在计算这样的参数时,每次只考虑一个全局作用,并使用前一次计算全局作用时的预测评分与真实评分之差作为本次计算的真实评分。
基于Rocchio的CB推荐算法
该方法是一种侧重考虑反馈的方法
1.算法背景
Rocchio是从用户观看历史中抽取用户喜好的视频特征构建用户画像常用的一种算法是信息检索领域处理相关反馈的一个著名算法,它提供了如何通过用户观看视频的反馈计算用户特征向量中属性值的方法。举例来说,假如用户观看过星球大战和加勒比海盗并给予高分,那么根据用户的历史行为数据构建用户画像时,用户的特征向量可表示为{“动作”:1、“欧美”:1,“科幻”:0.5,“冒险”:0.5},当该用户观看电影“2012”并为其打了个低分时,用户特征向量更新为{“动作”:1、“欧美”:0.8,“科幻”:0.3,“冒险”:0.5}
算法原理
在视频推荐系统中,Rocchio算法根据用户的历史数据对用户的原始特征向量不断地进行修改,实现实时更新用户画像的功能。Rocchio算法基于这样的假设:如果我们需要计算出最精确用户特征向量Uc,那么这个用户特征向量应该与用户喜欢的视频特征最相似,与用户讨厌的视频特征最不同。若V1表示用户喜欢的视频,Vh表示用户讨厌的视频,那么根据Rocchio算法的思想,定义最优的用户特征向量为:用户特征向量与用户喜欢的视频的相似度减去用户特征向量与用户讨厌的视频的相似度的最大值。在基于内容的视频推荐中,根据用户的历史行为数据建立用户画像,我们可以采用Rocchio算法不断地调整用户的特征向量Uc.
基于决策树的CB推荐算法
1.算法背景
构建基于内容的推荐系统的另外一个学习算法是基于决策树的推荐算法,不同于其他算法,该算法在训练阶段会生成一个显式的决策模型。决策树可以通过训练数据集构建并有效判断一个新的视频是否可能受用户喜欢,当视频的特征属性较少时采用决策树算法能够取得不错的效果,另外,决策树学习的思想也比较容易被人理解,在视频推荐理由的可解释方面较好。
2.算法原理
在视频推荐系统中,决策树的内部节点通常表示视频的特征属性,这些节点用于区分视频集合,例如,通过视频中是否包含这个特征将其进行分类。在只有两个分类的简单数据集中,用户是否对视频感兴趣一般出现在决策树的叶子节点上。
如当系统为用户A做推荐时,首先根据用户的历史观看记录和对视频的评分构建用户画像并得出一个结论:当视频是奇幻或冒险类型的喜剧片,该用户很可能会喜欢它,当系统为用户推荐一部新的视频,首先判断视频是否时喜剧,若视频不是喜剧,系统直接判定该用户不会喜欢这部视频并寻找新的视频继续进行决策判断:若视频时喜剧,那么系统接着判断视频是否属于奇幻或冒险题材,当视频满足其中一个条件时,系统将做出决策:该视频时该用户可能喜欢的视频:否则判定为用户不喜欢的类型。
基于线性分类的CB推荐算法
1.算法背景:
将基于内容的视频推荐问题视为分类问题时,多种机器学习的方法都可以被采用。从一个更抽象的角度上看,大部分学习方法致力于找到一个可以准确区分用户喜欢和不喜欢的视频的线性分类模型系数。
将视频数据用n维特征向量进行表示,那么视频可用点在n维空间表示,线性分类器试图在给定的视频数据空间中找出一个能够将视频正确分类的平面,一类点尽可能在平面的某一边,另一类则在平面的另一边,在视频推荐中,就是将视频分为用户喜欢和不喜欢两类。例如,用户A只喜欢看喜剧电影,那么划分用户A观看视频类别的分界条件就是视频是否为喜剧。
2.算法原理
基于线性分类器的CB推荐算法通过视频特征的线性组合进行分类,若输入的视频特征向量为V,输出的结果y表示用户是否喜欢视频,则线性分类器可以表示为视频特征向量对应的权重和V向量的内积,然后根据输入的视频特征属性做出决定输出结果。
二维的分类器扩展为在多维中划分类别界限的超平面。
使用线性分类器的另一个挑战是处理数据的噪声。数据集上的视频向量若存在噪声分量则可能会导致错误的分类结果。另外,也有可能存在噪声视频,由于不知名的原因错误的分类或者处于分类的边缘地带,这种噪声在数据中的识别并不容易,这些问题在使用线性分类器时需要注意。
基于朴素贝叶斯的CB推荐算法
1.算法背景
贝叶斯定理描述在一个随机事件发生下另一个随机事件发生的条件概率的定理。朴素贝叶斯算法是一种常用的分类方法,基于朴素贝叶斯的推荐系统判断用户是否对某个视频有兴趣的方法是将这个问题转化为分类问题,例如,将其分为两类,一类是喜欢,另一类是不喜欢,朴素贝叶斯算法假设用户和视频的特征向量中的各个分量相互之间独立并成功的应用在基于内容的视频推荐系统中。
2.计算原理
视频推荐系统中,分类C下的一个视频的特征属性Vi的条件概率用Vi在分类C下所有视频中出现的频率近似表示。即它等于Vi在标记为C的视频中出现的次数(即频度),除以在这些视频中出现的所有特征属性的个数,为了预防计算概率为0的情况,对式子进行平滑论,即分子加1,分母加所有视频中的出现的不同特征属性数(类似文章的词汇量)。
基于知识的推荐方法(KB)
基于知识的推荐方法,是区别基于CB和基于CF的常见推荐方法。知识表示是一组为实现知识形式化描述而做的约定,是把知识客体中的知识因子与知识关联起来,便于人们的识别和对知识的理解,它是知识组织的前提和基础,任何知识组织方法都是建立在知识表示的基础上。
基于知识的推荐方法是针对该领域的特殊需求和更为精细的结构化内容,包括专业性的优质特征,帮助提高搜索引擎在特定领域的服务。以视频推荐为例,一部电影的上映时间和档期热度,哪些导演指导的一定是大片,变形金刚和指环王系列口碑肯定不会差到多少等,都是非常有价值的推荐信息。因此,推荐系统需要利用特定领域相关的或者常识相关的额外的因果知识生成推荐或者辅助推荐决策。
此外,基于知识的推荐,也是更加容易满足主观个性化需求的方法。例如,只要是VIP付费用户,如果配置了偏好类型,就可以为其提供更加专注、精准和深入的推荐服务。这里主要是面向两种常见的知识展开基于知识的推荐方法描述:一种是约束知识,主要面向人工知识库,构建if-then推荐规则;另一种是关联知识,利用数据挖掘理论构建基于数据规律的自动学习的推荐规则。