音乐推荐系统

什么是推荐系统?

    “利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。”

   在这个数据过载的时代,信息的消费者需要从海量的信息中找到自己所需要的信息,信息的生产者要让自己生产的信息在海量的信息中脱颖而出,这时推荐系统就应运而生了。对用户而言,推荐系统不需要用户提供明确的目标;对物品而言,推荐系统解决了2/8现象的问题(也叫长尾效应),让小众的物品可以展示到需要它们的用户面前。

推荐系统的3个W

是什么(What is it?)

推荐系统就是根据用户的历史行为、社交关系、兴趣点、所处上下文环境等信息去判断用户当前需要或感兴趣的物品/服务的一类应用。

为什么(Why is that?)

为什么我们要用到推荐系统呢?随着信息技术和互联网的发展,人类从信息匮乏时代走向了信息过载(Information Overload)时代。

对于信息消费者,也就是用户,从大量信息中找到自己感兴趣的信息变得越来越困难;对于信息生产者,让自己生产的信息在众多信息中脱颖而出也变得越来越困难。推荐系统正是为了解决这一矛盾而应运而生的。

推荐系统的主要任务就是联系用户和信息。对用户而言,推荐系统能帮助用户找到喜欢的物品/服务,帮忙进行决策,发现用户可能喜欢的新事物;对商家而言,推荐系统可以给用户提供个性化的服务,提高用户信任度和粘性,增加营收。我们可以通过一组数据了解推荐系统的价值:

Netflix:2/3被观看的电影来自推荐

Google新闻:38%的点击量来自推荐

Amazon:35%的销量来自推荐

当你看到这些数字,推荐系统的价值就不言而喻了吧?

用在哪(Where to apply?)

在这个信息爆炸的时代,信息过载问题催生了推荐系统在我们日常生活中方方面面的渗透:电子商务、电影或视频网站、个性化音乐网络电台、社交网络、个性化阅读、基于位置的服务、个性化邮件、个性化广告……在你逛淘宝、订外卖、听网络电台、看美剧、查邮件、淘攻略的时候,推荐系统在你不知不觉中将你可能感兴趣的内容推送给你。和搜索引擎不同,个性化推荐系统需要依赖用户的行为数据,一般都是作为一个应用存在于不同网站之中。在互联网的各大网站中都可以看到推荐系统的影子。例如都是逛淘宝,女同胞们和男同胞们看到的网页界面会有所不同。

长尾效应

长尾指的就是需求曲线上那条长长的尾巴,从人们的需求来看,大部分都会集中在热门商品,而尾部的个性化需求,看起来量小而且零散,但是人们没看到的是它的种类多,累加起来形成的市场,实际上比主流市场要大得多。长尾指的就是需求曲线上那条长长的尾巴,从人们的需求来看,大部分都会集中在前面,人们将这些称之为流行,也就是我们所说的热门商品,而尾部的个性化需求,看起来量小而且零散,但是人们没看到的是它的种类多,累加起来形成的市场,实际上比主流市场要大得多。在这里插入图片描述在这里插入图片描述

推荐系统要解决的问题

1、帮助用户找到想要的物品 如:书籍、电影等

2、可以降低信息过载

3、有利于提高站点的点击率/转化率

4、有利于对用户进行深入了解,为用户提供个性化服务

推荐系统的发展趋势

推荐系统的研究大致可以分为三个阶段,第一阶段是基于传统的服务,第二阶段是基于目前的社交网络的服务,第三阶段是即将到来的物联网。这其中产生了很多基础和重要的算法,例如协同过滤(包括基于用户的和基于物品的)、基于内容的推荐算法、混合式的推荐算法、基于统计理论的推荐算法、基于社交网络信息(关注、被关注、信任、知名度、信誉度等)的过滤推荐算法、群体推荐算法、基于位置的推荐算法。其中基于邻域的协同过滤推荐算法是推荐系统中最基础、最核心、最重要的算法,该算法不仅在学术界得到较为深入的研究,而且在业界也得到非常广泛的应用,基于邻域的算法主要分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法,除此之外,基于内容的推荐算法应用也非常广泛等等,因此下文将对涉及推荐系统的常用算法进行详细介绍。
在这里插入图片描述
在这里插入图片描述

不同相似度度量对性能的影响

在这里插入图片描述

RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)、MAPE(平均绝对百分比误差)

