在上一篇博客里面分享的是《推荐系统实践》中冷启动相关的处理算法,对此还不熟悉的读者可以戳这里。

关于这个系列会分为如下几个部分:

《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇

完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice

下面将开始本系列的第四部分——UGC推荐篇

文章目录

  • 4 UGC推荐
    • 4.1 基于用户UGC标签进行推荐
      • 4.1.1 最简单的算法(SimpleTagBased)
      • 4.1.2 利用TF-IDF进行改进(TagBasedTFIDF和TagBasedTFIDF++)
      • 4.1.3 标签扩充改进
      • 4.1.4 基于图的推荐
    • 4.2 给用户推荐标签
      • 4.2.1 基于统计的方法
      • 4.2.2 基于图的标签推荐

4 UGC推荐

用户的标签行为数据集一般由(u, i, b)三元组组成,表示用户u给物品i打上了标签b的行为。

4.1 基于用户UGC标签进行推荐

代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter4/基于用户标签的推荐系统.ipynb

4.1.1 最简单的算法(SimpleTagBased)

在拿到用户标签行为数据之后,一个最容易想到的方法就是:

  1. 统计每个用户最常用的标签
  2. 对于每个标签,统计被打过这个标签次数最多的物品
  3. 对于每个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品进行推荐

用公式表示用户u对物品i的兴趣为,其中,nu,bn_{u,b}nu,b​是用户u打过标签b的次数,nb,in_{b,i}nb,i​是物品i被打过标签b的次数。

p(u,i)=∑bnu,bnb,ip(u, i) = \sum_b n_{u,b}n_{b,i}p(u,i)=b∑​nu,b​nb,i​

4.1.2 利用TF-IDF进行改进(TagBasedTFIDF和TagBasedTFIDF++)

上面的公式倾向于给热门标签对应的热门物品很大的权重,从而不能反映用户个性化的兴趣,因此可以借鉴TF-IDF思想,对上述公式进行改进(TagBasedTFIDF):

p(u,i)=∑bnu,blog(1+nb(u))nb,ip(u,i)=\sum_b \frac{n_{u,b}}{log(1+n_b^{(u)})} n_{b,i}p(u,i)=b∑​log(1+nb(u)​)nu,b​​nb,i​

其中nb(u)n_b^{(u)}nb(u)​记录了标签b被多少个不同的用户使用过。

可见这个公式是对热门标签进行惩罚,当然对于热门物品也可以进行同样的惩罚(TagBasedTFIDF++):

p(u,i)=∑bnu,blog(1+nb(u))nb,ilog(1+ni(u))p(u,i)=\sum_b \frac{n_{u,b}}{log(1+n_b^{(u)})} \frac{n_{b,i}}{log(1+n_i^{(u)})}p(u,i)=b∑​log(1+nb(u)​)nu,b​​log(1+ni(u)​)nb,i​​

其中ni(u)n_i^{(u)}ni(u)​记录了物品i被多少个不同的用户打过标签

4.1.3 标签扩充改进

前面的算法中,用户兴趣和物品的联系是通过B(u)⋂B(i)B(u) \bigcap B(i)B(u)⋂B(i)中的标签建立的。但对于新用户或新物品,这个集合中的标签数量会很少,因此可以考虑对标签集合进行扩展。

一种简单的扩充方法是基于邻域的做法,即通过计算标签之间的相似度进行扩充。对于标签的相似度计算可以从数据中统计,当两个标签同时出现在很多物品的标签集合中时,就可以认为它们具有较大的相似度。

对于标签b,令N(b)N(b)N(b)为有标签b的物品的集合,nb,in_{b,i}nb,i​为给物品i打上标签b的用户数,可以用如下的余弦相似度计算标签b和标签b’的相似度:

