推荐系统-基于标签的Top-N个性化推荐代码实现

(5-1)基于标签的推荐:标签的获取和处理方法 基于标签的推荐是一种常见的推荐系统方法,它使用事先定义好的标签或者标签集合来描述物品(如电影、音乐、图书等)的特征,然后根据用户的兴趣和偏好,通过匹配标签来推荐相关的物品。在本章的内容中,将详细讲解基于标签的推荐的知识和用法。 阅读详情

随着移动互联网的快速发展,UGC标签系统受到越来越多推荐应用,标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响,于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物品〉的三维关系拆分为〈用户-标签〉和〈标签-物品〉两个二维关系。 通过推荐标签集来匹配与其相对应的物品,为了提高推荐的精准率,该算法利用标签之间的影响,并基于匹配物品中所含标签间存在的关联关系对物品进行满意度建模,该模型是一种概率模型。在计算用户-标签和用户-物品之间的兴趣度和满意度时使用了协同过滤的思想来补全稀疏值。在公开的数据集中,与现有算法相比,该算法在精准率、召回率上均有明显提高。
因此,本文将主要探讨如何利用用户打标签的行为为其推荐物品。一个用户标签行为的数据集可以由一个三元组集合表示,其中每条样本(u,i,b)表示用户u为物品i打上了标签b。

1、标签作为特征/类别划分

我们可以将标签看做是LFM中的隐类(这里是显式的),用户u对物品i的兴趣度可表示为:
p(u,i)=∑bnubnbi p(u,i)=\sum_{b}n_{ub}n_{bi} p(u,i)=b∑​nub​nbi​
nubn_{ub}nub​:用户u打过标签b的次数,可以看做是用户u对b类物品的喜好程度;
nbin_{bi}nbi​:物品i被打过b标签的次数,可以看做物品i属于b类的”概率“值
仔细研究以上公式我们可以发现如下缺点:

  • 热门标签给nubn_{ub}nub​的权重很大;
  • 热门物品给nbin_{bi}nbi​的权重也很大;

借鉴TF-IDF的思路,可以通过惩罚用户或物品中热门标签的方式来优化以上公式:
p(u,i)=∑bnublog(1+nbu)nbilog(1+niu)p(u,i)=\sum_{b}\frac{n_{ub}}{log(1+n_b^u)}\frac{n_{bi}}{log(1+n_i^u)} p(u,i)=b∑​log(1+nbu​)nub​​log(1+niu​)nbi​​

  • 1+nbu1+n_b^u1+nbu​:标签b被多少个用户使用过;
  • niun_i^uniu​:物品i被多少个用户打过标签;
    标签的稀疏性:对于新用户或新物品,集合B(u)⋂B(i)中的标签数量很少。
1.1 标签扩展

为提高推荐准确率,需要对标签集合进行进一步扩展,如果用户使用过某个标签,我们可以将与这个标签相似的其他标签也加入到用户标签集合中去。扩展标签的方式有很多,常用的有话题模型,这里介绍一种基于邻域的方法,核心是计算标签之间的相似度。可以用两个标签下物品的重合度来计算它们之间的相似度
Alt

2、 适用场景:

  • 商城类:用户偏好商品UGC标签推荐;
  • 社交类:用户喜欢UGC标签推荐;

3、冷启动问题解决方案:

  • 客户注册时,勾选喜欢的标签,如是商城勾选喜欢的商品标签,如是社交内网站勾选喜欢社交类别;
  • 热门商品填充;

4、基于商品标签推荐代码

/**商品数据*/
case class Product(productId:Int, name:String, imageUrl:String, categories:String, tags:String)
//mongodb 配置
case class MongoConfig(uri:String, db:String)
//定义标准推荐对象
case class Recommendation(productId:Int, score:Double)
//定义商品相似度列表
case class ProductRecs(productId:Int, recs:Seq[Recommendation])

