余弦相似度、矩阵分解、深度学习物品的复杂、非线性特征

场景:经典的口碑推荐

书店里有三位顾客:小明小红。他们最近都对一些书打了分(1-5分,5分最喜欢)。

顾客 《三体》 《小王子》 《哈利波特》 《经济学原理》
5分 3分 1分
小明 4分 2分 5分 1分
小红 1分 5分 3分 5分

现在的问题是:我应该给你推荐《哈利波特》吗?

第一步:找到和你"口味相似"的人(计算用户相似度)

作为店员,你开始观察谁的读书口味和你最像。

  • 你和小明 :你们都超级喜欢《三体》,都给《经济学原理》打了低分。这说明你们可能都是科幻迷 ,对枯燥的理论书不感冒。口味非常相似!

  • 你和小红 :你喜欢《三体》,她不喜欢;她喜欢《经济学原理》,你讨厌。口味截然不同!

在算法里,这个"口味相似度"是可以量化的,最常用的就是 余弦相似度。简单理解就是:比较两个用户评分向量的方向是否一致。

  • 你和小明的向量方向很接近,所以相似度高

  • 你和小红的向量方向几乎相反,所以相似度低

第二步:利用相似用户的喜好进行预测(生成推荐)

现在要预测你对《哈利波特》的评分。你会更相信谁的意见?毫无疑问是小明,因为他和你口味相似。

  • 小明(和你口味相似)给了《哈利波特》 5分

  • 小红(和你口味不同)给了《哈利波特》 3分

算法会做一个加权平均,相似度越高,权重越大:

预测你的评分 = (和小明的相似度 * 小明的评分 + 和小红的相似度 * 小红的评分) / (总权重)

假设:

  • 你和小明 的相似度是 0.9

  • 你和小红 的相似度是 0.1

计算:
(0.9 * 5 + 0.1 * 3) / (0.9 + 0.1) = (4.5 + 0.3) / 1.0 = 4.8

预测你会给《哈利波特》打4.8分! 这是一个很高的分数,所以系统会把《哈利波特》强烈推荐给你。

这个过程就是 基于用户的协同过滤 ,它的核心思想是 "物以类聚,人以群分"

另一个角度:基于物品的协同过滤

现在,我们换一个思路。不找人,我们找相似的物品

书籍 小明 小红
《三体》 5分 4分 1分
《流浪地球》 4分 5分

我们发现,几乎所有喜欢《三体》的人(你和小明),也都喜欢《流浪地球》。那么我们可以认为 《三体》和《流浪地球》非常相似(可能因为它们都是刘慈欣的科幻小说)。

现在,小红给《三体》打了1分(她不喜欢),但她还没读过《流浪地球》。我们应该向她推荐《流浪地球》吗?

大概率不会。 因为和她喜欢相似书籍的人,可能也不喜欢《流浪地球》。或者反过来说,一个不喜欢《三体》的人,很可能也不会喜欢相似的《流浪地球》。

它的核心思想是 "喜欢这个物品的人,也喜欢那个物品"

  • 当你喜欢A物品时,系统会推荐给你与A最相似的B、C、D物品。

  • 亚马逊的 "购买此商品的顾客也购买了..." 就是这个原理最经典的例子。


总结与类比

基于用户的协同过滤 (User-CF) 基于物品的协同过滤 (Item-CF)
核心思想 人以群分 物以类聚
推荐逻辑 找到和你相似的用户,把他们喜欢而你没看过的推荐给你。 找到你喜欢的物品的相似物品,推荐给你。
好比 你的好朋友给你安利东西。 一个资深专家(比如音乐发烧友)根据你喜欢的歌,推荐同类型的歌。
适用场景 用户数相对较少,个性化强,社交属性强(如朋友圈)。 物品数相对稳定,物品内在联系强(如电商、音乐)。
例子 小明喜欢《三体》和《哈利波特》,你也喜欢《三体》,所以把《哈利波特》推荐给你。 很多人同时购买了手机和手机壳,所以当你买手机时,推荐手机壳给你。

