基于隐语义模型的个性化观影推荐

发布时间:2019-05-24 浏览次数:93

                                                                        作者:吴建新、王昊、倪洁

一、引言

随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代。在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战,而推荐系统——作为互联网大爆炸时期迎接的信息过载挑战的解决方案。对用户而言:推荐系统可以及时解决迎需求,帮助决策做选择,快速发现新事物;对商家而言:推荐系统可以提供个性服务,提高用户体验,提高服务效率。

现在推荐系统已经广泛的应用于我们的生活中,如销售网页APP的商品推荐、音乐软件的音乐推荐、学校选课系统的选课推荐……

推荐系统的研究一般认为始于1994年明尼苏达大学,而GroupLens研究组推出的 GroupLens 系统,被认为是最早的自动化协同过滤推荐系统之一。自此之后,推荐系统的相关技术得到了进一步发展和重视。

本小组成员采用了沈晓彤教授2016年的一篇JASA文章里所提到的方法。该文章对直接采用SVD的传统潜在语义分析(LSA)进行了改进,在SVD的理念的基础上加入了矩阵分解,从而提出了隐语义模型(LFM)。本小组针对对movielens 1M的数据集运用隐语义模型进行建模分析,然后并根据分析结果对每个用户给出电影top10推荐。(数据来源https://grouplens.org/datasets/movielens/

 

二、方法概述

1局部潜在模型(Partial Latent Models

假设一个推荐过程有个用户和个项目,我们可以观测到基于用户属性的变量基于项目属性的变量,以及用户偏好矩阵。其中,表示第个用户对第个项目的喜好程度,如电影评分、听歌频率、选课与否、课程成绩等。

由于选取的变量不一定能完全表达用户或者项目的全部信息,所以给出两个矩阵,分别用来解释用户和项目的变异性,因为无法观测,所以称之为潜在因子(latentfactor),表示潜在因子数量的上界。

基于以上信息,建立预测变量和潜在因子的加性模型:


其中,表示第个用户的属性信息,个项目的属性信息,分别表示模型对应的系数,为潜在因子。

矩阵形式为:

当没有响应变量时,上述模型将退化为:

 

2、损失函数(lossfunction

根据样本构造非负的损失函数(对数似然),可以用来评价模型拟合的效果,下面给出一般表达式,为任意损失函数:


对于连续相应变量,一般使用离差平方和作为损失函数:

对于次序响应变量,一般给出如下损失函数:


其中,

 

3正则化条件

为了防止在模型求解和参数迭代过程中出现过拟合情况,本小组在建立模型的时候均使用了正则化函数,所使用的三个正则化函数如下:

1)全局正则化函数:用来选择更新的参数。


2)基于用户的局部正则化函数:用于更新潜在因子


3)基于项目的局部正则化函数:用于更新潜在因子


4)基于多元回归模型的更新函数:用于更新模型参数


 

4几种算法准则

1)参数更新准则

为了能够得到效果最好的参数更新,我们每次更新完三个参数后,保持其他参数不变,分别计算三个系数全局正则化函数的改变程度,选择变化最大的参数进行更新,表达式如下:


2)参数调整准则

在潜在因子的更新中,因为始终成立,所以会产生许多个结果。为了克服这一难题,本小组根据论文内容,在每次潜在因子更新之后进行参数调整,使用“等尺度策略”确保更新后的参数不影响目标函数。即:


3RMSE评价指标

将模型的最终数据带入原模型中估计响应变量,然后计算响应变量预测值和实际值的RMSERMSE越小表示模型拟合的越好,模型精度越高。


 

三、算法实现

本文主要思路是利用回归及奇异值分解的思想,对用户未进行评价的项目预测评分然后对用户推荐。所谓千人千面,每个用户都有不同的喜好,每个项目的属性也不尽相同。尽管我们可以人为的给用户聚类,给项目增加许多标签,但是这都不能完全匹配该用户对该项目的偏好程度。

