1.背景:
最早看到Item2vec是微軟研究院的這篇文章,發表於2016年ICML。本文主要是對這篇論文做一些介紹,Item2vec主要思想是借鑑了Word2Vec,並且採用SGNS(Skip-gram + Negative Sampling,思想是用中心詞預測周圍的詞)的方法來生成物品向量,最後只需要計算當前瀏覽的物品與其它物品的向量相似度,從而找到相似物品。一般像電商網站的“看了也看”、“買了也買”、“相似物品”模塊比較適合應用Item2Vec算法。
主要做法是把item視爲word,用戶的行爲序列視爲一個集合,item間的共現爲正樣本,並按照item的頻率分佈進行負樣本採樣,缺點是相似度的計算還只是利用到了item共現信息,1).忽略了user行爲序列信息; 2).沒有建模用戶對不同item的喜歡程度高低。
Item2Vec這個名詞的由來:在隱空間中產生的item embeding向量用在基於item的協同過濾,這種方法稱之爲item2vec。(原文:we name Item2Vec for item-based CF that produces embedding for items in a latent space)
2.原理
SGNS:
優化目標:中心詞存在的情況下週圍詞存在的概率最大,從而得到所有詞的向量:
negative sampling--- 提升計算性能
在詞庫數量10萬-100萬的量級下,計算p(wj |wi)的代價會非常大,因此採用負採樣來減少計算。對每個正樣本,根據3/4指數分佈採樣N個負樣本,這個採樣比例是在實驗中效果顯著的。
這個公式的意義:u是target,v是context,最大化和u有關聯的v,最小化和u沒關聯的v.sigmod函數。
對於常見詞和不常見詞的不平衡性問題,這裏做了一下下采樣,給出一個輸入序列,以一定概率丟棄這個詞w,頻率越高,丟棄的概率越大。
Item2Vec – SGNS for item-based CF
實驗結果好於SVD,item2vec對出現次數少的item也有較好的表示,得益於負採樣和丟詞優化。
3.代碼註解:
sparkML中,
4.論文精讀:
參考:
1.論文:https://arxiv.org/vc/arxiv/papers/1603/1603.04259v2.pdf
3.介紹word2vector和item2vector:https://blog.csdn.net/fuzi2012/article/details/91345164
4.個性化召回的應用:https://www.cnblogs.com/hellojamest/p/11766401.html
5.原理概要:https://zhuanlan.zhihu.com/p/24339183?refer=deeplearning-surfing
6.python實現 地址