RMSE(Root Mean Square Error)均方根误差,衡量观测值与真实值之间的偏差。常用来作为机器学习模型预测结果衡量的标准。
在这里插入图片描述
MSE(Mean Square Error)均方误差:MSE是真实值与预测值的差值的平方然后求和平均。通过平方的形式便于求导,所以常被用作线性回归的损失函数。
在这里插入图片描述
MAE(Mean Absolute Error)平均绝对误差:是绝对误差的平均值。可以更好地反映预测值误差的实际情况。
在这里插入图片描述
SD(Standard Deviation)标准差:方差的算术平均根。用于衡量一组数值的离散程度。
在这里插入图片描述
平均绝对百分比误差(Mean Absolute Percentage Error):范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。

可以看到,MAPE跟MAE很像,就是多了个分母。注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!
在这里插入图片描述
决定系数
在这里插入图片描述

python代码

# coding=utf-8
import numpy as np
from sklearn import metrics

# MAPE和SMAPE需要自己实现
def mape(y_true, y_pred):
    return np.mean(np.abs((y_pred - y_true) / y_true)) * 100

def smape(y_true, y_pred):
    return 2.0 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) + np.abs(y_true))) * 100

y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.5, 5.0, 8.0, 4.5, 1.0])

# MSE
print(metrics.mean_squared_error(y_true, y_pred)) # 8.107142857142858
# RMSE
print(np.sqrt(metrics.mean_squared_error(y_true, y_pred))) # 2.847304489713536
# MAE
print(metrics.mean_absolute_error(y_true, y_pred)) # 1.9285714285714286
# MAPE
print(mape(y_true, y_pred)) # 76.07142857142858
# SMAPE
print(smape(y_true, y_pred)) # 57.76942355889724

不同推荐算法的性能

在这里插入图片描述
由此可知,SVD和Slope One算法的推荐结果最为精确,UserCF最差。这个数据和推荐系统相关著作中的结论是吻合的。

此外,在内存方面,Slope One最占内存,1G内存下最多只能处理6%左右的用户。而其他算法均能轻松地处理30%以上的用户量。

在速度方面,SVD速度最快,处理每个用户的平均时间约为4ms,Slope One的平均时间约为30ms,ItemCF和UserCF的平均处理时间都在10ms左右。KNN的速度是最慢的,平均处理时间约为100ms。

什么样的产品适合推荐 ?

  1. 多样性(物品足够多,用户无法一一查看)

  2. 口味重要(用户口味各异,物品长尾显著,靠热门排行榜推荐无法解决)

  3. 纯粹性(单一物品相关属性不太复杂,利于精准推荐)

  4. 大众产品(用户多,规模化,利于推荐)

  5. 时效性较低(时效性过高则产品更新快,如新闻推荐,推荐数据需要不断更新)

  6. 容易反馈(推荐引擎需要根据用户反馈结果不断学习和改进)

  7. 条目增长比较稳定(条目增长过快,则新增数据量过大,调整压力增大)
    推荐系统的常见推荐算法的性能比较

UserCF和ItemCF的比较

UserCF和ItemCF在线服务算法需要将相关表缓存在内存中,然后可以在线进行实时的预测。LFM在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排名,不太适合用于物品数非常庞大的系统,如果要用,我们也需要一个比较快的算法给用户先计算一个比较小的候选列表,然后再用LFM重新排名。另一方面,LFM在生成一个用户推荐列表时速度太慢,因此不能在线实时计算,而需要离线将所有用户的推荐结果事先计算好存储在数据库中。因此,LFM不能进行在线实时推荐,也就是说,当用户有了新的行为后,他的推荐列表不会发生变化。
在这里插入图片描述

1、基于流行度的推荐算法 2、基于协同过滤的推荐算法(UserCF与ItemCF) 3、基于内容的推荐算法 4、基于模型的推荐算法 5、基于混合式的推荐算法

基于流行度的推荐算法

基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。

注:独立访客(UV)、访问次数(VV)两个指标有什么区别?