所以我们根据Movielens数据及隐语义模型思想,让这些用户和项目自动的分解出偏好。在利用回归预测评分时,将预测值向用户和项目的属性偏好方向偏移,理论上能较为准确的预测每个用户对每个项目的喜好程度。

 

1算法准备

已知隐语义模型表达式:,在做推荐以前,我们需要先估计出表达式内的未知参数:。为了减少迭代次数,降低程序的时间成本,我们使用多元线性回归来初始化,但是由于缺乏对潜在因子的了解,我们用全为1的矩阵来初始化,随后带入到lasso回归进行迭代求解。

为了得到最后的参数,我们将的迭代过程分为了以下五个步骤:初始化、分块改善、最大化提升、潜在因子调整、迭代终止判断。

 

2算法流程

1初始化

输入评价矩阵和潜在因子个数(初始设置为50),调节参数设置为0.000001,迭代次数为中的初始值,lasso回归的系数(初始设置为1)。

2分块改善

在每一次迭代中,三个参数的更新都是相互独立的计算。

对于用户而言,利用lasso求解,所求出的结果是,其中,并计算

对于项目而言,利用lasso求解,所求出的结果是,而其中,并计算

对于,直接利用线性回归求解,其中,求出,并计算

3最大化提升

为了每一次的更新都保证最大的效率,虽然一次迭代三个参数都有更新,但是我们只选择一个。根据第二部分所介绍的参数更新准则,比较三个分块中I的大小,更新波动最大的区块求出的参数,其余两个的参数则保持不变。

4潜在因子调整

上述所求出的矩阵会存在多个符合条件的结果,所以需要应用第二部分所提到了的参数调整准则克服这一难题,即在每次更新之后都根据2.4.2中的公式进行调整。

5迭代终值判断

当最大的I值小于0.000001时,终止迭代,返回最终训练的参数,并带回原模型计算新的偏好矩阵;

否则,更新参数值,并返回第二步继续进行迭代。

 


3.1 参数更新算法图

四、movielens描述性分析

1movielens数据介绍

MovieLens数据中,一共有三个数据集,分别代表着用户属性信息、电影属性信息,以及用户对电影的评分。其中,用户属性包括性别、年龄、职位;电影属性包括动作、冒险、动画、儿童、喜剧、犯罪、纪录片、剧情、魔幻、黑色电影、恐怖、音乐、神秘、浪漫、科幻、惊悚、战争、西方十八种电影类别;评分数据包括了6040位用户对3883部各种题材电影(至少获得一位用户评分的电影共有3706部)的评分,评分取值为0-5,总计1000209条。

对这些数据我们首先做一些简单的描述性统计分析,来初步观察一下数据的结构并检查一下合理性。由于电影、用户、评分信息分别在三张表中,在做这些分析前先将三张表以用户和电影的ID为联合主键并起来。这一部分使用了Python作为脚本语言进行处理。

 

2电影平均评分

首先计算每部电影的平均评分,并取出平均评分最高的十部电影,见表4.1。可以看出,评分最高的前十部电影都得到了满分的评价,然而这些电影的名字对我们来说却十分陌生。由此我们可以猜测,这些电影之所以得到全满分的评价,很有可能是因为只得到了极少用户的评分,不具有代表性。

4.1 平均评分最高的10部电影


为了验证上述猜想,我们加入了电影影评数量变量,并重新绘制表格,取出评分最高的前14部电影列在了表4.2

 

 

 

 

 

4.2 评分最高的14部电影(含影评人数)

4.2的最后一列清晰的列出了每个电影的评分人数,我们发现前14电影里有13个的影评数小于10,说明这些5分的评价都是“名不符实”的。所以下面我们考虑将评分人数超过1000(用户总人数为6040)的电影提取出来重新进行排序,表4.3列出了评分排名前十的电影。