object ContentRecommender {
  //定义数据存储mongodb存储的表名
  val MONGODB_PRODUCT_COLLECTION = "product"
  //定义一个基于内容推荐商品列表
  val CONTENT_PRODUCT_RECS = "ContentBasedProductRecs"
  //总特征数量:本身词汇比较多,不设置会按照很大特征值(消耗内存高), 特征数量其实Hash桶数量,设置少会导致hash碰撞
  var NUM_FEATURES = 800
  //推荐商品数,最小相似度值控制
  val PRODUCT_SIMILAR_RATE = 0.4

  def main(args: Array[String]): Unit = {
    val config = Map(
      "spark.cores" -> "local[*]",
      "mongo.uri" -> "mongodb://localhost:27017/spark-recommender",
      "mongo.db" -> "spark-recommender"
    )
    val sparkConf = new SparkConf().setMaster(config("spark.cores")).setAppName("ContentRecommender")
    val spark = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._
    implicit val mongoConfig = MongoConfig(config("mongo.uri"), config("mongo.db"))

    //1、加载商品数据
    val productTagsDF = spark.read
      .option("uri", mongoConfig.uri)
      .option("collection", MONGODB_PRODUCT_COLLECTION)
      .format("com.mongodb.spark.sql")
      .load()
      .as[Product]
      .map {
        item =>
          val tags = item.tags.replace('|', ' ')
          (item.productId, item.name, tags)
      }
      .toDF("productId", "name", "tags")
      .cache()

    //2、计算文档总分词数
    val dsTags:Dataset[Array[String]] = productTagsDF.select("tags").map(x => x.toString.split(" "))
    val all_terms: Array[String] = dsTags.flatMap(iterArr => iterArr).distinct().collect()
    NUM_FEATURES = all_terms.length

    //3: 用TF-IDF提取商品特征向量
    val tokenizer = new Tokenizer().setInputCol("tags").setOutputCol("words")
    val wordsDataDF = tokenizer.transform(productTagsDF)

    //4、计算TF:定义一个HashingTF工具,计算频次
    val hashingTF = new HashingTF().setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(NUM_FEATURES)
    val featurizedDataDF = hashingTF.transform(wordsDataDF)
    
    //5、定义一个IDF工具,计算TF-IDF
    val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
    val idfModel = idf.fit(featurizedDataDF)
    val rescaledTfIDF = idfModel.transform(featurizedDataDF)

    //6、对数据进行转换,得到RDD的features
    val productFeatures = rescaledTfIDF.map {
      row => (row.getAs[Int]("productId"), row.getAs[SparseVector]("features").toArray)
    }.rdd
      .map {
        case (productId, features) => (productId, new DoubleMatrix(features))
      }

    //计算余弦相似度
    val productRecsDF = productFeatures.cartesian(productFeatures)
      .filter {
        case (a, b) => a._1 != b._1 
      }
      .map {
        case (a, b) =>
          val simScore = cosineSim(a._2, b._2) 
          (a._1, (b._1, simScore))
      }
      .filter(_._2._2 > PRODUCT_SIMILAR_RATE) 
      .groupByKey()
      .map {
        case (productId, recs) =>
          val list = recs.toList
          ProductRecs(productId, list.map(x => Recommendation(x._1, x._2)))
      }.toDF()
    storeDFInMongoDB(productRecsDF, CONTENT_PRODUCT_RECS)

    spark.stop()
  }


  /**
   * 存储信息到mongodb数据库
   *
   * @param df
   * @param collectionName
   * @param mongoConfig
   */
  def storeDFInMongoDB(df: DataFrame, collectionName: String)(implicit mongoConfig: MongoConfig): Unit = {
    df.write
      .option("uri", mongoConfig.uri)
      .option("collection", collectionName)
      .mode(SaveMode.Overwrite)
      .format("com.mongodb.spark.sql")
      .save()
  }

