天天看點

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

https://blog.csdn.net/fly_time2012/article/details/78439662

前言

自從Mikolov在他2013年的論文“Efficient Estimation of Word Representation in Vector Space”[1]提出詞向量的概念後,NLP領域仿佛一下子進入了embedding的世界,Sentence2Vec、Doc2Vec、Everything2Vec。詞向量基于語言模型的假設——“一個詞的含義可以由它的上下文推斷得出“,提出了詞的Distributed Representation表示方法。相較于傳統NLP的高維、稀疏的表示法(One-hot Representation),Word2Vec訓練出的詞向量是低維、稠密的。Word2Vec利用了詞的上下文資訊,語義資訊更加豐富,目前常見的應用有:

1. 使用訓練出的詞向量作為輸入特征,提升現有系統,如應用在情感分析、詞性标注、語言翻譯等神經網絡中的輸入層。

2. 直接從語言學的角度對詞向量進行應用,如使用向量的距離表示詞語相似度、query相關性等。

MovieTaster

MovieTaster是我用Item2Vec實作的電影推薦demo,它可以針對輸入的一個或多個電影,基于豆瓣使用者UGC内容(豆列)産生推薦清單。Github repo現已公開。

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦
MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

Item2Vec

MovieTaster是Item2Vec在電影推薦上的實作,下面簡單介紹一下Item2Vec的内容。

Item2Vec是由O Barkan,N Koenigstein在他們2016年的論文“Item2Vec: Neural Item Embedding for Collaborative Filtering“[3]中提出的。論文把Word2vec的Skipgram with Negative Sampling (SGNS)的算法思路遷移到基于物品的協同過濾(item-based CF)上,以物品的共現性作為自然語言中的上下文關系,建構神經網絡學習出物品在隐空間的向量表示。論文中還比較了Item2Vec和SVD在微軟Xbox音樂推薦服務和Windows 10商店的商品推薦的效果,結果顯示Item2Vec效果有所提升。

總的來說,這篇論文的算法創新性不高,但把Word2Vec遷移到item-based CF的腦洞令人耳目一新。在Item2Vec中,一個物品集合被視作自然語言中的一個段落,物品集合的基本元素-物品等價于段落中的單詞。是以在論文中,一個音樂物品集合是使用者對某歌手歌曲的播放行為,一個商品集合是一個訂單中包含的所有商品。

從自然語言序列遷移到物品集合,丢失了空間/時間資訊,還無法對使用者行為程度模組化(喜歡和購買是不同程度的強行為)。好處是可以忽略使用者-物品關系,即便獲得的訂單不包含使用者資訊,也可以生成物品集合。而論文的結論證明,在一些場景下序列資訊的丢失是可忍受的。

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

Item2Vec的網絡結構與Word2Vec Skipgram的結構基本一緻,隻是輸入的w(t)替換為i(t)。論文中還提到,由于訓練資料遷移到物品集合,模型需要進行調整才能保證效果:

(1) 把Word2Vec的上下文視窗(window size)由定長的修改為變長的,長度由目前訓練的物品集合長度決定。此方法需要修改網絡結構。

(2) 不修改網絡結構,而在訓練神經網絡時對物品集合做shuffle操作,變相地起到忽略序列帶來對影響。

論文提出兩種方法的實驗效果基本一緻。

MovieTaster是如何實作的

MovieTaster的訓練資料(我爬的)是豆友們的電影豆列共6萬個,其中包括10萬+部電影。訓練item向量使用的工具是fasttext,訓練方式是skipgram、50個epoch,并濾去出現次數低于10次的電影。

我還嘗試了其它訓練參數,推薦結果如下:

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

從結果中可以觀察出一些有意思的結論。戰狼2是最近剛出的電影(此文作于2017/08),包含戰狼2的大多是“暑期國産電影合集”,“2017年不得不看的國産電影“這類豆列;美國往事屬于經典老片,訓練語料足夠多,skipgram和cbow的推薦結果各有千秋;小時代在豆瓣中屬于不受待見的一類電影,包含小時代的豆列較少,skipgram的推薦結果優于cbow。

大家關于Item2Vec有什麼腦洞,歡迎讨論。文章後續會公開部分源碼和資料集,并嘗試更多不同算法和參數的效果。

參考資料:

[1] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.

[2] word2vec 中的數學原理詳解

[3] Barkan O, Koenigstein N. Item2Vec: Neural Item Embedding for Collaborative Filtering[J]. 2016:1-6.

寫文章 登入

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

MovieTaster-使用Item2Vec做電影推薦

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