4.3 评分前十的电影(影评数大于1000


4.3所列出来的评分超过千人次的高分电影为:肖申克的救赎、教父、非常嫌疑犯、辛德勒名单、夺宝奇兵、后窗、星际大战、奇爱博士、卡萨布兰卡、第六感。不难发现,这些电影都是大家耳熟能详的,符合实际情况。

由于那些小众电影的评分人数过少,不具有分析价值,所以在后面的分析中,我们不再考虑观影人数很少的冷门电影。

3电影类型分析

Movielens数据中包含了近四千部电影评分数据,根据用户和电影属性,我们可以分析不同性别、年龄、职业用户的观影偏好。

我们首先根据3706部电影属性中的类别标签进行统计,这3706部各类电影所占比重,并绘制了如下饼图。

4.1 各类电影所占比例

由图4.1可以看出,就电影类别而言,话剧和喜剧几乎占据了所有电影的一半。这说明电影市场偏爱生产这两类电影,前者能带来精彩饱满的剧情,而后者能带来轻松愉快的气氛,都是深受观众喜爱的类型。

而占比例最少的电影类型分别是黑色电影、西部片和魔幻片。黑色电影风格晦暗、悲观且愤世嫉俗,风格较为压抑的,所以在电影市场里数量较少,不过这种电影虽数量少,但喜欢的人都会给予很高的评分;西部片也被称作牛仔片,类似于《让子弹飞吧》这样的电影,这种题材在20世纪初的时候在西方很盛行,而后逐渐落寞起来,所以所占比重较少;魔幻片一般会结合超自然,例如《哈利波特》、《爱丽丝梦游仙境》之类,这种电影实际的受众是很广泛的,我们这里因为只包括了2000年以前的电影,当时魔幻片并不是很多,所以导致了这里所占比重较少。

 

1)性别因素

我们认为男生性的性格等方面存在一定的差异,那这些差异是否对电影的评分存在影响?我们先观察了不同性别对最热门的20部电影,判断性别对于电影评分的差异,评分结果见表4.4

 

4.4 20部电影的分性别评分



由表4.4的数据可知,在这最受欢迎的20部电影中,男女性别似乎在电影评分上面没有太多的差异。这也间接说明了这20部评分高的电影都是佳作,受到大众的喜爱,所以不同性别在评分上自然不会存在太多差异。

所以我们扩大参考范围,将18类题材电影的评分分性别计算了平均评分,分析结果见图4.2,可以看出:

女性观众更偏好于动画、音乐、爱情等题材的电影。女性一般内心较柔软、细腻,大多喜欢音乐剧、浪漫爱情片。并且很多女性都是妈妈,会经常带小朋友们去看儿童动画片。

男性观众更偏好于动作片、黑色电影、战争片等。这也不难理解,男性性格特点是血性方刚,所以会喜欢这些略带暴力、讽刺、战争题材的电影。

整体而言,黑色电影的总体评价最高,而恐怖片的整体评价最低,这也说明观众在对电影评分的时候更多的考虑到了电影的实际内涵和现实意义,而不只是浅显的观影感受。

 


4.2 不同性别对18种题材电影的平均评分

 

2职业因素

除性别因素外,职业也能在一定程度上反映一个用户的文化水平、收入水平、性格等特征,所以我们分析不同职业对电影的平均没人的评论数,这样可以间接反应观影人数,结果见图4.3


4.3 不同职业的评分数

4.3可以看出,对电影比较热衷的职业主要是大学生(4)、管理层(7)以及其他职业(0)。大学生相对闲暇时间较多,电影是很多情侣约会,同学聚会热衷的地方,管理层也大多时间自由,并且注重娱乐生活。其他职业里可能会包括传媒工作者、自由职业者,这些人也都是电影市场的主要受众。

另一方面,图中最短的几个职业分别代表农民(8)、手工业者(18)、家庭主妇(9)、失业人员(19)和退休人员(13)。这些人大部分属于低收入人群或者娱乐生活匮乏的人群,所以这样的结果也是情理之中。唯一需要解释的——律师(11)也是观影极少的群体,这可能是由于律师的逻辑严密性极强,对于这些经常出现有矛盾、剧情虚构、夸张电影的无感。

 

五、推荐分析