  /**
   * 计算两个向量集合的余弦相似度
   *
   * @param product1 商品1的矩阵
   * @param product2 商品2的矩阵
   */
  def cosineSim(product1: DoubleMatrix, product2: DoubleMatrix): Double = {
    product1.dot(product2) / (product1.norm2() * product2.norm2())
  }
}
个性化阅读中的推荐系统(一) 最近要为一个资讯类的项目加入个性化推荐的逻辑,以给用户展示更加符合其阅读偏好的文章,提高点击率。之前研究过相关理论,这次在工程中应用上,也属于一边摸索一边实践的过程。 概述 推荐系统中常用的推荐算法有: - 基于内容的推荐content-based - 协同过滤collaborative filtering - 基于模型的推荐,隐语义模型(LFM, latent factor 阅读详情

相关推荐

2021-09-13Top-N 推荐系统,通常指的是个性化推荐系统,有别于热门推荐。

2.1 Top-N 推荐系统 Top-N 推荐系统,通常指的是个性化推荐系统,有别于热门推荐。个性化推荐的 研究于 20 世纪 90 年代作为独立的概念提出[27],旨在根据用户的属性信息和历史行为 等构建用户画像,然后从推荐对象(商品、服务等,抽象为物品)集合中为用户提供 一个个性化的推荐列表,以满足不同用户的多元化信息需求。 2.1.1 推荐系统的形式化描述 推荐系统的基本任务是联系用户和物品,并依据特定规则选择与用户最相关的 N 个物品进行推荐。设ࣝ表示所有用户的集合,࣭表示所有可能推.

具身机器人和通用AI 2062

「从零入门推荐系统」19:H&M推荐系统代码实战案例

作者|gongyouliu编辑 |gongyouliu我们在上一章中利用Netflix prize数据集讲解了最基础、最简单的一些推荐系统召回、排序算法,大家应该对怎么基于Python实现推荐算法有了一些基本的了解了。接着上一章的思路,本章我们会基于一个更复杂、更近代一点的数据集来实现一些我们在前面章节中讲到的更复杂的一些推荐召回、排序算法。本章我们讲解的算法跟上一章完全不重复,因此是对上一...

大数据与人工智能 2071

推荐系统(Recommender Systems) 原理与代码实例讲解

推荐系统(Recommender Systems) - 原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词:个性化推荐,协同过滤,矩阵分解,深度学习,多样性与新颖性

AI天才研究院 1188

推荐系统三大实例——项目代码的运行教程

高团阳所著的《推荐系统开发实战》一书中附赠了完整的推荐系统项目代码,包括新闻推荐系统,图书推荐系统,音乐推荐系统三个项目。这里来分享一下我运行代码的过程。 这里以新闻推荐系统为例进行配置和报错解决,音乐推荐系统和图书推荐系统的配置同理。

weixin_60361911的博客 2533

LabVIEW多界面应用开发:从启动器到主界面的切换架构与实现

在图形化编程领域,模块化与界面管理是构建复杂应用程序的核心。其原理在于通过清晰的程序架构,实现不同功能模块间的独立运行与协同工作,从而提升代码的可维护性和可扩展性。这种架构的技术价值在于能够有效管理应用程序的生命周期与资源,避免内存泄漏,并确保流畅的用户体验。在测控系统、自动化测试等工程实践中,常需实现如启动界面选择语言或模式后,无缝切换至主功能界面的场景。本文聚焦于LabVIEW环境,深入探讨如何利用动态调用、状态机等机制,并结合功能全局变量(FGV)与队列消息处理器(QMH)等热词技术,构建健壮的多界面

weixin_30802819的博客 263

防止通达信公式被盗?手把手教你用DLL加密+互联网验证(含易语言后台管理)

本文详细介绍了如何通过DLL加密与互联网验证技术保护通达信公式安全。从DLL加密实现、设备绑定到易语言后台管理,提供了一套完整的防护方案,有效防止公式被盗用。重点讲解了互联网验证登录和绑定设备等核心技术,帮助量化交易者守护核心资产。

weixin_29323551的博客 501

电影推荐系统(推荐系统的hello work)

什么是推荐系统? 互联网的信息越来越多,用户面对大量数据信息的时候,无法获得对自己真正有用的部分,造成信息超载问题。 推荐系统就是解决信息超载的一个办法。 推荐系统依据用户的历史行为、社交关系、兴趣点等信息去判断用户当前需要或感兴趣物品/服务的应用。 推荐是去预测用户对某个他没有使用过的物品/服务的喜欢程度(一般是打分机制),物品/服务可以是电影、书、音乐、新闻等; 推进系统核心任务主要是把用户和...

qq_35200479的博客 1万+

别再手动算了!用Excel函数一键搞定AQI和首要污染物分析(附完整公式模板)

本文介绍如何利用Excel函数自动化计算AQI和首要污染物分析,大幅提升数据处理效率。通过构建标准化输入模板、智能计算IAQI、自动判定AQI与首要污染物,并生成可视化仪表盘,帮助环保工作者快速完成每日监测报告。

weixin_30443075的博客 345

Top-N Recommendation——基于用户的推荐实验

无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens、Ratings的电影数据集,对用户做出Top-N 推荐。主要目的是基于User-Based的思想来进行Top-10的相关电影推荐。二、Methodology本实验基于

David-Kuper的专栏 1万+

Android逆向分析

Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。Android应用 Java编写的,利用Android SDK编译代码,并并且把所有的数据和资源文件打包成一个APK(Android Package)文件这是一个后缀名为.apk的压缩文件,apk文件中包含了一个Anddroid应用程序的所有内容,是Android平台用于安装应用程序的文件。

qq_51598534的博客 6294

永不消逝的电波 -GSM空口信号的接收与解码

一开始接触软件无线电应该是从很早之前对RFID洗衣卡的解密开始的,后来接触人员定位,慢慢的打开了这样一扇大门。。。。 翻到之前做的GSM信号的接收解码,今天就对其过程做一个记录,也不是什么新颖的内容,权当是记录和回忆了。 对于GSM网络的相关内容,不是非常的熟悉,如有不正确的,欢迎批评指正。

Jack.Xu 专栏 1万+

推荐系统的实现

目录推荐系统的基本思想推荐系统的数据分析推荐系统的分类推荐算法简介基于人口统计学的推荐基于内容的推荐基于协同过滤的推荐基于用户的协同过滤基于物品的协同过滤混合推荐推荐系统实验方法推荐准确度评测 推荐系统的基本思想 利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用 户喜欢的物品。 推荐系统的数据分析 • 要推荐物品或内容的元数据,例如关键字,分类标签,基因描

shujiaw的博客 1715

8位2路选择器设计

8位2路选择器设计

好好学习,天天向上 4289

推荐系统之LFM算法详解

个性化召回 召回:从item中选取一部分作为候选集 1)不同的用户喜欢不同的item 2)部分作为候选集,降低系统的负担 根据用户的属性行为上下文等信息从物品全集中选取其感兴趣的物品作为候选集;召回的重要作用:召回决定了最终推荐结果的天花板 个性化召回解析分三种: 1.基于用户行为 2.基于user profile 3.基于隐语义的 LFM 工业届个性化召回架构:个性化召回算法LFM(latent...

GFDGFHSDS的博客 1万+

Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价)

摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。

2503_91057718的博客 2023

手把手教你学simulink(40.1)--水力发电场景示例:基于 Simulink 的抽水蓄能电站水力发电

项目背景抽水蓄能电站是一种重要的储能技术,广泛应用于电力系统的调峰填谷、频率调节和备用电源。它通过在电力负荷低谷时将水从下水库抽到上水库储存,在电力负荷高峰时释放水进行发电,从而实现电能的高效利用。与传统的水电站不同,抽水蓄能电站可以在短时间内快速响应电网的需求,具有良好的灵活性和可靠性。本项目旨在使用 MATLAB/Simulink 模拟一个完整的抽水蓄能电站的水力发电过程,包括水泵-涡轮机系统、发电机、水道系统、控制系统等,并实现对电站的精确控制,确保其在不同工况下都能稳定运行。

MHD0815的博客 886

【含推荐算法源码实现】推荐系统入门

推荐系统 1 推荐系统概述 1.1 推荐系统的目的 让用户更快更好的获取到自己需要的内容 让内容更快更好的推送到喜欢它的用户手中 让网站(平台)更有效的保留用户资源 1.2 推荐系统的应用 个性化音乐 电子商务 电影视频 社交网络 位置服务… 1.3 推荐系统的基本思想 利用用户和物品的特征信息,给用户推荐那些具有用户喜欢的特征的物品。 利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。 利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品。 1.4 推荐系统

