推薦系統——Item2vec

一、背景

推薦系統中,傳統的CF算法都是利用 item2item 關係計算商品間相似性。i2i數據在業界的推薦系統中起着非常重要的作用。傳統的i2i的主要計算方法分兩類,memory-based和model-based。

本文主要介紹了microsoft和airbnb兩大公司如何將embedding技術應用於推薦/搜索業務。實踐證明,embedding技術對於工業場景來說有着很大的價值和應用前景。

還有什麼是 embedding?爲什麼說 embedding 是深度學習的基本操作?

簡單來說,embedding 就是用一個低維的向量表示一個物體,可以是一個詞,或是一個商品,或是一個電影等等。這個 embedding 向量的性質是能使距離相近的向量對應的物體有相近的含義,比如 Embedding(復仇者聯盟)和 Embedding(鋼鐵俠)之間的距離就會很接近,但 Embedding(復仇者聯盟)和 Embedding(亂世佳人)的距離就會遠一些。

除此之外 Embedding 甚至還具有數學運算的關係,比如 Embedding(馬德里)-Embedding(西班牙)+Embedding(法國)≈Embedding(巴黎)

從另外一個空間表達物體,甚至揭示了物體間的潛在關係,從某種意義上來說,Embedding 方法甚至具備了一些本體論的哲學意義。

言歸正傳,Embedding 能夠用低維向量對物體進行編碼還能保留其含義的特點非常適合深度學習。在傳統機器學習模型構建過程中,我們經常使用 one hot encoding 對離散特徵,特別是 id 類特徵進行編碼,但由於 one hot encoding 的維度等於物體的總數,比如阿里的商品 one hot encoding 的維度就至少是千萬量級的。這樣的編碼方式對於商品來說是極端稀疏的,甚至用 multi hot encoding 對用戶瀏覽歷史的編碼也會是一個非常稀疏的向量。而深度學習的特點以及工程方面的原因使其不利於稀疏特徵向量的處理。因此如果能把物體編碼爲一個低維稠密向量再餵給 DNN,自然是一個高效的基本操作。

首先先了解一下word2vec,不太清楚朋友可以轉補到
NLP–Word2Vec詳解

二. Item Embedding

2.1 item2vec Microsoft

ITEM2VEC: NEURAL ITEM EMBEDDING FOR COLLABORATIVE FILTERING

這篇論文是微軟將word2vec應用於推薦領域的一篇實用性很強的文章。該文的方法簡單易用,可以說極大拓展了word2vec的應用範圍,使其從NLP領域直接擴展到推薦、廣告、搜索等任何可以生成sequence的領域。

2.1.1 SKip-gram with negative sampling

目標函數

1Ki=1Kcjc,j0logp(wi+jwi)\frac{1}{K} \sum_{i=1}^{K} \sum_{-c \leq j \leq c, j \neq 0} \log p\left(w_{i+j} | w_{i}\right)

其中

p(wjwi)=σ(uiTvk)k=1Nσ(uiTvk)σ(x)=1/1+exp(x)\begin{array}{c} p\left(w_{j} | w_{i}\right)=\sigma\left(u_{i}^{T} v_{k}\right) \prod_{k=1}^{N} \sigma\left(-u_{i}^{T} v_{k}\right) \\ \sigma(x)=1 / 1+\exp (-x) \end{array}

爲了] 對樣本進行二次採樣, 以一定概率丟棄樣本

p(discardw)=1ρf(w)p(\operatorname{discard} | w)=1-\sqrt{\frac{\rho}{f(w)}}

2.1.2 item2vec

item出現在同一集合中爲正例,否則爲負例。同一集合可以根據具體場景定義,例如:用戶同一訂單下的商品。

目標函數變更爲:

1Ki=1KjiKlogp(wjwi)\frac{1}{K} \sum_{i=1}^{K} \sum_{j \neq i}^{K} \log p\left(w_{j} | w_{i}\right)

2.1.3 Experimental Results
數據集

  1. Microsoft Xbox Music

    user-artist relation:用戶播放了某個歌手的歌曲

  2. Microsoft Store

用戶同一訂單下訂購的商品

結果

  • 將用item2vec方式和SVD方式產出的artist embedding降維到2維空間,如圖所示:

在這裏插入圖片描述並將同種類型的artists用相同顏色進行標識,結果顯示,item2vec的聚合效果更好。

  • 能夠使用簡單的KNN方式對網上artists的類型進行糾正和標註
    在這裏插入圖片描述
    對topq的artists進行分類預測(KNN),準確率較高,且對歷史數據較少的artists表示效果更好

在這裏插入圖片描述

  • item2vec和SVD直觀效果比較,表中列除了seed item以及與其最相似item
    在這裏插入圖片描述可以得出結論:

1)item2vec可以探索出除了“類型”之外其他的相似性;

2)item2vec提供列更相關的item,且對於信息較少的情況下,表現較佳

2.2 item2vec Airbnb

Real-time Personalization using Embeddings for Search Ranking at Airbnb

Airbnb的這篇論文是KDD 2018的best paper。我們知道,airbnb是全世界最大的短租網站。在平臺上,房東(host)可以向用戶(user)提供房源(listing),用戶可以通過輸入地點、價位等關鍵詞搜索相關的房源信息,並做瀏覽選擇。user和host的交互行爲分成三種:user點擊/預定listing,host拒絕預定。基於這樣的業務背景,本文提出了兩種embedding的方法分別去capture用戶的短期興趣和長期興趣。利用用戶click session和booking session序列,訓練生成listing embedding 和 user-type&listing-tpye embedding,並將embedding特徵輸入到搜索場景下的rank模型,提升模型效果。下面會分別介紹這兩種embedding方法。

2.2.1 Listing Embedding
數據.

利用用戶的click session,定義點擊listing序列,並基於此序列訓練出listing embedding。

click session定義:用戶在一次搜索中點擊的listing序列。序列生成有兩個限制條件:1) 停留時間超過30s,點擊有效 2) 用戶點擊間隔時間超過30min,記爲新序列

模型.

基於負採樣的Skip-gram模型結構,並對目標函數進行了改造。

negative sampling方式訓練的objective如下,採用隨機梯度上升的方法更新參數。

