计算items的相似性是现代推荐系统中的一个关键组成部分。过去,人们只是通过判断“有无”的方式来向量化系统中的各个items,这样的方式并不能很好地表示出items之间的关系,而且泛化能力很差。因此需要一种特殊的方法来将items映射到能够满足我们需求的向量上去。
后来研究人员研究出了使用SVD(奇异值分解,矩阵分解的一种)的方式来计算表示items的向量,这种方法从某种程度上已经满足了人们在计算items的相似性以及模型泛化能力的需求了。但是随着自然语言领域不断发展,研究人员开发出了一种叫做word2vec的神经语言模型,通过神经网络模型来隐式地计算出词汇表中的每一个单词的向量化表示,这种表示方式能够很好地描述单词间的语义和语法关系,从而使得模型具有相当的泛化能力,因此该方法及其变形已经被广泛地应用到NLP领域的各个方面。
所以,论文指出,可以使用相似的方法来计算协助过滤中所有items的向量化表示,从而隐式地得到items间的相互关系,使得我们能够更好地计算出items间的相似性以及提升模型的泛化能力。
这里主要介绍word2vec的负采样skip-gram模型实现方法,后面简称SGNS。SGNS是一个基于神经网络的单词映射方法,目的在于找到一种单词的表示方式以至于能够在一个句子中捕捉单词和它周围的词之间的关系。
首先,从一个有限的词汇表 W={wi}|W|i=1 中给定一个词序列 (wi)Ki=1 ,那么Skip-gram模型的目标就是要使得下面的概率公式最大化:
对于协同过滤的数据,items就是用户生成的数据集,而且有时候甚至无法得到用户和items集合之间的关系的。例如,我们可能得到一个商店得到的订单数据集,但是却没有关于是哪个用户的订单信息。换句话说,有一些场景是多个items数据集可能属于同一个用户,但是这样的信息并没有提供出来。
论文提出了把SGNS应用到基于item的协同过滤中。所以一旦我们意识到词序列事实上是等价于items的集合时,我们就能够把SGNS直接地应用到协同过滤数据中。
如果用items集合来取代词序列的话,items间的时空信息就会丢失,所以我们假定一个静态的环境,在这个环境中,共享同一个集合的items我们可以认为它们时相似的,无论它们是以什么样的顺序产生的。但是我们需要注意的是,这样的假设可能并不适用于其它场景,这里我们并不作讨论。
因为我们忽略了空间信息,所以我们把共享同一个集合的items对看成是一个正样本。这就意味着我们要根据items集合的大小确定上下文窗口的大小。具体地说,就是给定一个items集合,SGNS的目标函数我们可以修改成以下公式:
论文的实验表明,使用item2vec对协同过滤中的items计算相应的向量化表示,在items的相似度计算上比起SVD方法要更加优越,也就是说item2vec方法得到的items的向量化表示能够很好地提取items间的相似度特征。从应用上说,item2vec甚至能够应用到错误标签的检测和纠正上,所以item2vec具有很好的使用价值。
参考资料:
微软的研究人员发的论文
《ITEM2VEC: NEURAL ITEM EMBEDDING FOR COLLABORATIVE FILTERING》