数据结构与算法笔记:高级篇 - 向量空间:如何实现一个简单的音乐推荐系统?

概述

很多人喜都喜爱听歌,以前我们用 MP3 听歌,现在直接通过音乐 App 在线就能听歌。而且,各种音乐 App 的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的喜好,给你推荐你可能会喜好的音乐,而且有时候推荐的音乐还非常适合你的口味,甚至会经验到你!如此智能的一个功能,你知道它是怎么实现的吗?


算法解析

实际上,要解决这个问题,并不需要特别高深的理论。解决思路的核心思想非常简单、直白,用两句话就能概括出来。

  • 找到跟你口味偏好相似的用户,把他们爱听的歌曲推荐给你;
  • 找出跟你喜爱的歌曲特征相似的歌曲,把这些歌曲推荐给你。

接下来,我们就分别讲解一下这两种思路的实现方式。

1.基于相似用户做推荐

如何找到跟你口味偏好相似的用户呢?或者说如何定义口味偏好相似呢?实际上,思路也非常简单,我们把跟你听类似歌曲的人,看做口味相似的用户。你可以看下面这个图。用 “1” 表示 “喜爱”,用 “0” 笼统的表示 “不发表意见”。从图中可以看出,你跟小明共同喜爱的歌曲最多,有 5 首。于是,我们就可以说,小明跟你的口味非常相似。

在这里插入图片描述

我们只需要遍历所有的用户,对比每个用户跟你共同喜爱的歌曲个数,并设置一个阈值,如果你和某个用户共同喜爱的歌曲个数超过这个阈值,我们就把这个用户看做跟你口味相似的用户,把这个用户喜爱但你还没有听过的歌曲,推荐给你。

不过,刚刚的方案中有一个问题,我们如何知道用户喜爱那首歌曲呢?也就是说,如何定义用户对某首歌曲的喜爱程度呢?

实际上,我们可以通过用户的行为,来定义这个喜爱程度。我们给每个行为定义一个得分,得分越高表示越喜爱。

在这里插入图片描述

还是刚刚那个里子,我们如何把每个人对每首歌曲的喜爱程度表示出来,就是下面这个样子。图中,某个人对某首歌曲是否喜爱,我们不再用 “1” 或者 “0” 来表示,而是对应一个具体的分值。

在这里插入图片描述

看了这样一个用户对歌曲的喜爱程度的对应表之后,如何来判断两个用户是否口味相似呢?

显然,不能再像之前那样,采用简单的计数来统计两个用户之间的相似度。还记得我们之前讲字符串的相似度度量时,提到的编辑距离吗?这里的相似度度量,我们可以用另外一个距离,那就是欧几里得距离(Euclidean distance)。欧几里得距离是用来计算两个向量之间的距离的。这个概念中有两个关键词,向量和距离,我来给你解释下。

一维空间是一条线,我们用 1,2,3... 这样单个的数,来表示一维空间中的某个位置;二维空间是一个面,我们用 (1,3), (4,2), (2,2) ... 这样的两个数,来表示二维空间中的某个位置;三维空间是一个立体空间,我们用 (1,3,5), (3,1,7), (2,4,3) ... 这样的三个数,来表示三维空间中的某个位置。一维、二维、三维应该都不难理解,那更高维中的某个位置该如何表示呢?

类比 一维、二维、三维的表示方法,K 维空间中的某个位置,我们可以写作 ( X 1 , X 2 , X 3 , . . . , X k ) (X_1, X_2, X_3,..., X_k) (X1,X2,X3,...,Xk)。这种表示方法就是向量(vector)。我们知道,二维、三维空间中,两个位置之间有距离的概念,类比到高维空间,同样也有距离的概念,这就是我们说的两个向量之间的距离。

那如何计算两个向量之间的距离呢?我们还是可以类比到二维、三维中距离的计算方法。通过类比,我们就可以得到两个向量之间距离的计算公式。这个计算公式就是欧几里得距离的计算公式:

在这里插入图片描述

把每个用户对所有歌曲的喜爱程度,都用一个向量表示。我们计算出两个向量之间的欧几里得距离,作为两个用户的口味相似程度的度量。从图中的计算可以看出,小明与你的欧几里得距离最小,也就是说,你俩在高维空间中靠的最近,所以,我们就可以断定,小明跟你的口味最相似。

在这里插入图片描述

2.基于相似歌曲推荐

刚刚讲了基于相似用户的歌曲推荐方法,但是,如果用户是一个新用户,我们还没有收集到足够多的行为数据,这个时候该如何推荐呢?我们现在再来看另一种推荐方法,基于相似歌曲的推荐方法,也就是说,如果某首歌曲跟你喜爱的歌曲类似,我们就把它推荐给你。