argmaxθ(l,c)Dplog11+evcvl+(l,c)Dnlog11+evcvl\underset{\theta}{\operatorname{argmax}} \sum_{(l, c) \in \mathcal{D}_{p}} \log \frac{1}{1+e^{-\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}+\sum_{(l, c) \in \mathcal{D}_{n}} \log \frac{1}{1+e^{\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}

正樣本:滑動窗口中的listing;負樣本:listing集合中隨機採樣的樣本。

Airbnb基於實際場景,針對業務特點,做了如下改造:

  • 引入訂購信息,將點擊後最終訂購的房源作爲全局的上下文條件 (global context),以正樣本的形式加入到目標函數:

argmaxθ(l,c)Dplog11+evcvl+(l,c)Dnlog11+evcvl+log11+evlvl\underset{\theta}{\operatorname{argmax}} \sum_{(l, c) \in \mathcal{D}_{p}} \log \frac{1}{1+e^{-\mathrm{v}_{c}^{\prime} \mathrm{v}_{l}}}+\sum_{(l, c) \in \mathcal{D}_{n}} \log \frac{1}{1+e^{\mathrm{v}_{c}^{\prime} \mathrm{v}_{l}}}+\sqrt{\log \frac{1}{1+e^{-\mathrm{v}_{l}^{\prime}} \mathrm{v}_{l}}}

即不管這個booking listing是否在滑動窗口內,都會認爲它與中心listing相關。直觀上也很好理解,即瀏覽點擊的房源和我最終預訂目標一定是相似相關的。

  • 考慮到線上預訂旅行住所,用戶搜索瀏覽的往往是單一地點(目的地)的listing。因此正樣本往往都是在同一地點,而隨機採樣的負樣本極有可能不在同一地點,這種不平衡往往會導致學不到最優解。爲了更好地發現同一地點房源的差異性,修改目標函數如下:

argmaxθ(l,c)Dplog11+evcvl+(l,c)Dnlog11+evcvl\underset{\theta}{\operatorname{argmax}} \sum_{(l, c) \in \mathcal{D}_{p}} \log \frac{1}{1+e^{-\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}+\sum_{(l, c) \in \mathcal{D}_{n}} \log \frac{1}{1+e^{\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}
+log11+evl,vl+l,mnDmnlog11+evmn+\log \frac{1}{1+e^{-\mathbf{v}_{l}^{\prime}, \mathbf{v}_{l}}}+\sqrt{\sum_{l, m_{n}} \sum_{\mathcal{D}_{m_{n}}} \log \frac{1}{1+e^{\mathbf{v}_{m_{n}^{\prime}}}}}

即加入另一組與中心房源地點相同的listing集合中進行隨機抽樣的negative samples。

在這裏插入圖片描述
此外,文中還提到了listing embedding冷啓動問題的解決方法。平臺每天都有新房源登記,房東登記房源往往會提供房源的地點、價格等基本信息,取附近的3個同樣類型、相似價格的listing embedding平均值生成該房源的embedding,用這種方法可以覆蓋98%新房源,不失爲一個實用的工程經驗。

評估.

生成的listing embedding向量捕捉了怎樣的特徵?做了如下驗證。

基於學到的embedding使用k-means方法聚類,由圖下2以看出,相近位置的房源聚集在了一起,embedding向量成功捕捉到房源的位置特徵;此外,由表1&2可以看出,相同類型和價格範圍的房源之間的餘弦相似性遠高於不同類型和不同價格的房源之間的相似性。房源類型、價格三類特徵已很好地包含在embedding中。

在這裏插入圖片描述
除了像價格這種可以不用學習直接可以拿到的房源信息特徵,還有一些無法直接提取到的特徵,例如建築風格、設計風格、感覺等。爲了直觀上評估embedding的效果,Airbub做了一個驗證工具,根據輸入listing輸出K個最近鄰listings,由圖中可以看出返回的房源建築風格與目標房源有着相同的建築風格。

在這裏插入圖片描述
2.2.2 User-type & Listing-type Embedding
點擊行爲可以反映用戶的實時需求,但往往無法捕捉用戶長期興趣偏好。

使用booking session序列來捕捉用戶長期興趣,但是這裏會遇到嚴重的數據稀疏問題。

數據.

booking session的數據稀疏問題

  • book行爲的數量遠遠小於click的行爲
  • 單一用戶的book行爲很少,大量用戶在過去一年甚至只book過一個房源
  • 大部分listing被book的次數較少

如何解決這些問題?利用User-type&Listing-type進行聚合。用戶和房源屬性如下表。

在這裏插入圖片描述最終序列由同一用戶的預訂序列構成(相同用戶在不同時間段,user_type可能不同):

sb=(utype1ltype1,,utypeMltypeM)Sbs_{b}=\left(u_{t y p e_{1}} l_{t y p e_{1}}, \ldots, u_{t y p e_{M}} l_{t y p e_{M}}\right) \in \mathcal{S}_{b}

模型

ser-type更新

argmaxθ(ut,c)Dbooklog11+evcvut+(ut,c)Dneglog11+evcvut\underset{\theta}{\operatorname{argmax}} \sum_{\left(u_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+e^{-\mathrm{v}_{c}^{\prime} \mathrm{v} u_{t}}}+\sum_{\left(u_{t}, c\right) \in \mathcal{D}_{n e g}} \log \frac{1}{1+e^{\mathrm{v}_{c}^{\prime} v_{u_{t}}}}

isting_type更新

argmaxθ(lt,c)Dbooklog11+evcvlt+(lt,c)Dneglog11+evcvlt\underset{\boldsymbol{\theta}}{\operatorname{argmax}} \sum_{\left(l_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+e^{-\mathrm{v}_{c}^{\prime} \mathrm{v}_{l t}}}+\sum_{\left(l_{t}, c\right) \in \mathcal{D}_{n e g}} \log \frac{1}{1+e^{\mathrm{v}_{c}^{\prime} \mathrm{v}_{l_{t}}}}

爲了提高預訂成功率,考慮房東可能會拒絕訂購(可能用戶信譽度不高)

argmaxθ(ut,c)Dbooklog11+expvcvut+(ut,c)Dneglog11+expvcvut\operatorname{argmax}_{\boldsymbol{\theta}} \sum_{\left(u_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+\exp ^{-\mathbf{v}_{c}^{\prime} \mathbf{v}_{u_{t}}}}+\sum_{\left(u_{t}, c\right) \in \mathcal{D}_{n e g}} \log \frac{1}{1+\exp ^{\mathrm{v}_{c}^{\prime} \mathbf{v}_{u_{t}}}}
+(ut,lt)Drejectlog11+expltvut\quad+\sum_{\left(u_{t}, l_{t}\right) \in \mathcal{D}_{\text {reject}}} \log \frac{1}{1+\exp _{l_{t}^{\prime} \mathrm{v} u_{t}}}

argmaxθ(lt,c)Dbooklog11+expvcvlt+(lt,c)Dneglog11+expvcvlt\operatorname{argmax}_{\theta} \sum_{\left(l_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+\exp ^{-v_{c}^{\prime} v_{l t}}}+\sum_{\left(l_{t}, c\right) \in \mathcal{D}_{n e g}} \log \frac{1}{1+\exp ^{v_{c}^{\prime} v_{l t}}}
+(lt,ut)Drejectlog11+expvutvlt\quad+\sum_{\left(l_{t}, u_{t}\right) \in \mathcal{D}_{r e j e c t}} \log \frac{1}{1+\exp ^{v_{u_{t}}^{\prime} v_{l_{t}}}}

在這裏插入圖片描述2.2.3 Embeddings for Search Ranking
訓練得到的embedding最終應用到search rank模型中。

Airbnb的搜索使用的模型是Gradient Boosting Decision Trees (GBDT)模型,模型使用了大約100個特徵,如下:

在這裏插入圖片描述embedding特徵定義如下:

在這裏插入圖片描述2.2.4 Evaluation
離線效果

在這裏插入圖片描述embedding特徵重要性

在這裏插入圖片描述

item2vec與MF的區別

首先,二者都應用了隱向量來表徵實體特徵,不同的是,傳統的 MF 通常是 user-item 矩陣,而 Item2Vec 通過滑動窗口樣本生成的方式構造出的則更像是 item-item 矩陣;另外,二者得到隱向量的方式也不同,MF 利用均方差損失,使預測得分與已有得分之間的誤差儘可能地小,而 Item2Vec 則是利用空間信息並藉助了最大似然估計的思想,使用對數損失,使上下文關係或者共現關係構造出的正樣本的 item Pair 出現的概率可能地大;此外訓練 Item2Vec 的時候還要引入負樣本,這也是與 MF 不同的地方。

對於二者在推薦效果上的差異,一個經驗是傳統 MF 推薦會讓熱門內容經常性排在前面,而 Item2vec 能更好的學到中頻內容的相似性。Iterm2Vec 加上較短的時間窗口,相似推薦會比 MF 好很多。

通俗點的Item2vec

把場景轉換到一個新聞媒體如A公司。

在A公司的多個頁面中,電商公司B有他們的一個主頁,專門介紹他們公司一些產品促銷,搶購和發佈會什麼的。

公司A目前有很多用戶的瀏覽數據,如用戶u瀏覽了公司A的頁面a1,a2,a3等。

把這些數據處理一下,整合成word2vec能處理的數據,如下

U1  a1,a2,a3……

U2  a2,a3,a5,……

U3  a1,a3,a6,……

其中u1,u2,u3表示不同的用戶,後面的一串表示這些用戶的瀏覽記錄,如U1 a1,a2,a3表示用戶u1先瀏覽了頁面a1,再瀏覽a2,然後瀏覽了a3,……

這些數據還不符合word2vec的輸入數據格式,把第一列去掉,變成下面的樣子

a1,a2,a3……

a2,a3,a5,……

a1,a3,a6,……

這些數據就可以作爲word2vec的輸入數據了。

就把這些數據作爲word2vec的訓練數據,詞向量維度爲3,進行訓練,完成後得到下面的輸出

A1  (0.3,-0.5,0.1)

A2  (0.1,0.4,0.2)

A3  (-0.3,0.7,0.8)

……

An  (0.7,-0.1,0.3)

就得到了每個頁面的向量。

這些向量有啥意義呢?其實單個向量的意義不大,只是用這些向量可以計算一個東西——距離,這個距離是頁面之間的距離,如頁面a1和a2可以用歐式距離或者cos距離計算公式來計算一個距離,這個距離是有意義的,表示的是兩個網頁在用戶瀏覽的過程中的相似程度(也可以認爲是這兩個頁面的距離越近,被同一個人瀏覽的概率越大)。注意這個距離的絕對值本身也是沒有意義的,但是這個距離的相對大小是有意義的,意思就是說,假設頁面a1跟a2、a3、a4的距離分別是0.3、0.4、0.5,這0.3、0.4、0.5沒啥意義,但是相對來說,頁面a2與a1的相似程度就要比a3和a4要大。

那麼這裏就有玄機了,如果頁面a1是電商公司B的主頁,頁面a2、a3、a4與a1的距離在所有頁面裏面是最小的,其他都比這三個距離要大,那麼就可以認爲同一個用戶u瀏覽a1的同時,瀏覽a2、a3、a4的概率也比較大,那麼反過來,一個用戶經常瀏覽a2、a3、a4,那麼瀏覽a1的概率是不是也比較大呢?從實驗看來可以這麼認爲的。同時還可以得到一個推論,就是用戶可能會喜歡a1這個頁面對應的廣告主的廣告。

這個在實驗中實際上也出現過的。這裏模擬一個例子吧,如a1是匹克體育用品公司在媒體公司A上的官網,a2是湖人隊比賽數據頁,a3是熱火隊的灌水討論區,a4是小牛隊的球員討論區。這個結果看起來是相當激動人心的。

根據這樣的一個結果,就可以在廣告主下單的那個頁面上增加一個條件——經常瀏覽的相似頁面推薦,功能就是——在廣告主過來選條件的時候,可以選擇那些經常瀏覽跟自己主頁相似的頁面的用戶。舉個例子就是,當匹克體育用品公司來下單的時候,頁面上給它推薦了幾個經常瀏覽頁面的粉絲:湖人隊比賽數據頁,熱火隊的灌水討論區,小牛隊的球員討論區。意思是說,目標人羣中包括了經常瀏覽這三個頁面的人。

這個功能上線後是獲得過很多廣告主的好評的。

YouTube 的 user 和 video embedding 網絡

在這裏插入圖片描述

參考自:
會飛的珊瑚蟲
Emma
王喆的機器學習筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章