-->

AI内参_68_065_高级推荐模型之二协同矩阵分解

你好,我是洪亮杰。

今天我和你分享的主题是高级推荐模型之二,协同矩阵分解。

周一我们讨论了张量分解模型。

这种模型的特点是能够把不同的上下文当做新的维路放进一个张量中进行建模。

虽然张量分解式矩阵分解在概念上的一种直觉扩展,但其在现实建模的过程中有很大难度。

最大的问题就是张量分解的求解过程相对比较复杂,不同的分解方法又带来不同的建模选择。

今天我们来看另外一种思路,来解决融合多种渠道信息的问题,这就是协同矩阵分解。

为什么需要协同矩阵分解呢?在解释什么是协同矩阵分解之前,我们先来看一看为什么需要这样一种思路,我们还是需要回到矩阵分解本身。

矩阵分解的核心就是通过矩阵这个二维的数据结构来对用户和物品的交互信息进行建模,因为其二维的属性。

矩阵往往只能对用户的某一种交互信息直接进行建模,虽就带来很大的局限性。

在之前的讨论中,我们看到了一系列不同的思路,来对这样的基本结构进行扩展思路。

一就是通过建立显示变量和隐变量之间的回归关系,从而让矩阵分解的核心结构可以获得更多信息的帮助思路。

二则是采用分解机这样的集大成模型,从而把所有的特性都融入到一个统一的模型中去。

思路三,就是我们这周已经讲到的,利用张量把二维的信息扩展到n维进行建模。

这些已有的思路都各有利弊,需要针对具体的情况来分析究竟什么样的模型最有效果。

然而,在有些应用中,除了用户和物品这样很明显的二元关系以外,还有其他也很明显的二元关系。

如何把这些二元关系有效的组织起来,就变成了一个有挑战的任务。

什么意思呢?比如我们是一个社交媒体的网站,既有用户对于物品,比如帖子的交互信息,既有用户之间的互相连接信息,谁与谁是好友等。

那么如何来显示的表答这两类不同的二元关系呢?在前面的思路里面可以看到,我们似乎需要选择一个主要的关系来作为这个模型的基础框架。

然后其他的信息作为补充。

在这样两类关系中,选择哪一个作为主要关系,哪一个作为补充关系就显得有一点困难了。

更进一步说,对于用户与用户之间的建模,例及用户与物品之间的建模,我们其实会有不同的模型去构造。

例如,用户与物品之间的评分,往往用整数来代表评分的数值,或者是用实数来代表喜好度。

而用户与用户之间的友好关系则往往是零或者一象征是否有链接。

因此,我们可能需要不同的模型对这些不同的数值进行建模,这也就让研究人员想出了协同矩阵分解的思路。

下面我们就来看看协同矩阵分解的基本思路。

协同矩阵分解的基本思路其实非常直观。

那就是有多少种二元关系,就用多少个矩阵分解去建模这些关系。

用我们刚才所说的社交媒体的例子,如果我们有用户与用户的关系,用户与物品的关系,那我们就组织两个矩阵分解,分别来对这两种关系进行建模。

最早对这个思想进行的比较完整的表述。

我在文末列出了参考文献,这里的一个核心就是如果两个没有关系的矩阵各自做矩阵分解,那么分解出来的信息一般来说是没有任何关联的。

再来看刚才的例子,如果有一个用户与用户的矩阵需要分解,然后有一个用户与物品的矩阵需要分解。

那从这两个矩阵分解中,我们分别可以得到至少两组不同的用户隐变量。

一组是从用户与用户的关系而来。

一组是从用户与物品的关系而来。

这两两组用户的隐变量是不一样的。

同时因为两个矩阵没有关联,所以无法达到我们希望这两种关系互相影响的效果。

要想在两个矩阵分解之间建立联系,我们必须有其他的假设。

这里的其他假设就是两组不同的用户隐变量其实是一样的。

也就是说,我们假设或者认定用户隐变量,在用户与用户的关系中,以及在用户与物品的关系中,是同一组用户隐变量再起作用。

这样虽然表面上还是两个矩阵分解,但其实我们限定了其中某一部分参数的取值范围。

说的直白一些。

我们认定从两个矩阵分解出来的两组,来自同一个因素的隐变量是完全一样的。

用更加学术的语言来说,这就是将两组矩阵分别投影到了相同的用户空间和物品空间。

这样做的好处自然就是对于多种不同的关系来系能够找用相同隐变量。

这样的假设可以把这些关系都串联起来,然后减少了总的变量数目,同时也让各样关系互相影响。

那么这样的假设有没有潜在的问题呢?一个比较大的潜在问题就是使用同样的一组隐变量去表达所有的同类关系。

这样的假设存在一定的局限性。

比如上面的例子,用同样一组用户隐变量去解释用户和用户之间的关系,同时也需要去解释用户和物品之间的关系。

能够找到这样一组用户隐变量其实是有一定难度的。

而在实际应用中,不同关系的数据量会有很大的差距。

比如用户和物品关系的数据总量可能要比用户与用户的多。

所以由于用户和物品关系的数据多,两个矩阵分解用的同一组用户隐变量,很可能会更多的解释用户和物品的部分,从而造成了学到的隐变量,未必能够真正表达所有的关系。

对于这样的情况,自然已经有一些学者想到了对策,我们今天就不在这里展开了。

最后需要提一下,在协同矩阵分解的场景中,学习各个隐变量的参数的过程和一般的单个矩阵分解相比,没有太多本质性的变化。

最简单的学习过程依然是利用随机梯度下降法去学习,只不过每一个隐变量会存在于多个矩阵分解中,这在更新变量时增加了所需的计算量。

今天我为你讲了推荐系统的另一个高级模型,协同矩阵分解,用来对不同类型的二元信息进行建模。

一起来回顾一下要点。

第一,我们简要介绍了为什么需要协同矩阵分解。

第二,我们详细介绍了协同矩阵分解的原理、潜在问题和解法。

最后给你留一个思考题。

从概念上来看,协同矩阵分解和张量分解之间有怎样的关系?是不是所有的张量分解都可以化为多个协同矩阵分解呢?欢迎你给我留言,和我一起讨论。