最早看到Item2vec是微软研究院的这篇文章(https://arxiv.org/vc/arxiv/papers/1603/1603.04259v2.pdf),本文主要是对这篇论文做一些介绍,Item2vec主要思想是借鉴了Word2Vec,并且采用SGNS(Skip-gram + Negative Sampling)的方法来生成物品向量,最后只需要计算当前浏览的物品与其它物品的向量相似度,从而找到相似物品。一般像电商网站的“看了也看”、“买了也买”、“相似物品”模块比较适合应用Item2Vec算法,因为缺少用户信息,另外用户也可能是未登陆状态,另外从实际效果来看,Item2Vec不比SVD差,甚至还好一些。
下面主要介绍下Skip-gram + Negative Sampling,Skip-gram的思想是用中心词预测周围的词,优化目标是中心词存在的情况下周围词存在的概率最大,从而得到所有词的向量,公式如下:
其中p(wj |wi)表示中心词wi存在的情况下周围词wj存在的概率。
在词库数量10万-100万的量级下,计算p(wj |wi)的代价会非常大,因此采用负采样来减少计算。对每个正样本,根据3/4指数分布采样N个负样本,新的计算公式如下:
最后介绍下基于SGNS的物品相似度计算方法,一般计算物品之间的余弦相似度。