① 访问次数(VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。

② 独立访客(UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。

③ PV访问量(Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。

1、优点:该算法简单,适用于刚注册的新用户

2、缺点:无法针对用户提供个性化的推荐

3、改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

基于用户的协同过滤推荐算法

当目标用户需要推荐时,可以先通过兴趣、爱好或行为习惯找到与他相似的其他用户,然后把那些与目标用户相似的用户喜欢的并且目标用户没有浏览过的物品推荐给目标用户。

1、基于用户的CF原理如下:

      ① 分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;

      ② 根据用户对物品的隐性评分计算得到所有用户之间的相似度;

      ③ 选出与目标用户最相似的K个用户;

      ④ 将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。

2、优点:

       ① 基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;

       ② 适于物品比用户多、物品时效性较强的情形,否则计算慢;

       ③ 能实现跨领域、惊喜度高的结果。

3、缺点:

       ① 在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;

       ② 用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;    

       ③ 推荐结果的个性化较弱、较宽泛。

4、改进:

       ① 两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;

       ② 如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;

       ③ 在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;

       ④ 把类似地域用户的行为作为推荐的主要依据。

基于物品的协同过滤推荐算法

当一个用户需要个性化推荐时,举个例子由于我之前购买过许嵩的《梦游计》这张专辑,所以会给我推荐《青年晚报》,因为很多其他用户都同时购买了许嵩的这两张专辑。

1、基于物品的CF原理如下:

       ① 分析各个用户对物品的浏览记录;

       ② 依据浏览记录分析得出所有物品之间的相似度;

       ③ 对于目标用户评价高的物品,找出与之相似度最高的K个物品;

       ④ 将这K个物品中目标用户没有浏览过的物品推荐给目标用户

2、优点:

       ① 基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。

       ② 物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。

       ③ 应用最广泛,尤其以电商行业为典型。

       ④ 适于用户多、物品少的情形,否则计算慢

       ⑤ 推荐精度高,更具个性化

       ⑥ 倾向于推荐同类商品

3、缺点:

       ① 不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。

       ② 在物品冷启动、数据稀疏时效果不佳

       ③ 推荐的多样性不足,形成信息闭环

4、改进:

       ① 如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;

       ② 活跃用户对物品相似度的贡献小于不活跃的用户;

       ③ 同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;

       ④ 在描述目标用户偏好时,给其最近喜欢的商品较高权重;

       ⑤ 同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。

基于内容的推荐算法

协同过滤算法仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性,而基于内容的算法会考虑到物品本身的属性。

根据用户之前对物品的历史行为,如用户购买过什么物品、对什么物品收藏过、评分过等等,然后再根据计算与这些物品相似的物品,并把它们推荐给用户。例如某用户之前购买过许嵩的《寻宝游戏》,这可以说明该用户可能是一个嵩鼠,这时就可以给该用户推荐一些许嵩的其他专辑或著作。

1、基于内容的推荐算法的原理如下:

      ① 选取一些具有代表性的特征来表示每个物品

      ② 使用用户的历史行为数据分析物品的这些特征,从而学习出用户的喜好特征或兴趣,也即构建用户画像

      ③ 通过比较上一步得到的用户画像和待推荐物品的画像(由待推荐物品的特征构成),将具有相关性最大的前K个物品中目标用户没有浏览过的物品推荐给目标用户

2、优点:
① 是最直观的算法

      ② 常借助文本相似度计算

      ③ 很好地解决冷启动问题,并且也不会囿于热度的限制

3、缺点:

      ① 容易受限于对文本、图像、音视频的内容进行描述的详细程度

      ② 过度专业化(over-specialisation),导致一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。

      ③ 主题过于集中,惊喜度不足

基于模型的推荐算法

基于模型的推荐算法会涉及到一些机器学习的方法,如逻辑回归、朴素贝叶斯分类器等。基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。

基于混合式的推荐算法

现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

推荐结果列表处理

1、当推荐算法计算得出推荐结果列表之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;

2、若多次推荐后用户依然对某个物品毫无兴趣,就需要将这个物品降低权重,调整排序;

3、有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。

推荐结果评估

当一个推荐算法设计完成后,一般需要用查准率(precision),查全率(recall),点击率(CTR)、转化率(CVR)、停留时间等指标进行评价。

查准率(precision):推荐给用户且用户喜欢的物品在推荐列表中的比重

查全率(recall):推荐给用户且用户喜欢的物品在用户列表中的比重

点击率(CTR):实际点击了的物品/推荐列表中所有的物品

转化率(CVR):购买了的物品/实际点击了的物品

线上线下数据处理

线下能做的全部做好,当你想看的时候只是把结果取出来!不然临时算吃不消,python线上一般要用到分布式,java可能比python快一点
1.针对用户推荐网易云音乐(每日30首歌/7首歌)
2.针对歌曲在你听某首歌的时候,找“相似歌曲”1
歌曲和歌曲之间的相似度是可以离线算好的,但是用户现在和以前的一般没法离线算好的,用户的兴趣随着时间推移会发生变化的!

在推荐系统的建模过程中,我们将用到python库 Surprise(Simple Python Recommendatlon System Engine),是scikit系列中的一个(很多同学用过scikit-learn和scikit-image等库)。
简单易用,同时支持多种推荐算法:
·基础算法/baseline algorithms
·基于近邻方法(协同过滤)/neighborhood methods
·矩阵分解方法/matrix factorization-based(SVD.PMF,SVD++,NMF非负矩阵分解)
在这里插入图片描述歌单数据=>推荐系统格式数据
主流的python推荐系统框架,支持的最基本数据格式为movielens dataset,其评分数据格式为sen tem rating timestamp,为了简单,我们也把数据处理成这个格式。

冷启动问题:

我们知道新歌(或者小众的歌)是非常难和其他的歌关联上的,我们有的信息太少了(很少有用户在它上面发生行为)。
1.1一种解决办法当然是推荐热门的歌曲,但是其实没从个人兴趣出发,我们知道这并不是最好的办法,并没有太大的卵用。这个也能命中很多用户。
1.2我们把问题的粒度放粗一点,用同样的思路,比如一个可考虑的解决方案是,我们把歌曲的粒度上升到对应的歌手,把刚才的song list替换成artist list,重新用word2vec建模,这样我们可以得到和一个歌手最相关(接近)的歌手,再推荐这个歌手最热门的歌曲,相对1.1的方法针对性强一些。
马太效应:
两极分化,热度越高的歌曲喜欢的人会越来越多,月冷门的越少人喜欢。

用户兴趣预测问题

我们刚才完成的功能,类似酷狗音乐和网易音乐里针对一首歌的“相似音乐”,那么问题又来了,如果我们现在要对一个user用这套song2vec的方式推荐,我们怎么做呢?
·每个人的兴趣都是有时效性的,这意味着说,3年前我喜欢王菲的歌,去年我喜欢五月天的歌,而今年我可能就改摇滚路线,喜欢汪峰的歌了。
·每一首歌的热度也是不一样的,有一些热门的歌,如果用户能喜欢,当然是首选那么,我们来做一个粗暴一点点的处理,把这2个维度拉进来,一起来针对一个用户做推荐。
**把每个用户喜欢(收藏)过的歌,沿着时间轴排好,同时由近到远给不同的衰减因子(比如最近一首歌是1,前一首是0.98,再前一首是0.982,以此类推…),同时我们针对不同的歌曲热度,给定不同的推荐因子(比如热度100的是1,热度80的是0.9…),每一首歌都可以拿回一个song2vec的推荐列表和对应的相似度,对相似度以时间衰减因子和热度权重进行加权,最后的结果排序后,展示给用户。

真实的场景中,可能我们有非常非常多的训练数据,我们不得不面对一些问题,也是大家比较关心的问题。

1)海量的数据无法一次载入内存用于训练。
2)数据是每天不断增加的,我们有没有一些增量训练的方式去不断持续迭代更新模型?

什么场景下,我们是不把数据全部载入内存优化,而是一个batch一个batch输入进行update参数的?
对,我们用tensorflow来完成一个在批量数据上更新,并且可以增量迭代优化的矩阵分解推荐系统。

矩阵分解回顾

在这里插入图片描述

LFM:

把用户再item上打分的行为,看作是有内部依据的,认为和k个factor有关系每一个useri会有一个用户的向量(k维),每一个item会有一个item的向量(K维)
在这里插入图片描述1.获取数据
咱们依旧以movielens为例,数据格式为user item rating timestamp
2.数据处理部分
咱们写点代码完成数据的产出和预处理过程。
大家知道tensorflow搭建的模型,训练方式通常是一个batch一个batch训练的。
在这里插入图片描述

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
音乐推荐系统是基于用户的听歌历史、用户的喜好和音乐的特征等因素,为用户推荐最合适的音乐。Python是一个非常适合实现音乐推荐系统的编程语言,因为它具有丰富的机器学习和数据处理库,可以轻松地从不同的数据源获取音乐数据,并使用各种算法和技术进行模型训练和评估,实现高效的音乐推荐系统。 在实现音乐推荐系统时,你可以按照以下步骤进行: 1. 数据集的准备:收集和准备音乐数据集,包括用户的听歌历史、音乐的特征等信息。 2. 特征工程:对音乐数据进行特征提取和处理,例如提取音乐的流派、情感特征等。 3. 数据预处理:对音乐数据进行预处理,包括数据清洗、缺失值处理、标准化等。 4. 模型选择:选择适合音乐推荐系统的模型,例如协同过滤、内容过滤、深度学习模型等。 5. 模型训练:使用训练数据对选定的模型进行训练,优化模型参数。 6. 模型评估:使用测试数据对训练好的模型进行评估,评估模型的准确性和性能。 7. 推荐算法:根据用户的听歌历史和音乐特征,使用训练好的模型进行音乐推荐。 8. 用户反馈:根据用户的反馈和行为数据,不断优化和改进音乐推荐系统。 Python提供了许多用于实现音乐推荐系统的库和工具,例如pandas用于数据处理,scikit-learn用于机器学习,TensorFlow和PyTorch用于深度学习等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值