Transcript PowerPoint

基于邻域,LDA和FM的
混合推荐系统设计
作者: 庄程旭
清华大学电子工程系
百度电影推荐
训练数据:1,262,741
测试数据: 314,679
电影总数:
8,369
用户总数: 143,670
标签总数:
1,129
平均关注数: 6.91
用户观看电影记录:
9,871,737
问题描述
Basic
Models
kNN
1. LibFM
RBM
2. SVD++
Factorization
machines
文献综述
Random
Forest
模型建立
实证研究
比赛之后
1. Tag 作为item feature
1
𝑟 = 𝑥 · (𝑦 +
𝑡𝑖 ) + 𝑟
𝑠
1. 根据tag的所标注电影数进行分类
根据用户喜爱程度调整参数
2.
𝑟 = 𝑥 · (𝑦 +
𝑟 = 𝑥 · (𝑦 +
文献综述
模型建立
1
1
1 𝑡𝑖1 +
𝑠1
𝑡𝑖 ) + 𝑟 𝑠2
𝑠𝑖
实证研究
𝑡𝑖2 +
1
𝑠3
𝑡𝑖3 ) + 𝑟
比赛之后
Basic Features
2. 将Social信息直接作为user feature
1
𝑟 = 𝑦 · (𝑥 +
𝑝𝑖 ) +𝑟
𝑠
1.
2. 只保留相似度高的好友
只保留入度高的好友
1
𝑟 = 𝑦 · (𝑥 +
𝑠′
1
相似度计算:𝑟 =
𝑛−1
文献综述
模型建立
𝑝𝑖′ ) +𝑟
𝑋𝑖 −𝑋
𝑆𝑋
𝑌𝑖 −𝑌
𝑆𝑌
实证研究
比赛之后
Advanced Features
1.
计算“品味相同”的人,取前30
2.
计算“品味相同”的电影,取前
基本思路:参考kNN的思想,参
个直接作为user feature
feature
30个直接作为movie
考相邻的人的打分来得出最后的
1
打分
𝑥 · (𝑦
𝑦′𝑖 ) +𝑟
𝑟=𝑦
𝑥+
𝑥′
𝑠21
文献综述
模型建立
实证研究
比赛之后
初步实验
每一套模型均采用以下4种参数和程序运行方式:
LibFM:采用MCMC学习,初始值选取参数0.1,特征维
数20维,迭代100轮
SVD++_2:采用SGD学习,迭代200轮,特征维数50维,
SVD++_3:采用SGD学习,迭代400轮,特征维数50维,
SVD++_1:采用SGD学习,迭代200轮,特征维数50维,
前100轮步长0.01,后100轮步长0.001,参数惩罚
前200轮步长0.01,后200轮步长0.001,参数惩罚
前100轮步长0.01,后100轮步长0.001,参数惩罚0.1。
0.0001,用sigmoid化。
文献综述
模型建立
实证研究
比赛之后
初步实验
模型
LibFM
SVD++_1
SVD++_2
SVD++_3
Tag
0.6198
0.6382
0.6242
0.6435
GoodTag
0.6186
0.6390
0.6262
0.6451
Tag+diff
0.6200
0.6348
0.6283
0.6592
Sns
0.6207
0.6388
0.6297
0.6426
Sns+thread 0.6208
0.6389
0.6325
0.6527
Sns50
0.6227
0.6375
0.6243
0.6510
Snsall
0.6234
0.6375
0.6259
0.6440
Movieall
0.6148
0.6304
0.6168
0.6365
文献综述
模型建立
实证研究
比赛之后
初步分析
Tag和sns之间的对比
1. Tag比起sns来说更加密集
2. 这是个很不成熟的Sns系统:
一部电影平均有12.93个tag
3. 一部电影至少1个tag,大部分电影有10个tag
一个人平均只有6.91个关注(并且大部
总共143,670个人,有98733个人只有3个或者
分人关注一个从未有打分记录的官方账号)
以下被关注数目,有40715个人根本没有人关注
文献综述
模型建立
实证研究
比赛之后
根据数据分析
含义:
本质考虑:
2.
1. movie数据的集中性
user数据的分散性
相似的人太相似;
12000000
12000000
在人和电影的二分图之间引
user的相似对里有54.2%的相似度超过
10000000
10000000
入隐层来增强两两之间的联系,从
0.5,甚至有30.1%的相似度超过0.7。
而相当于扩大了训练数据量
8000000
8000000
而movie的相似对里面只有9.1%的相似
6000000
度超过了0.5。
6000000
4000000
而相似的电影能够很好的扩
大数据量
2000000
2000000
通过相似的电影,能够看到
0
0
更多的潜在的打分用户
文献综述
模型建立
实证研究
445
519
593
667
741
815
889
963
1037
1111
1185
1259
1333
1
72
143
214
285
356
427
498
569
640
711
782
853
924
995
1
1066
75
1137
149
1208
223
1279
297
1350
371
4000000
比赛之后
深入分析
现象:
人的打分记录的分散。
电影打分记录的集中。
“对称性破缺”
启发:
movie的feature效果更好。
因为movie需要更多的自由度!
来应对更多的user。
文献综述
模型建立
实证研究
比赛之后
深入分析
深入思考:
对于不同数据量的电影,给
予不同的重视,用较多的feature的
数量来满足其适应data的需求。对
于较少的数据量的电影,用较少的
feature来防止过拟合。
文献综述
模型建立
实证研究
比赛之后
修改之前的模型
1. 用聚类来使user更集中:
2.
将相似电影和其他feature混合:
1. movie
用LDA的方法来做user的聚类,之
+ tag
后添加最相似的30个类作为user
movie
+ snsall
feature。
2. movie50
直接选取观看电影数超过100的人
3.
文献综述
作为相似分析的全集。
只选取打过分的人作为相似分析的
全集(只有9873个人打过分)
模型建立
实证研究
比赛之后
新模型测试
模型
LibFM
SVD++_1
SVD++_2
SVD++_3
Movie+tag
0.6138
0.6309
0.6159
0.6390
Movie50
0.6148
0.6320
0.6180
0.6421
Movie+snsall 0.6146
0.6279
0.6189
0.6526
Snsallchange 0.6207
0.6381
0.6261
0.6417
Snsallthread
0.6219
0.6381
0.6262
0.6432
Sns_topic
0.6225
0.6403
0.6309
0.6373
Snsall
0.6234
0.6375
0.6259
0.6440
Movieall
0.6148
0.6304
0.6168
0.6365
文献综述
模型建立
实证研究
比赛之后
在比赛中实践
比赛中共设计了30套以上的模型:
Tag+average,user_movie
Sum+average,movie_user
Sns+actor,movietagall
用最优线性混合对于所有的模型进行混合
Movie+topic,sns+tag+movie
…
技巧:
文献综述
切分训练数据,重新训练模型后混合结果;
对于训练数据,做后抹零处理
…
模型建立
实证研究
比赛之后
深入思考
如何利用不成熟的sns信息?
长尾数据的利用一直是机器学习的难
题。
如何良好的聚类user信息?
这个主要的思路在于找到很好的相似
人。品味相似,而且能够扩充数据。
文献综述
模型建立
实证研究
比赛之后
深入思考
更好的寻找“相似”?
现在寻找相似的方法忽略了二
阶相似之间的联系。
因此可以采用随机游走的方法,
关在在于多游走几次。
问题在于时间效率。
文献综述
模型建立
实证研究
比赛之后
对于推荐系统实践的建议
相似人
相似电影
Tag和标签
文献综述
模型建立
实证研究
比赛之后
比赛之后对于训练集的重新拷问
为什么和第一名差这么多?
数据泄露。
文献综述
模型建立
实证研究
比赛之后
比赛之后对于训练集的重新拷问
对于user history的顺序问题:
乱序?
时间顺序!!
文献综述
模型建立
实证研究
比赛之后
比赛之后对于训练集的重新拷问
前k打分,后k打分:vali上的rmse为
0.6173
Movie_tag:vali上打分0.6223
打乱顺序之后:vali上打分0.6332
文献综述
模型建立
实证研究
比赛之后
比赛之后对于训练集的重新拷问
前k打分,后k打分为什么效果这么好:
对于人的处理,从心情角度。
而不是从内容角度。
实际上:
在真实的推荐系统上,肯定不
能获得之后的评分。但是能够知道今
天的评分。有一定的作用。
文献综述
模型建立
实证研究
比赛之后
谢谢