开源精选 - Spark个性化推荐算法

本文深入探讨了推荐系统的技术架构与关键算法,包括基于人口统计学、内容及协同过滤的推荐机制,详细介绍了Spark、ElasticSearch等工具的应用,并讨论了实时推荐算法与冷启动问题解决方案。

源码:https://github.com/wolf-song-ml/RecommendationSystem

实战篇

1 项目技术架构

在这里插入图片描述

2 项目涉及关键技术

  • Redis:存储用户最近评测队列
  • Mongdb:BI可视化查询
  • Elastic Search:文本关键词模糊检索索引、类别完全匹配检索、More like this基于内容推荐api
  • Flume:实时评测数据采集
  • Kafka:采集数据中间消息通道 Kafka stream:消息转发中间管道
  • Spark:spark sql、spark stream、spark M数据统计、加载数据源引擎、机器学习模型
  • ScalaNLP:JAVA矩阵计算

理论篇

1 推荐系统的意义 - 解决信息过载

  • 搜索引擎时代

分类导航:雅虎
搜索:谷歌、百度

  • 个性化时代(提高用户粘度、增加营收)

系统自动推荐相关的东西:今日头条、豆瓣、电商

2 推荐系统的分类

  • 基于人口统计学的推荐

  • 基于内容的推荐

  • 基于协同过滤的推荐

3 基于人口统计学的推荐

基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
在这里插入图片描述

4 基于内容的推荐

4.1 定义

基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制,它的核心思想是根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品。

4.2 算法流程

  • 对于物品的特征提取——打标签(tag)
  • 对于文本信息的特征提取——关键词
  • 生成分词特征向量矩阵
  • 计算相似度,常用余弦相似度
    在这里插入图片描述

4.3 核心代码

4.3.1 spark TF-IDF

// 核心部分: 用TF-IDF从内容信息中提取电影特征向量
val movieRecs = movieFeatures.cartesian(movieFeatures)
  .filter{
   
   
    // 把自己跟自己的配对过滤掉
    case (a, b) => a._1 != b._1
  }
  .map{
   
   
    case (a, b) => {
   
   
      val simScore = this.consinSim(a._2, b._2)
      ( a._1, ( b._1, simScore ) )
    }
  }
  .filter(_._2._2 > 0.6)    // 过滤出相似度大于0.6的
  .groupByKey()
  .map{
   
   
    case (mid, items) => MovieRecs( mid, items.toList.sortWith(_._2 > _._2).map(x => Recommendation(x._1, x._2)) )
  }
  .toDF()

4.3.2 ElasticSearch More like this

MoreLikeThisQueryBuilder query = QueryBuilders.moreLikeThisQuery(
        /*new String[]{"name", "descri", "genres", "actors", "directors", "tags"},*/
        new MoreLikeThisQueryBuilder.Item[]{
   
   new MoreLikeThisQueryBuilder.Item(Constant.ES_INDEX,
                Constant.ES_MOVIE_TYPE, String.valueOf(mid)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值