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打分为什么效果这么好: 对于人的处理,从心情角度。 而不是从内容角度。 实际上: 在真实的推荐系统上,肯定不 能获得之后的评分。但是能够知道今 天的评分。有一定的作用。 文献综述 模型建立 实证研究 比赛之后 谢谢