如何判断两首歌曲是否相似呢?对于人来说,这个事情可能会比较简单,但是对于计算机来说,判断两个歌曲是否相似,那就需要通过量化的数据来表示了。我们应该通过什么数据量化两个歌曲之间的相似程度呢?

最容易想到的是,我们对歌曲定义一些特征项,比如是伤感的还是愉快的,时摇滚还是民谣,是柔和还是高亢的等等。类似基于相似用户的推荐方法,我们给每个歌曲的每个特征项打一个分数,这样每个歌曲就都对应一个特征项向量。我们可以基于 这个特征项向量,来计算两个歌曲之间的欧几里得距离。欧几里得距离越小,表示两个歌曲的相似程度越大。

但是,要实现这个方案,需要有一个前提,那就是我们能够找到足够多,并且能够全面代表歌曲特点的特征项,此外,我们还要人工给每首歌标注每个特征项的得分。对于收录量海量歌曲的音乐 App 来说,这显然是一个非常大的工程。此外,人工标注有很大的主观性,也会影响到推荐的准确性。

既然基于歌曲特征项计算相似度不可行,那我们就换一种思路。对于两首歌,如果喜欢的人群都是差不多的,那侧面就可以反映出,这两首歌比较相似。如图所示,每个用户对歌曲有不同的喜爱程度,我们依旧通过上一个解决方案中定义的得分标准,来定义喜爱程度。

在这里插入图片描述

你有没有发现,这个图跟基于相似用户推荐中的图几乎一样。只不过这里把歌曲和用户的主次颠倒了一下。

  • 基于相似用户的推荐方法中,针对每个用户,我们将对各个歌曲的喜爱程度作为向量。
  • 基于相似歌曲的推荐思路中,针对每个歌曲,我们将每个用户的打分作为向量。

有了每个歌曲的向量表示,我们通过计算向量之间的欧几里得距离,来表示歌曲之间的相似度。欧几里得距离距离越小,表示两个歌曲越相似。然后,我们在用户已经听过的歌曲中,找出他喜爱程度较高的歌曲。然后,我们找出跟这些歌曲相似度很高的其他歌曲推荐给他。

总结

实际上,这个问题是推荐系统(Recomendation System)里最典型的一类问题。之所以讲这部分内容,主要还是给你展示,算法的强大之处,利用简单的向量空间的欧几里得距离,就能解决如此复杂的问题。不过,本章只讲解了基础理论,实践中遇到的问题还有很多,比如冷启动问题,产品初期积累的数据不多,不足以做推荐等等。这些更加深奥的内容,你可以之后自己在实践中慢慢探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748773.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件安全存储面临的三大困扰?企业可轻松一键解决