qq_42397330的博客 2289

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【回顾】如何搭建一套个性化推荐系统?

个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、头条、京东、...

m0_37586850的博客 2473

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

推荐系统经典论文

下面提供的论文,可以说基本都是经典中的经典。读完这些论文,相信对推荐系统的认识肯定会有质的飞越:(不够再找我。O(∩_∩)O~) 综述类: 1、Towards the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions。最经典的推荐算法综述 2、C...

但行好事,莫问前程 1万+

基于python+django的个性化电影推荐系统设计与实现

本文研究基于协同过滤算法实现个性化电影推荐系统。系统采用B/S架构,使用Python开发推荐算法,结合Django框架和MySQL数据库实现。研究内容包括:(1)分析协同过滤算法及其在视频网站的应用;(2)改进算法以提高推荐准确性;(3)采用召回率和准确率评估推荐效果;(4)设计实现包含用户注册、登录、评分和推荐功能的完整系统。系统基于MovieLens数据集,通过用户评分数据计算相似度,提供基于用户和物品的两种推荐方式。实验结果表明该系统能有效为用户推荐感兴趣的电影,具有较好的实用价值。

毕业作品网站 5019

基于内容的电影推荐:为用户产生TOP-N推荐结果

基于内容的电影推荐:为用户产生TOP-N推荐结果

IT瘾君子的博客 1157

推荐系统简介

文章目录推荐系统的目的推荐系统的基本思想推荐系统的数据分析推荐系统的分类推荐算法简介基于人口统计学基于内容的推荐算法基于协同过滤的推荐算法User-CFItem-CF混合推荐 推荐系统的目的 解决信息过载,现在信息太多了,我们要用一个智能的系统来推测我们喜欢什么给我们进行推荐 店家需要推荐系统向客户推荐自己的产品 网站给用户更好的体验,从而留住用户 推荐系统的基本思想 物以类聚,从用户过往的喜好中抽取特征,再推荐具有这些特征的物品。比如女生喜欢高高的阳光一点的男孩,我推荐就推荐这种给她。 人以群分,她

Will_Pass的博客 913

实现实时个性化推荐_如何搭建一套个性化推荐系统?

个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设。 本文从整体上介绍一个完整的推荐系统所需的模块(不深入到细枝末节),核心包括内容源、内容处理、用户挖掘、算法、推荐搜索引擎、ABtest系统。本文将逐一介绍推荐架构的各个模块。个性化推荐系统架构...

weixin_39873325的博客 945

搭建个性化推荐系统

关于Apsara Clouder大数据专项技能认证系统 Apsara Clouder大数据专项技能认证:搭建个性化推荐系统 本认证系统的讲解了推荐系统的概念、应用、算法原理,并详细介绍了阿里的推荐引擎产品RecEng,最后通过一个微项目让学员亲自动手搭建一个推荐系统。 整个过程分为数据上传、数据预处理、推荐系统设置、测试上线四个部分,学员可参考本实验,结合企业自身业务和需求,将所学应用到实践中...

weixin_40050195的博客 367

如何搭建一套个性化推荐系统?

个性化推荐可以说是2016-2017年最火的概念之一了。可能是从今日头条开始,互联网圈被带起了一股“个性化”风潮,不管是什么产品,似乎加一套个性化推荐系统都能立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、京东、探探等都取得了不错的成绩),个...

chiyazui5047的博客 737
上一篇: Elasticsearch 数据迁移方案
下一篇: 推荐系统-ALS协同过滤算法代码实现
广漂一枚
广漂一枚 新星创作者: 人工智能技术领域 新星创作者: 人工智能技术领域
博客等级 码龄15年 3546粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广漂一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值