协同过滤面临的挑战

  1. 冷启动问题

    • 新用户: 他还没任何行为,系统不知道他和谁相似,无法推荐。

    • 新物品: 它还没被任何人评分,系统不知道它和什么物品相似,永远不会被推荐。

    • 解决方案: 用热门推荐、注册信息(年龄、性别)、内容特征(物品标签)等来弥补。

  2. 稀疏性问题

    • 一个大型网站有上百万用户和物品,但一个用户可能只评过几十个。这就导致用户-物品评分矩阵是一个极其稀疏的矩阵(99%以上是空的),很难找到重叠的部分来计算相似度。
  3. 流行度偏差

    • 热门物品会被推荐得越来越多,而一些质量高但小众的物品很难被发掘。

1. 余弦相似度:衡量"方向"上的志同道合

想象一下,我们把两个人的喜好放在一个二维地图上。

  • 的喜好向量是:(喜欢科幻=5, 喜欢经济学=1)

  • 小明 的喜好向量是:(喜欢科幻=4, 喜欢经济学=1)

  • 小红 的喜好向量是:(喜欢科幻=1, 喜欢经济学=5)

现在,我们把这三个点画在坐标轴上:

text

复制代码
经济学
  ^
  |
5 +    *小红 (1,5)
  |
  |
  |
1 +    *你 (5,1)   *小明 (4,1)
  |
  +----+----+----+----+-> 科幻
      1    4    5

余弦相似度关心的是什么?是这两个向量之间的夹角!

  • 小明 的向量,指向几乎同一个方向 (右下角)。它们之间的夹角θ非常小

  • 小红 的向量,指向几乎相反的方向 。它们之间的夹角θ非常大

计算公式(直观理解版):
余弦相似度 = cos(θ)

  • 当夹角为 时,cos(0°) = 1,表示完全相同

  • 当夹角为 90° 时,cos(90°) = 0,表示完全不相关

  • 当夹角为 180° 时,cos(180°) = -1,表示完全相反

所以:

  • 你和小明的相似度 ≈ 0.99(非常相似)

  • 你和小红的相似度 ≈ 0.20(几乎不相似)

为什么用余弦相似度而不是简单的评分差?

因为它能消除用户评分习惯的影响 。比如一个用户普遍喜欢打高分(所有书都打4-5分),另一个用户喜欢打低分(所有书都打1-3分)。虽然他们绝对值不同,但他们的相对喜好趋势是一致的(比如都觉得A书比B书好)。余弦相似度能捕捉到这种"趋势"上的一致性,因为它看的是方向,而不是向量的长度。


2. 矩阵分解:从"评分"到"品味"的抽象

我们还是用那个评分表,但现在我们用"?"代表没评过分。

用户 \ 物品 《三体》 《小王子》 《哈利波特》 《经济学原理》
5 3 1
小明 4 2 5 1
小红 1 5 3 5

这个表格就是一个"评分矩阵"。矩阵分解要做一件非常聪明的事:

它假设存在一些看不见的"隐藏因素"(也叫隐因子/主题),决定了用户为什么喜欢一个物品。

这些因素可能是:

  • 主题1:科幻程度

  • 主题2:童真/浪漫程度

  • 主题3:学术严肃程度

矩阵分解的过程就是:

把这个大表格(评分矩阵),拆解成两个小表格的乘积:

  1. 用户-主题矩阵:每个用户对每个隐藏主题的喜好程度。

  2. 物品-主题矩阵:每个物品包含每个隐藏主题的多少。

拆解后可能是这样的:

用户-主题矩阵:

用户 \ 主题 科幻 童真 学术
0.9 0.2 0.1
小明 0.8 0.1 0.1
小红 0.1 0.8 0.9

物品-主题矩阵:

物品 \ 主题 科幻 童真 学术
《三体》 0.9 0.0 0.1
《小王子》 0.0 0.9 0.1
《哈利波特》 0.3 0.7 0.0
《经济学原理》 0.0 0.1 0.9

现在,预测"你"对《哈利波特》的评分怎么算?

看看"你"的品味和《哈利波特》的属性有多匹配:

  • 你的科幻兴趣(0.9) × 书的科幻属性(0.3) = 0.27

  • 你的童真兴趣(0.2) × 书的童真属性(0.7) = 0.14

  • 你的学术兴趣(0.1) × 书的学术属性(0.0) = 0.00
    把这些加起来:0.27 + 0.14 + 0.00 = 0.41(再经过一个转换,就可以变成1-5的评分)

