“丝路通:推荐系统原理”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
算法介绍
 
(未显示2个用户的16个中间版本)
第6行: 第6行:
 
3.感兴趣的商品是通过基于物品的相似推荐实现的,通过提取商品的......等几个关键指标,计算商品之间的相似度。
 
3.感兴趣的商品是通过基于物品的相似推荐实现的,通过提取商品的......等几个关键指标,计算商品之间的相似度。
  
4.推荐系统为用户推荐与他收藏商品相似度最高的商品
+
4.推荐系统为用户推荐与他收藏商品相似度最高的商品。
  
 
==流程介绍==
 
==流程介绍==
推荐部分的数据产生主要是通过前端埋点技术收集用户兴趣爱好日志,并传递给后台,后台再将日志存储到服务器上。服务器上的日志由flume日志采集系统实施采集,再由Kafka监控flume上的日志保存到kafka主题当中,最后利用编写的代码及算法实时计算Kafka主题中的数据并给出结果返回到业务数据库当中,后台读取业务数据库数据用于前端展示。
+
推荐部分的数据产生是利用spark程序提取到HDFS中的商品数据后再利用基于内容相似推荐算法计算出两两商品之间的相似度,保存到业务数据库中,最后在前端给予展示
 +
 
 +
1.数据爬取
 +
 
 +
  数据爬取采用selenium自动化爬取工具,编写不同的爬虫代码对不同网站进行爬取,最后保存至Csv文件中
 +
 
 +
2.数据清洗
 +
 
 +
  使用Spark SQL对采集到的原始数据进行清洗、处理,最后将所有清洗结果直接保存到HDFS中。
 +
 
 +
3.数据存储
 +
 
 +
  数据存储采用分布式文件系统HDFS,一次写入,多次读取。
 +
 
 +
4.相似度计算
 +
 
 +
  相似度计算用了Spark-Mlib直接调用TF-IDF算法,计算出商品标签的特征向量,再计算两两商品之间的余弦相似度,提取相似度大于0.5的保存
 +
 
 +
5.上传业务数据库
 +
 
 +
  Mysql作为主数据库。Mysql是项目广泛应用的文档数据库,主要负责平台业务逻辑数据的存储。
 +
 
 +
6.前端展示
 +
 
 +
  分析用户在浏览商品时点击过的商品,为用户推荐其相似商品。旨在为用户提供个性化服务,增加商家收益。
 +
 
 +
 
 +
  前端
 +
 
 +
[[文件:内容相似推荐整体流程.png]]
  
 
==算法介绍==
 
==算法介绍==
我们可以将标签内容进行提取,得到商品的内容特征向量,进而可以通过求取相似度矩阵。为了避免热门标签对特征提取的影响,我们还可以通过TF-IDF算法对标签的权重进行调整,从而尽可能地接近用户偏好。然后通过商品特征向量进而求出相似度矩阵,就可以在商品详情页给出相似推荐了,用户浏览商品完成之后,都会显示类似的推荐列表。
+
基于内容的相似推荐
"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。这些关键词也就是是该商品的特征,我们对这些特征向量进行余弦相似度计算,最后才得到了商品之间的相似度列表
+
 
 +
1.商品描述分词:根据商品标签(商品分类和描述,商品名称)进行分词
 +
 
 +
2.TD-IDF算法计算特征向量
 +
 
 +
  <nowiki>基于内容的相似推荐,用到提取商品标签中的关键词算法"TF-IDF算法",将商品标签tags当做文本或者文档,那商品标签中的每个单词,就可以看作是文本文档中的每一个词汇。
 +
 
 +
  我们想要的得到的就是一个单词在商品标签tags中的关键程度是多少,这个关键程度就相当于商品在这个维度上的一个特征。
 +
 
 +
"词频"(TF)和"逆文档频率"(IDF),将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高.它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章或者说我们商品标签中的关键词。</nowiki>
 +
 
 +
3.余弦相似度计算
 +
 
 +
我们对这些特征向量进行余弦相似度计算,最后才得到了商品之间的相似度列表.余弦相似度越高的值,代表他们越相似。
 +
 
 +
4.相似度排序
 +
 
 +
  对相似度排序 ,就可以得到某个商品的最相似商品。
 +
 
 +
'''是实时还是离线?'''
 +
 
 +
实时的,离线分析结果提前存入数据库中,用户点击时实时反馈最优推荐。
 +
 
 +
'''为什么不用基于用户的推荐?'''
 +
 
 +
因为用户不多,推荐结果并不精确。
 +
 
 +
[[文件:TF-IDF流程图.png|600px]]
 +
 
 +
==其他电商推荐算法==
 +
 
 +
未来随着用户量的增加
 +
 
 +
1.我们还可以设置基于物品的协同过滤(ltem-CF)
 +
