item2vec:协作过滤的项目向量化映射

ITEM2VEC: NEURAL ITEM EMBEDDING FOR COLLABORATIVE FILTERING


介绍

   计算items的相似性是现代推荐系统中的一个关键组成部分。过去,人们只是通过判断“有无”的方式来向量化系统中的各个items,这样的方式并不能很好地表示出items之间的关系,而且泛化能力很差。因此需要一种特殊的方法来将items映射到能够满足我们需求的向量上去。
   后来研究人员研究出了使用SVD(奇异值分解,矩阵分解的一种)的方式来计算表示items的向量,这种方法从某种程度上已经满足了人们在计算items的相似性以及模型泛化能力的需求了。但是随着自然语言领域不断发展,研究人员开发出了一种叫做word2vec的神经语言模型,通过神经网络模型来隐式地计算出词汇表中的每一个单词的向量化表示,这种表示方式能够很好地描述单词间的语义和语法关系,从而使得模型具有相当的泛化能力,因此该方法及其变形已经被广泛地应用到NLP领域的各个方面。
   所以,论文指出,可以使用相似的方法来计算协助过滤中所有items的向量化表示,从而隐式地得到items间的相互关系,使得我们能够更好地计算出items间的相似性以及提升模型的泛化能力。


word2vec简介

   这里主要介绍word2vec的负采样skip-gram模型实现方法,后面简称SGNS。SGNS是一个基于神经网络的单词映射方法,目的在于找到一种单词的表示方式以至于能够在一个句子中捕捉单词和它周围的词之间的关系。
   首先,从一个有限的词汇表 W={wi}|W|i=1 中给定一个词序列 (wi)Ki=1 ,那么Skip-gram模型的目标就是要使得下面的概率公式最大化:

1Ki=1Kcjc,j0logp(wi+j|wi)
这里c是选定的上下文窗口参数, p(wj|wi) 是通过下面的softmax函数来计算得到的:
p(wj|wi)=exp(uTivj)kIwexp(uTivk)
上面公式中, uiU(Rm) viV(Rm) 是对应于目标单词 wiW 及其周围的上下文单词的潜在向量表示;而 Iw={1,...,|W|} 以及向量的维度参数 m 是根据数据集的大小来实证决定的。
   为了最大化上述的概率,必须要计算出 p(wj|wi) 对于每一个潜在向量元素的偏导数 p(wj|wi) ,需要的计算开销大概是词汇表大小 |W| 的线性函数,这样的开销是非常大的,所以上述的概率计算公式在实际中有点不切实际。
   因此,研究人员开发出了一种叫做负采样的方法来简化这样的计算问题。负采样方法是要把上述的softmax函数替换成以下公式:
p(wj|wi)=σ(uTivj)k=1Nσ(uTivk)
这里, σ(x)=11+exp(x) N 是决定了在每一个正样本中才多少负样本的数目参数。一个负样本单词 wi 是从一元分布的 34 次幂中采样得到的。事实证明,从 34 次幂的单词一元分布中进行负采样比起从普通的词一元分布中负采样性能更好。
   另一方面,为了解决罕见单词和频繁单词的不平衡问题,一些论文中提出了以下子采样方法。给定输入单词序列,对于每一个单词我们都使用这个概率公式 p(discard|w)=1ρf(w) 表示一个单词可能被忽视的概率,这里 f(w) 是单词 w 的词频,而 ρ 是一个预设的阈值。这个过程能够加速整个算法的学习过程以及能够大大地改善罕见单词的表示。
   最终, U V 都是对目标函数使用随机梯度上升的方法来估测得到的。


item2vec:SGNS应用到items的相似性

   对于协同过滤的数据,items就是用户生成的数据集,而且有时候甚至无法得到用户和items集合之间的关系的。例如,我们可能得到一个商店得到的订单数据集,但是却没有关于是哪个用户的订单信息。换句话说,有一些场景是多个items数据集可能属于同一个用户,但是这样的信息并没有提供出来。
   论文提出了把SGNS应用到基于item的协同过滤中。所以一旦我们意识到词序列事实上是等价于items的集合时,我们就能够把SGNS直接地应用到协同过滤数据中。
   如果用items集合来取代词序列的话,items间的时空信息就会丢失,所以我们假定一个静态的环境,在这个环境中,共享同一个集合的items我们可以认为它们时相似的,无论它们是以什么样的顺序产生的。但是我们需要注意的是,这样的假设可能并不适用于其它场景,这里我们并不作讨论。
   因为我们忽略了空间信息,所以我们把共享同一个集合的items对看成是一个正样本。这就意味着我们要根据items集合的大小确定上下文窗口的大小。具体地说,就是给定一个items集合,SGNS的目标函数我们可以修改成以下公式:

1Ki=1KjiKlogp(wj|wi)
。另一种修改方式是保持原来的公式不变,然后在运行的时候把每一个items集合打乱。但是论文的实验表明,两种修改的方式其实性能是一样的。
   剩下的过程就和SGNS中所描述的一样了,因此我们把该方法命名为item2vec。
   还需要说明的是,在论文中,作者把 ui 作为第i个item的最终的向量表示,同时两个item的相似度是通过余弦相似度进行计算的。令一种选择是用 vi 、或者 ui vi 的加法组合 ui+vi 、或者 ui vi 的串接 [uTivTi]T 来表示。需要注意的是,后两种表示方式有时候能够产生非常好的向量表示方式。


总结

   论文的实验表明,使用item2vec对协同过滤中的items计算相应的向量化表示,在items的相似度计算上比起SVD方法要更加优越,也就是说item2vec方法得到的items的向量化表示能够很好地提取items间的相似度特征。从应用上说,item2vec甚至能够应用到错误标签的检测和纠正上,所以item2vec具有很好的使用价值。


参考资料:
微软的研究人员发的论文
《ITEM2VEC: NEURAL ITEM EMBEDDING FOR COLLABORATIVE FILTERING》

你可能感兴趣的:(机器学习)