盧嘉穎 3 個月前

前言

自從Mikolov在他2013年的論文“Efficient Estimation of Word Representation in Vector Space”[1]提出詞向量的概念後,NLP領域仿佛一下子進入了embedding的世界,Sentence2Vec、Doc2Vec、Everything2Vec。詞向量基于語言模型的假設——“一個詞的含義可以由它的上下文推斷得出“,提出了詞的Distributed Representation表示方法。相較于傳統NLP的高維、稀疏的表示法(One-hot Representation),Word2Vec訓練出的詞向量是低維、稠密的。Word2Vec利用了詞的上下文資訊,語義資訊更加豐富,目前常見的應用有:

1. 使用訓練出的詞向量作為輸入特征,提升現有系統,如應用在情感分析、詞性标注、語言翻譯等神經網絡中的輸入層。

2. 直接從語言學的角度對詞向量進行應用,如使用向量的距離表示詞語相似度、query相關性等。

MovieTaster

MovieTaster是我用Item2Vec實作的電影推薦demo,它可以針對輸入的一個或多個電影,基于豆瓣使用者UGC内容(豆列)産生推薦清單。Github repo現已公開。

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦
MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

Item2Vec

MovieTaster是Item2Vec在電影推薦上的實作,下面簡單介紹一下Item2Vec的内容。

Item2Vec是由O Barkan,N Koenigstein在他們2016年的論文“Item2Vec: Neural Item Embedding for Collaborative Filtering“[3]中提出的。論文把Word2vec的Skipgram with Negative Sampling (SGNS)的算法思路遷移到基于物品的協同過濾(item-based CF)上,以物品的共現性作為自然語言中的上下文關系,建構神經網絡學習出物品在隐空間的向量表示。論文中還比較了Item2Vec和SVD在微軟Xbox音樂推薦服務和Windows 10商店的商品推薦的效果,結果顯示Item2Vec效果有所提升。

總的來說,這篇論文的算法創新性不高,但把Word2Vec遷移到item-based CF的腦洞令人耳目一新。在Item2Vec中,一個物品集合被視作自然語言中的一個段落,物品集合的基本元素-物品等價于段落中的單詞。是以在論文中,一個音樂物品集合是使用者對某歌手歌曲的播放行為,一個商品集合是一個訂單中包含的所有商品。

從自然語言序列遷移到物品集合,丢失了空間/時間資訊,還無法對使用者行為程度模組化(喜歡和購買是不同程度的強行為)。好處是可以忽略使用者-物品關系,即便獲得的訂單不包含使用者資訊,也可以生成物品集合。而論文的結論證明,在一些場景下序列資訊的丢失是可忍受的。

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

Item2Vec的網絡結構與Word2Vec Skipgram的結構基本一緻,隻是輸入的w(t)替換為i(t)。論文中還提到,由于訓練資料遷移到物品集合,模型需要進行調整才能保證效果:

(1) 把Word2Vec的上下文視窗(window size)由定長的修改為變長的,長度由目前訓練的物品集合長度決定。此方法需要修改網絡結構。

(2) 不修改網絡結構,而在訓練神經網絡時對物品集合做shuffle操作,變相地起到忽略序列帶來對影響。

論文提出兩種方法的實驗效果基本一緻。

MovieTaster是如何實作的

MovieTaster的訓練資料(我爬的)是豆友們的電影豆列共6萬個,其中包括10萬+部電影。訓練item向量使用的工具是fasttext,訓練方式是skipgram、50個epoch,并濾去出現次數低于10次的電影。

我還嘗試了其它訓練參數,推薦結果如下:

MovieTaster-使用Item2Vec做電影推薦 MovieTaster-使用Item2Vec做電影推薦

從結果中可以觀察出一些有意思的結論。戰狼2是最近剛出的電影(此文作于2017/08),包含戰狼2的大多是“暑期國産電影合集”,“2017年不得不看的國産電影“這類豆列;美國往事屬于經典老片,訓練語料足夠多,skipgram和cbow的推薦結果各有千秋;小時代在豆瓣中屬于不受待見的一類電影,包含小時代的豆列較少,skipgram的推薦結果優于cbow。

大家關于Item2Vec有什麼腦洞,歡迎讨論。文章後續會公開部分源碼和資料集,并嘗試更多不同算法和參數的效果。

參考資料:

[1] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.

[2] word2vec 中的數學原理詳解

[3] Barkan O, Koenigstein N. Item2Vec: Neural Item Embedding for Collaborative Filtering[J]. 2016:1-6.

繼續閱讀