推荐系统召回之item2vec召回

该召回手段,是基于google提出的word2vec方法,来计算不同items的隐向量,并通过计算不同items间的向量距离,来判断item-to-item间的相似度。
参考paper如下:
https://arxiv.org/vc/arxiv/papers/1603/1603.04259v2.pdf

综述

许多协作过滤(CF)算法是通过分析items间的关系来计算相似度的。最近,自然语言处理方面研究,建议使用神经嵌入算法去学习words的隐向量。众多研究之中,负采样的Skip-Gram算法,即word2vec,表现出了不错的效果。受此激发,作者提出了一种item-based协同过滤的方法,也就是item2vec。该方法计算了在隐向量空间中的items向量。即使当用户信息难以获取的时候,这种方法也能够用来推断出item-to-item间的关系。

word2vec是由神经概率语言模型延展而来,有CBOW(continuous Bag-Of-Words Model)和skip-gram(Continuous skip-gram Model)两种模型方法,对于两种模型,word2vec团队给出了两种框架实现,分别是Hierarchical softmax和Negative Sampling。而本文是基于Negative Sampling的Skip-Gram模型。
下面对这种模型做简单介绍。

基于负采样的skip-gram方法(SGNS)

SGNS是由Mikolov团队提出的一种神经语言嵌入方法。该方法目的在于找到词表示,来捕捉一个句子中的单词和上下文单词的关系。下面对SGNS方法做简短的介绍。
给定一个来自于词典 W = { w i } i = 1 W W = \{w_i\}_{i=1}^W W={wi}i=1W的词序列 ( w i ) i = 1 K (w_i)_{i=1}^K (wi)i=1K,skip-gram目标在于最大化下面的公式:
1 K ∑ i = 1 K ∑ − c ≤ j ≤ c , i ≠ 0 log ⁡ p ( w j ∣ w i ) \frac 1 K \sum_{i=1}^K \sum_{-c\le j \le c, i \ne0}\log p(w_{j}|w_{i}) K1i=1Kcjc,i=0logp(wjwi)
其中, c c c是上下文窗口尺寸(依赖于 w i w_{i} wi), p ( w j ∣ w i ) p(w_j|w_i) p(wjwi) 是softmax 函数:
p ( w j ∣ w i ) = exp ⁡ ( u i T v j ) ∑ k ∈ I W exp ⁡ ( u i T v k ) p(w_j|w_i) = \frac {\exp(u_i^T v_j)} {\sum_{k\in I_W} \exp(u_i^T v_k)} p(wjwi)=kIWexp(uiTvk)exp(uiTvj)
其中, u i ∈ U ( ⊂ R m ) u_i \in U(\subset R^m) uiU(Rm), v i ∈ V ( ⊂ R m ) {v_i \in V(\subset R^m)} viV(Rm)是对应单词 w i ∈ W w_i\in W wiW的目标隐向量和上下文隐向量。
I W : = 1 , . . . , ∣ W ∣ I_W := {1, ..., |W|} IW:=1,...,W
参数 m m m是基于数据集规模,根据经验选择的。
▽ p ( w j ∣ w i ) \triangledown p(w_j|w_i) p(wjwi)的计算复杂度是很高的,它是正比于词典尺寸 ∣ W ∣ |W| W的线性函数,通常尺寸在 1 0 5 − 1 0 6 10^5-10^6 105106

因此提出了负采样手段,去解决上述计算问题,公式变为:
p ( w j ∣ w i ) = σ ( u i T v j ) Π k = 1 N σ ( − u i T v k ) p(w_j|w_i) = \sigma (u_i^T v_j){\Pi_{k=1}^N\sigma(-u_i^T v_k)} p(wjwi)=σ(uiTvj)Πk=1Nσ(uiTvk)
其中, σ ( x ) = 1 / 1 + exp ⁡ ( − x ) \sigma (x) = 1/1+\exp(-x) σ(x)=1/1+exp(x), N N N是每个正样本所采集的负样本数。负样本词 w i w_i wi是从均匀分布的3/4次方中采样出来的。

子采样

为了克服低频和高频词的不平衡问题,会对样本做子采样。给定输入词序列,以一定概率随机丢弃单词 w w w
p ( d i s c a r d ∣ w ) = 1 − ρ f ( w ) p(discard|w) = 1 - \sqrt{\frac \rho {f(w)}} p(discardw)=1f(w)ρ

f ( w ) f(w) f(w)是词 w w w的频次, ρ \rho ρ是预设值。子采样能够加速学习,同时改善低频词的词向量表示。

最后, U U U V V V通过随机梯度上升法来获得最优值的

item2vec-用于item-based 协同过滤的SGNS

简而言之,就是把用户所产生行为的item集合当成NLP中的词,同时忽略时序关系。
作者把在同一个item集合内的item pair当成正样本。也就是说窗口尺寸是由集合尺寸决定的。因此,对于给定的item集合,目标函数可修改为:
1 K ∑ i = 1 K ∑ j ≠ i K log ⁡ p ( w j ∣ w i ) \frac 1 K \sum_{i=1}^K \sum_{j \neq i}^K \log p(w_j|w_i) K1i=1Kj=iKlogp(wjwi)
另一种是目标函数不变,但是在运行时shuffle items集合。在作者实验中,两种差别不大。

剩下的处理部分与前文中讲的相同。

在本文中,作者使用 u i u_i ui作为第 i i i个item的向量表示,并用余弦相似度计算items间距离。

后面作者详细对比了item2vec和SVD相似度结果,左图是item2vec结果,右图是SVD结果
推荐系统召回之item2vec召回_第1张图片
本篇博客主要简单整理了下论文内容,后续如果有新的学习体会,会继续补充。

你可能感兴趣的:(推荐系统,神经网络)