sim(b,b′)=∑i∈N(b)⋂N(b′)nb,inb′,i∑i∈N(b)nb,i2∑i∈N(b′)nb′,i2sim(b, b')=\frac{\sum_{i\in {N(b) \bigcap N(b')}}n_{b,i}n_{b',i}}{\sqrt{\sum_{i \in N(b)} n_{b,i}^2 \sum_{i \in N(b')} n_{b', i}^2}}sim(b,b′)=∑i∈N(b)​nb,i2​∑i∈N(b′)​nb′,i2​​∑i∈N(b)⋂N(b′)​nb,i​nb′,i​​

后续就可以根据这种标签的相似度进行聚合排序,而后作为用户新的标签集合。

4.1.4 基于图的推荐

相比较于协同过滤算法中提到的(User, Item)二元组,这里的数据是(User, Item, Tag)三元组,因此也可以构建成如下的图:

其中ABC表示用户,abc表示物品,123表示标签。在建立了这种图之后,就可以用协同过滤部分提到的PersonalRank算法进行随机游走计算了。

而对于前面的简单算法来说,用户对物品的兴趣公式为:

P(i∣u)=∑bP(i∣b)P(b∣u)P(i|u)=\sum_b P(i|b)P(b|u)P(i∣u)=b∑​P(i∣b)P(b∣u)

其实这个可以用简化的图模型来建模,即SimpleTagGraph,如下图所示,它将前面的三条边(User,Item),(Item, Tag),(User, Tag)改成了两条边,去掉了(User, Item)边,并且改为了有向图。

这时用PersonalRank算法, 设K=1K=1K=1,就等价于前面提到的简单推荐算法SimpleTagBased。

4.2 给用户推荐标签

代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter4/给用户推荐标签.ipynb

给用户推荐标签的好处在于:1)方便用户输入;2)提升标签质量

4.2.1 基于统计的方法

当用户u给物品i打标签时,有如下4种方法给用户推荐和物品i相关的标签:

  1. PopularTags:给用户u推荐整个系统里面最热门的标签
  2. ItemPopularTags:给用户u推荐物品i上面被打的最热门标签
  3. UserPopularTags:给用户u推荐他自己经常打的标签
  4. HybridPopularTags:线性加权融合方式2、3,对两个列表进行线性相加之前,需要对其按照各自的最大值进行归一化

4.2.2 基于图的标签推荐

在根据用户打标签的行为生成图之后(4.1.4),同样可以利用PersonalRank方法进行排名。这次的问题是,当用户u遇到物品i时,会给物品i打什么样的标签。因此,需要重新定义顶点的启动概率:

PR(v)=rv(k)={αv(k)==v(u)1−αv(k)==v(i)0otherPR(v)=r_{v(k)} = \left\{ \begin{array}{lr} \alpha & v(k)==v(u) \\ 1- \alpha & v(k)==v(i)\\ 0 & other \end{array} \right. PR(v)=rv(k)​=⎩⎨⎧​α1−α0​v(k)==v(u)v(k)==v(i)other​

也就是说,只有用户u和物品i对应的顶点有非0的启动概率,而其他顶点的启动概率都为0。在上面的定义中,v(u)v(u)v(u)和v(i)v(i)v(i)的启动概率并不相同,v(u)v(u)v(u)的启动概率是α\alphaα,而v(i)v(i)v(i)的启动概率是1−α1-\alpha1−α。参数α\alphaα可以通过离线实验选择。

对于UGC推荐部分的介绍就到这里,下面将继续分享第五部分——借助上下文信息推荐篇

《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇相关推荐

  1. 600页!分享珍藏很久的《推荐系统学习手册》(附下载链接及入门经验)

    这是之前学习推荐系统时的学习资料,非常全面,包含经典模型的解析及代码实现.模型的评估.最新工业界论文解读等等,全网仅此一份!该手册有PDF版本和Markdown版本,总计有600多页! 资料领取方式: ...

  2. 700页!分享珍藏很久的《推荐系统学习手册》(附下载链接及入门经验)

    这是之前学习推荐系统时的学习资料,非常全面,包含经典模型的解析及代码实现.模型的评估.最新工业界论文解读等等,全网仅此一份!该手册有PDF版本和Markdown版本,总计有700多页! 资料领取方式: ...

  3. fast rcnn 论文解读(附代码链接)

    要解决的问题 1.RCNN和SPPnet分多步训练,先要fine tuning一个预训练的网络,然后针对每个类别都训练一个SVM分类器,最后还要用regressors对bounding-box进行回归 ...

  4. Python 三十大实践、建议和技巧(附代码链接)

    来源:授权自AI科技大本营(ID:rgznai100) 本文约4900字,建议阅读10+分钟. 本文为你提供30个Python技巧,请收下! [ 导读 ]2020年,你又立了什么新的 Flag?新一年 ...

  5. 独家 | 指南:不平衡分类的成本敏感决策树(附代码链接)

    作者:Jason Brownlee 翻译:陈超 校对:冯羽 本文约3500字,建议阅读10+分钟 本文介绍了不平衡分类中的成本敏感决策树算法. 决策树算法对平衡分类是有效的,但在不平衡数据集上却表现不 ...

  6. 独家 | 浅谈强化学习原理(附代码链接)

    作者:Michel Kana 翻译:王琦 校对:王雨桐 本文约4900字,建议阅读15分钟. 本文介绍了强化学习的基本原理,并通过代码实例来讲解如何找到最优策略. Google在2017年年底发布了A ...

  7. 【干货】推荐系统解构.pdf(附下载链接)

    今天给大家带来姚凯飞老师所做的分享<推荐系统解构.pdf>,本分享共包含如下四大部分: 1.推荐概述: 2.关键因素建模: 3.推荐流程拆解: 4.系统&全局生态. 本PPT已收录 ...

  8. 手把手教你使用Flask轻松部署机器学习模型(附代码链接) | CSDN博文精选

    作者 | Abhinav Sagar 翻译 | 申利彬 校对 | 吴金笛 来源 | 数据派THU(ID:DatapiTHU) 本文旨在让您把训练好的机器学习模型通过Flask API 投入到生产环境  ...

  9. 独家 | 数据转换:标准化vs 归一化(附代码链接)

    作者:Clare Liu, 英国金融科技数据科学家 翻译:林鹤冲 校对:王紫岳 本文约2300字,建议阅读10分钟 本文将解释数据转换中常见的特征缩放方法:"标准化"和" ...

  10. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...

最新文章

  1. 2020年的AI现状
  2. 面试心得与总结—BAT、网易、蘑菇街
  3. python斐波那契数列前20项_兔子繁殖问题带来的智商碾压:斐波那契数列趣谈
  4. input上传文件个数控制
  5. 快速排序的原理以及Java代码
  6. VB 游戏外挂操作类
  7. 前端存储 (2) - sessionStorage ,localStorage
  8. 关于PCB板热设计的学习总结
  9. 移动端开发旅游预约_套餐列表页面动态展示_套餐详情页面动态展示
  10. 计算机computer英语划分音节,computer是什么意思
  11. 如何使用JSON Web令牌(JWT)保护您的文档
  12. 群晖NAS如何修改默认404页面
  13. 信息学奥赛一本通:1413:确定进制
  14. 58沈剑-数据库使用规范
  15. 下载了JFLASH安装后还出现The select device is unknown to this version of the J-LINK software
  16. 电磁炉各主要元件名词,符号及功能解析
  17. 图计算思维与实践 (二)核心概念与算法
  18. 【推荐实践】腾讯推荐系统中的深度匹配模型
  19. 计算机毕业设计-springboot停车场预约管理系统源码-停车位预约系统java代码-车位管理系统
  20. 数学难题能不能用计算机解决,6个尚未解决的世界数学难题

热门文章

  1. 毕设中涉及层次分析法的EXCEL处理步骤
  2. python彩票预测算法软件_python用遗传算法 神经网络 模糊逻辑控制算法对彩票乐透数据进行预测...
  3. 如果secureCRT安装时位置改变,EVE-NG如何关联secureCRT
  4. VMClean(vmware卸载清理,解决卸载MSI问题)
  5. 获取所有股票历史数据存到Excel
  6. WPF制作简易串口调试助手(上位机部分)
  7. 调用图(Call Graph)
  8. 永久更改R包的安装目录 #R语言
  9. 2021美赛C题思路
  10. 汉澳sinox领先特性助其成为领先的操作系统