矩阵分解的强大之处:

  • 它甚至不需要《哈利波特》和《三体》被同一个用户评分过,只要它们通过"隐藏主题"关联起来就行。

  • 它能从稀疏的数据中学习到深层的关联,解决了协同过滤的稀疏性问题。


3. 深度学习与非线性特征:模拟人脑的复杂决策

传统的模型(如协同过滤、矩阵分解)可以看作是"线性"的。它们做的是加法和乘法,就像用一条直线或一个平面去拟合数据。

但人的喜好是非常复杂、非线性的

例子:你为什么喜欢一首歌?

不是简单的 摇滚成分 * 0.3 + 流行成分 * 0.5

可能是:

  • "我喜欢在周五晚上听带有复古Disco节奏,但歌词又很忧郁的电子音乐。"

  • "我讨厌大部分民谣,除非它的吉他编排非常复杂,并且主唱的声音有颗粒感。"

这种"除非...并且..."的复杂逻辑,就是非线性关系。线性模型很难捕捉到这种关系。

深度学习(神经网络)如何工作?

  1. 输入层:输入用户和物品的特征(比如ID、标签、内容等)。

  2. 隐藏层:进行多层的"加权求和 + 非线性变换"。

    • 加权求和:就像矩阵分解,计算不同特征的组合。

    • 非线性变换(激活函数):这是关键!它允许模型学习到这种"跳跃性"的逻辑。它不是一个平滑的直线,而是一个可以弯曲、转折的复杂曲线。每一层都在学习更抽象、更复杂的特征组合。

      • 第一层可能学到"摇滚"、"流行"。

      • 第二层可能学到"节奏感强的摇滚"。

      • 第三层可能学到"适合开车时听的、节奏感强的摇滚"。

  3. 输出层:最终输出一个预测的评分或点击概率。

可以把它想象成一个"特征抽象工厂":

  • 原始原料:用户ID、物品ID、标签、文字描述...

  • 第一层车间:把原料加工成基础零件("科幻"、"刘慈欣")。

  • 第二层车间:把基础零件组装成模块("硬核科幻"、"太空歌剧")。

  • 第三层车间:把模块组装成复杂产品("思想深刻、格局宏大的硬核科幻")。

  • 最终产品:预测用户对这个"复杂产品"的喜爱程度。

深度学习的优势:

  • 能自动学习极其复杂的特征交互,无需人工设计。

  • 可以轻松融合多种信息(用户画像、物品内容、行为序列等)。

  • 模型表达能力极强,上限非常高。

深度学习的劣势:

  • 像一个"黑盒子",难以解释为什么做出这个推荐。

  • 需要大量的数据和计算资源。

  • 模型复杂,训练和调试难度大。

总结

  • 余弦相似度:一个衡量"趋势一致性"的尺子,看两个人的喜好方向是否一致。

  • 矩阵分解:一个"品味解码器",把具体的评分抽象成隐藏的品味主题,再用这些主题来预测。

  • 深度学习:一个"超级大脑",通过多层非线性处理,模拟人类极其复杂和微妙的喜好决策过程,自动学习高级特征。

相关推荐
望十五江洋11 小时前
泊松分布的参数可加性
线性代数·机器学习·概率论
西西弗Sisyphus11 小时前
线性代数 - 初等矩阵
人工智能·线性代数·机器学习
追赶sun12 小时前
讨论矩阵等价、相似的几何含义
线性代数
西西弗Sisyphus13 小时前
线性代数 - 线性方程组的原始解法(高斯消元法)
线性代数·矩阵·线程方程组
程序员大雄学编程13 小时前
用Python来学微积分30-微分方程初步
开发语言·python·线性代数·数学·微积分
机器学习ing.14 小时前
U-Net保姆级教程:从原理到医学细胞分割实战(PyTorch版)!
人工智能·pytorch·python·深度学习·机器学习
HyperAI超神经15 小时前
在线教程丨端侧TTS新SOTA!NeuTTS-Air基于0.5B模型实现3秒音频克隆
人工智能·深度学习·机器学习·音视频·tts·音频克隆·neutts-air
CoovallyAIHub16 小时前
OCR战场再起风云:LightOnOCR-1B凭什么比DeepSeekOCR快1.7倍?(附演示开源地址)
深度学习·算法·计算机视觉
kyle~16 小时前
数学基础---刚体变换(旋转矩阵与平移矩阵)
线性代数·矩阵·机器人·旋转矩阵·平移矩阵