如果两个商品有同样的感兴趣人群,那么它们就是有内在相关性的。所以可以利用已有的用户对商品的行为数据,分析商品受众的相似程度,进而也可以得出商品之间的相似度。
 +
 
 +
2.或者基于隐语义模型的协同过滤算法
 +
采用ALS作为协同过滤算法根据用户的对商品行为所获得的评分表计算离线的用户商品推荐列表以及商品相似度矩阵。
  
[[文件:TF-IDF流程图.png]]
+
3.我们在以后可以做到更为好的'''实时推荐系统''',例如根据上面基于内容的的相似度推荐,基于物品的协同过滤,基于隐语义模型的协同过滤算出商品的最相似的几个商品结果,与实时的用户最近的几次行为数据,利用实时的框架计算分析,最后展示到页面上。
 +
关于实时如何推荐,现在我了解了一些浅层次的,比如用户对这个商品进行了收藏,加入购物车,或者点击,那收藏的加分系数明显高于点击,这有可能就是用户真正喜欢的物品,根据这些系数我们可以设置加分项和减分项做出商品优先级计算,最后将优先的结果进行展示

2020年12月7日 (一) 09:35的最新版本

功能介绍

1. 用户在前台收藏感兴趣的商品,

2.根据用户的收藏列表,为其推荐感兴趣的商品。

3.感兴趣的商品是通过基于物品的相似推荐实现的,通过提取商品的......等几个关键指标,计算商品之间的相似度。

4.推荐系统为用户推荐与他收藏商品相似度最高的商品。

流程介绍

推荐部分的数据产生是利用spark程序提取到HDFS中的商品数据后再利用基于内容相似推荐算法计算出两两商品之间的相似度,保存到业务数据库中,最后在前端给予展示

1.数据爬取

 数据爬取采用selenium自动化爬取工具,编写不同的爬虫代码对不同网站进行爬取,最后保存至Csv文件中

2.数据清洗

 使用Spark SQL对采集到的原始数据进行清洗、处理,最后将所有清洗结果直接保存到HDFS中。

3.数据存储

 数据存储采用分布式文件系统HDFS,一次写入,多次读取。

4.相似度计算

 相似度计算用了Spark-Mlib直接调用TF-IDF算法,计算出商品标签的特征向量,再计算两两商品之间的余弦相似度,提取相似度大于0.5的保存

5.上传业务数据库

 Mysql作为主数据库。Mysql是项目广泛应用的文档数据库,主要负责平台业务逻辑数据的存储。

6.前端展示

 分析用户在浏览商品时点击过的商品,为用户推荐其相似商品。旨在为用户提供个性化服务,增加商家收益。


 前端

内容相似推荐整体流程.png

算法介绍

基于内容的相似推荐

1.商品描述分词:根据商品标签(商品分类和描述,商品名称)进行分词

2.TD-IDF算法计算特征向量

 基于内容的相似推荐,用到提取商品标签中的关键词算法"TF-IDF算法",将商品标签tags当做文本或者文档,那商品标签中的每个单词,就可以看作是文本文档中的每一个词汇。

  我们想要的得到的就是一个单词在商品标签tags中的关键程度是多少,这个关键程度就相当于商品在这个维度上的一个特征。

"词频"(TF)和"逆文档频率"(IDF),将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高.它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章或者说我们商品标签中的关键词。

3.余弦相似度计算

我们对这些特征向量进行余弦相似度计算,最后才得到了商品之间的相似度列表.余弦相似度越高的值,代表他们越相似。

4.相似度排序

 对相似度排序 ,就可以得到某个商品的最相似商品。

是实时还是离线?

实时的,离线分析结果提前存入数据库中,用户点击时实时反馈最优推荐。

为什么不用基于用户的推荐?

因为用户不多,推荐结果并不精确。

TF-IDF流程图.png

其他电商推荐算法

未来随着用户量的增加

1.我们还可以设置基于物品的协同过滤(ltem-CF)

如果两个商品有同样的感兴趣人群,那么它们就是有内在相关性的。所以可以利用已有的用户对商品的行为数据,分析商品受众的相似程度,进而也可以得出商品之间的相似度。

2.或者基于隐语义模型的协同过滤算法

采用ALS作为协同过滤算法根据用户的对商品行为所获得的评分表计算离线的用户商品推荐列表以及商品相似度矩阵。

3.我们在以后可以做到更为好的实时推荐系统,例如根据上面基于内容的的相似度推荐,基于物品的协同过滤,基于隐语义模型的协同过滤算出商品的最相似的几个商品结果,与实时的用户最近的几次行为数据,利用实时的框架计算分析,最后展示到页面上。

关于实时如何推荐,现在我了解了一些浅层次的,比如用户对这个商品进行了收藏,加入购物车,或者点击,那收藏的加分系数明显高于点击,这有可能就是用户真正喜欢的物品,根据这些系数我们可以设置加分项和减分项做出商品优先级计算,最后将优先的结果进行展示