经过第四部分的描述性分析,我们知道性别、年龄、职业对十八种题材电影的评分均有一定的影响,所以把它们当作预测变量放入模型是合理的,并且我们相信,考虑到这些解释变量之后,有助于我们得模型的构建。

 

1模型训练

我们先将全部数据带入模型当中,并根据新的评分矩阵计算,计算得,不是很理想。所以我们打算将原数据分为训练集和测试集,训练集用来训练模型,测试集用来检验模型。考虑到评分矩阵数据结构的特殊性,只对用户数进行划分,而电影数保持3706不变。且在划分训练集和测试集时,需要考虑矩阵计算的维度要求,无法进行随机抽取(模型因为维度不匹配而无法用于测试集)。

实际应用中,我们随机抽取个用户构成训练集,然后对剩下的用户根据某种分配方法分成个包含个用户的测试集。将模型应用于可得到,加上训练街,一共可以得到,计算个的均值,选择最小的模型作为最终的模型。

我们取,训练了9个模型,分别计算了各自的平均均方根误差,如下表所示。

5.1 不同的模型的

mean

1.728

0.971

2.583

2.287

2.397

1.601

2.172

2.394

2.501

u

500

1000

1500

2000

2500

3000

3500

4000

4500

train

1.856

0.971

2.788

2.373

2.512

1.665

2.233

2.470

2.568

test

1.715

0.939

2.558

2.242

2.334

1.434

2.109

2.317

2.415

 

1.852

0.990

2.455

2.135

2.324

1.433

2.094

2.314

2.413

 

1.687

0.978

2.687

2.437

2.545

1.654

2.255

2.506

2.609

 

1.754

0.965

2.498

2.234

2.351

1.667

2.138

2.366

 

 

1.556

0.967

2.645

2.322

2.431

1.668

2.205

 

 

 

1.699

0.943

2.551

2.280

2.388

1.685

 

 

 

 

1.819

0.946

2.559

2.282

2.402

 

 

 

 

 

1.663

0.985

2.562

2.280

 

 

 

 

 

 

1.750

0.987

2.218

 

 

 

 

 

 

 

1.597

1.006

 

 

 

 

 

 

 

 

1.794

 

 

 

 

 

 

 

 


5.1 各模型折线图

由表5.1、图5.1可以看出,在模型训练部分,平均随着的增加先降低,然后又增加再下降再上升,在时,取得了最小值。并且对应的10个训练集的几乎都小于1,平均值

因为用户对电影评分,不论是观众,还是电影,抑或是评分,随机性都比较大的,所以对于这一类数据的模型训练不需要用过多的样本进行训练,一定的模型加上一定的随机性可能会得到意想不到的结果。

 

2参数选择

根据上述分析,我们选择所训练出的模型作为最终模型(下简称,其他同理),下面需要对正则化函数里的惩罚因子λ和潜在因子的个数进行选择。经拟合计算后,不同λ值所对应的见表5.25.3

其中,默认值为


5.2 不同折线图λ值的

5.2可以看出λ0.2变到了0.3时,突然发生了变化,为了可以更好适应其他模型,我们决定取


5.3 不同折线图K值的

由图5.3可以看出,随着K的增加呈下降趋势,应该取大一些的K,但是沈教授的文章有提出,K一般在即可,所以我们决定取

 

3电影TOP10推荐

根据前面确定的参数,我们重新训练了,并将模型参数带入模型,计算出了新的电影评分矩阵,新的评分矩阵将用户没看过的电影也做了填充。我们对每一个用户的评分进行排序,最后就能够得到用户对新电影的偏好序列,从中选取部分即可进行推荐。

第四部分的分析,我们发现职业是影响电影评分的一个重要因素,且对电影比较热衷的职业主要是管理层(7)、大学生(4)以及其他职业(0),这三个职业对电影评分所占的比例接近了67%

为了可视化我们的推荐结果,我们从三个职业中随机选择了编号为7330254861三个用户进行推荐。提取了这三位用户的电影评价信息之后,计算出他们对每一类电影的平均评分,如表5.2所示。