企业文件存储是企业生产经营要解决的基础性问题,一般来说,企业常见的文件存储方式有如下几种: 直接附加存储(DAS): 特点:数据备份和恢复会占用服务器主机资源(如CPU、系统IO等&…

推荐一个shp修复工具

我们在《如何解决ArcGIS中数据显示乱码问题》一文中,为你分享过打开shp文件的乱码问题。 现在再为你分享一个shp文件的修复工具,你可以在文末查看该工具的领取方式。 shp文件修复工具 Shapefile(简称SHP)是Esri推出的一种广泛使…

Centos安装Snaped

本人操作系统为Centos 7 1. 安装epel 和 copr yum #第一步安装epel sudo yum install epel-release #第二步安装copr sudo yum install yum-plugin-copr 2. 添加存储库 sudo yum copr enable ngompa/snapcore-el7 3. 安装snapd软件包 sudo yum -y install snapd 等待安装完…

PDF处理篇:有哪些免费的PDF注释工具

PDF 是一种功能强大的格式,广泛用于处理和传输数据。您可以创建自己的 PDF 文件,也可以使用其他人创建的 PDF 文件。但是,有时您想在 PDF 文件中包含其他文本、图形和其他元素。这就是 PDF 注释器为您提供帮助的地方。 有许多可用的 PDF 注释…

去掉window11设备和驱动器中的百度网盘图标

背景 window系统设备驱动器中显示百度网盘图标,个人强迫症,要去掉!!! 去掉window11->设备和驱动器->百度网盘 的图标 登录百度网盘点击”同步“ 点击设置 在基本设置里面去掉勾选“在我的电脑中显示百度网盘…

Node.js全栈指南:认识MIME和HTTP

MIME,全称 “多用途互联网邮件扩展类型”。 这名称相当学术,用人话来说就是: 我们浏览一个网页的时候,之所以能看到 html 文件展示成网页,图片可以正常显示,css 样式能正常影响网页效果,js 脚…

这5款Windows高质量软件,吊打付费,谁用谁爽

咱们话不多说,进入我的电脑。 一键远控 一个支持远程控制电脑、传输文件、观看视频、锁定电脑屏幕以及重启和关机的免费远程控制软件。 再输入对应的设备识别码和验证码后,就可以对另一台电脑进行各种操作,同时也支持多台设备同时也能控制。…

JOSEF约瑟 JOXL-J拉绳开关 整定范围宽

用途 双向拉绳开关的壳体采用金属材料铸造,具有足够的机械强度,抵抗并下工作时脱落的岩石,爆块等物体的撞击不被破坏,当胶带输送机发生紧急事故时,启动拉绳开关,可立即停机报警,防止事故的扩大,保证工作现场的人身安全…

杀手级AI应用前瞻,一文带你了解8个ai大语言模型

一、大模型解析(LLM、MLLM、GLM) 基础概念: Transformer:ChatGPT的核心结构是Transformer,这是一种采用自注意力机制的深度学习模型。通过自注意力机制,Transformer能够理解输入文本的上下文信息&#xf…

【数据分享】《中国文化及相关产业统计年鉴》2013-2022

而今天要免费分享的数据就是2013-2022年间出版的《中国文化及相关产业统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 在过去的十年里,中国的文化及文化产业经历了翻天覆地的变化。随着《中国文化及相关产业统计年鉴…

3D数字人视频合成用户指南

数字人开放平台3D互动数字人如何接入_虚拟数字人(DVH)-阿里云帮助中心3D互动数字人(对应开放平台的“智能客服”场景)是虚拟数字人开放平台提供能够支持用户与3D数字人进行实时语音交互的数字人产品能力,需要配合智能对话机器人产品使用。本篇…

白鲸开源中标人保集团2024年数据调度工具软件产品及服务采购项目

近日,北京白鲸开源科技有限公司成功中标中国人民保险集团(以下简称“中国人保”)2024年数据调度工具软件产品及服务采购项目。此举将为中国人保提供高性能、高可用性、高扩展性和高安全性的一站式数据调度管理方案,大力推进中国人…

《数据结构与算法基础 by王卓老师》学习笔记——1.4算法与算法分析

一、算法 1.1算法的研究内容 1.2算法的定义 1.3算法的描述 以下是算法的自然语言描述 以下是算法的传统流程图表示 以下是NS流程图表示 1.4算法和程序的区别与联系 1.5算法的五个特性 1.6算法设计的要求 Robustness也称为鲁棒性 二、算法分析 2.1算法时间效率的度量 2.1.1事…

爬虫-Python基础

一、Python环境的安装 1. 下载Python 访问Python官网: Welcome to Python.org点击downloads按钮,在下拉框中选择系统类型(windows/Mac OS/Linux等)选择下载最新版本的Python 2. 安装Python 双击下载好的Python安装包勾选左下角 Add Python 3.7 to PATH 选项&…

机器人控制系列教程之动力学建模(2)

接昨天的推文:https://editor.csdn.net/md/?articleId139991958 ,动力学的求解通常是个相对比较复杂的过程,但现在基本上不用人工来推算求解各种公式和求解过程了,大家只需要知道其中的步骤即可,现代对于动力学问题的…

uni-app (通过HBuilderX 和 VS Code 开发)详细连接过程教学。

使用 HBuilderX 创建 uni-app 项目 并编译到微信开发者工具。 uni-app 支持两种方式创建项目: 通过 HBuilderX 创建 通过命令行创建 首先我们需要先下载HBuilderX 下载链接地址:DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2…

postman忘记密码发邮件,久久收不到怎么办?

根本原因是需要FQ!!! 重置密码的链接: https://identity.getpostman.com/trouble-signing-in 找个平台或者软件,访问这个链接即可完成修改密码后续操作,不用再傻傻等着验证码了。 有需要协助的朋友也可私信…

uniapp标题水平对齐微信小程序胶囊按钮及适配

uniapp标题水平对齐微信小程序胶囊按钮及适配 状态栏高度胶囊按钮的信息计算顶部边距模板样式 标签加样式加动态计算实现效果 t是胶囊按钮距离的top h是胶囊按钮的高度 s是状态栏高度 大概是这样 状态栏高度 获取系统信息里的状态栏高度 const statusBarHeight uni.getSy…

开源“卖货主播”AI大模型——拳打李佳琦、脚踢小杨哥、人人都能当销冠?

开源“卖货主播”AI大模型——拳打李佳琦、脚踢小杨哥、人人都能当销冠? 刚刚在知名同性交友平台发现了一个或许能让你致富的开源项目——“Streamer-Sales 销冠”。 正如其名字所言,这是一个卖货主播LLM大模型,旨在让你成为销冠。 https:/…

换新手机了,旧手机的微信聊天记录怎么办?两个方法,轻松迁移

618买的新手机终于到手,但你是否在为旧手机上的微信聊天记录感到困扰?不用担心,迁移过程其实非常便捷! 在本文中,我将为你展示2个简单的步骤,让你轻松迁移微信聊天记录。无论你更换新手机的原因是什么&…