5.2 三个用户已观看电影类别的评分

Moviename

73

Moviename

3025

Moviename

4861

Crime

5.0000

Western

5.0000

Musical

5.0000

Fantasy

4.5000

Crime

4.5000

Mystery

4.5000

Western

4.5000

Romance

4.2000

Animation

4.2000

Horror

4.3333

Adventure

4.0000

Horror

3.8333

Drama

4.1667

Film-Noir

4.0000

Action

3.8182

Action

4.1579

War

3.9231

Western

3.7500

Children's

4.0000

Drama

3.8947

Film-Noir

3.5385

Romance

4.0000

Action

3.8667

War

3.0000

Adventure

3.8333

Sci-Fi

3.7209

Documentary

2.7500

Sci-Fi

3.5556

Thriller

3.6875

Crime

2.5000

Thriller

3.5000

Comedy

3.6667

Sci-Fi

2.0000

 

1用户73 TOP10推荐

用户73,男,管理层,年龄在45-49之间。对该用户所有未看过的电影进行评分排序,列出了评分最高的前十部电影,见表5.3

5.3 用户73TOP10电影推荐

MovieID

Title

Genre

User(73)

2858

American Beauty (1999)

Comedy|Drama

4.669429

2997

Being John Malkovich (1999)

Comedy|Drama

3.713606

608

Fargo(1996)

Crime|Drama|Thriller

3.325717

296

Pulp Fiction(1994)

Crime|Drama

3.244607

2762

Sixth Sense(1999)

Thriller

3.043435

50

Usual Suspects(1995)

Crime|Thriller

2.967508

593

Silence of the Lambs (1991)

Drama|Thriller

2.94804

1617

L.A. Confidential (1997)

Crime|FilmNoir|Mystery|Thriller

2.856124

318

ShawshankRedemption(1994)

Drama

2.833647

2599

Election(1999)

Comedy

2.748397

5.2以看出用户73评分最高的五类电影分别是:犯罪、魔幻、西部、恐怖、剧情。而表5.3中推荐给该用户的电影题材为:犯罪、剧情、喜剧、惊悚。前三部电影分别是:Americanbeautybeingjohnmalkovichfargo,都是剧情类电影,几乎与用户73所感兴趣的电影一致。

 

2用户3025 TOP10推荐

用户3025,男,大学生,年龄在18-24岁。TOP10的电影推荐见表5.4

5.4 用户3025TOP10电影推荐

MovieID

Title

Genre

User(3025)

356

Forrest Gump (1994)

Comedy|Romance|War

3.695447

597

Pretty Woman (1990)

Comedy|Romance

3.282008

539

Sleepless in Seattle (1993)

Comedy|Romance

3.203592

1784

As Good As It Gets (1997)

Comedy|Drama

3.108846

1307

When Harry Met Sally(1989)

Comedy|Romance

3.075615

3255

League of Their Own(1992)

Comedy|Drama

3.039105

2918

Ferris Bueller's Day Off(1986)

Comedy

2.992783

1393

Jerry Maguire (1996)

Drama|Romance

2.953907

587

Ghost (1990)

Comedy|Romance|Thriller

2.918606

11

American President(1995)

Comedy|Drama|Romance

2.879049

5.2可以看出用户73评分最高的五类电影分别是:西部、犯罪、浪漫、冒险、黑色电影。而表5.4中推荐给该用户的电影题材为:浪漫、喜剧、剧情。推荐给该用户大多前三的电影分别为:Forrest GumpPretty WomanSleepless in Seattle,都是些轻喜剧爱情片,与该用户以往的观影类型相似,此外,系统捕捉到了一丝恋爱的气息。

 

3用户4861 TOP10推荐

用户4861,女,其他职业,年龄在35-44之间。TOP10的电影推荐见表5.5

5.5 用户4861TOP10电影推荐

MovieID

Title

Genre

User(4861)

11

American President(1995)

Comedy|Drama|Romance

2.879049

2571

Matrix, The (1999)

Action|Sci-Fi|Thriller

4.71435

589

Terminator 2:(1991)

Action|Sci-Fi|Thriller

4.207498

260

Star Wars: Episode IV

Action|Adventure|Fantasy|Sci-Fi

4.13472

1196

Star Wars: Episode V

Action|Adventure|Drama|Sci-Fi|War

4.070115

480

Jurassic Park (1993)

Action|Adventure|Sci-Fi

3.823875

1240

Terminator, The (1984)

Action|Sci-Fi|Thriller

3.66266

2628

Star Wars: Episode I

Action|Adventure|Fantasy|Sci-Fi

3.531843

2916

Total Recall (1990)

Action|Adventure|Sci-Fi|Thriller

3.494237

1200

Aliens (1986)

Action|Sci-Fi|Thriller|War

3.339601

1270

Back to the Future (1985)

Comedy|Sci-Fi

3.24642

5.2可以看出用户4681评分最高的五类电影分别是:音乐、神秘、动画、恐怖、动作。而表5.5中推荐给该用户的电影题材为:动作、冒险、科幻。前三部电影分别是:AmericanpresidentThe MatrixTerminator 2: Judgment Day,后面两部都是动作科幻类电影。虽然推荐结果和用户4681之前看得音乐、动画类题材有一定差别,但是也和神秘、恐怖、动作类型有一定的关联,说明我们的算法也不是光会推荐用户经常看的电影,也会给一些其他的备选方案。

以上三个用户的TOP10推荐可视化,我们发现虽然在类型上存在一点偏差,但是推荐模型还是能较好的考虑用户和电影的属性,推荐出来的结果大多是用户之前就喜欢的,或者相关的类型,没有出现较为离谱的现象。

 

六、总结与评价

我们首先运用隐语义模型对电影评分矩阵进行分解,然后得到了三个待估计参数矩阵(向量),再而定义了损失函数以及正则化函数。对于参数迭代部分,我们分三个模块分别进行迭代求解,选择误差减小程度最大的参数进行更新,周而复始直至收敛,最后得到模型参数。模型求解之后,将参数带入原模型,计算出新的用户偏好矩阵,对于新的电影评分进行排序,从而实现电影TOP 10推荐。

 

1模型的优点

不同的用户有不同的偏好,不同的电影也有不同的特点,每个人的评分准则都不一样,对电影的容忍度也各不相同,对电影评分的均值都可能存在显著差异。利用LFM模型可以综合考虑用户和电影的偏好,充分利用已有信息,更好地实现“千人千面”,能够有效降低错误推荐的概率。并且,根据新的偏好矩阵做出的推荐,能够减少偏差,真正的实现个性化推荐。

在模型训练过程中,因为用户对电影的评分随机性很大,我们选取了适量的训练样本,保证了模型对于用户和电影都具有一定的解释性,也防止了训练过度过拟合现象的发生,一定的随机性促使我们的模型得到了更好的效果。

 

2模型的缺点

在模型参数初值得设定部分,我们只是简单了运用多元回归解或者是1矩阵,一开始便给予了潜在因子等权重,这样的设置可能和数据结构相悖,一方面不利于迭代,有可能增加时间成本,另一方面有可能会导致模型最后陷入局部最优,而不是全局最优。所以,关于初值设定部分,有待进步一研究。

对于训练出来的潜在因子,我们无法解释其非零项存在的意义,所以无法找到用户或者电影的隐藏属性,说明机器学习出来的结果我们无法识别,这也在另一个角度说明了,我们得模型可能存在一定不合理性,还有待进一步的修改和提高。

冷启动问题也还是没有得到解决,本模型只利用先验信息先求出用户和电影的偏好向量来进行推荐。电影的偏好矩阵好求,但是一个新用户或者新电影加入到模型中就无法直接利用模型进行预测,所以下一步的思路便是利用相似度的思想,从已有的偏好矩阵中找出最类似的一组偏好向量进行初步求解,再之后根据用户反馈进行迭代求出合适值。