1. 程式人生 > >幾種推薦搜尋場景下的使用者Embedding策略

幾種推薦搜尋場景下的使用者Embedding策略

所謂Embedding策略,就是用一個向量來描述一個實體的思想,這種思想用向量來描述實體資訊,不僅僅包含了實體本身的屬性資訊,同時還包含了實體之間的關聯資訊,以及實體和最終目標任務之間的關聯資訊。

這種方法最早其實是運用在NLP領域—詞向量就是很好的例子,但是隨著深度學習在其他各個領域(尤其是搜尋/推薦/廣告)的應用,衍生出了各種各樣的變種,目前成為了深度學習應用到各個領域之中的標準方法。下面就來講解幾篇使用Embedding策略在各種任務場景中提取使用者資訊的paper。

今天講解的第一篇paper是2015年在WWW會議上發表的論文《Modeling User Activities on the Web using Paragraph Vector》。這個paragraph vector就是NLP領域中的一個模型,他相對於把這個模型拿過來應用到了Web 領域,用來提取的是使用者的Embedding資訊,整個問題場景描述如下:
使用者在瀏覽網頁的時候會留下來一系列的行為,比方說網頁瀏覽,搜尋問題,點選廣告等,設使用者 i

i 留下的 T T 個行為表示為 ( a i ,
1 , a i , 2 . .
. . , a i , T i ) (a_{i,1},a_{i,2}....,a_{i,T_i})
。我們希望根據所有的使用者行為資料,生成表徵每一個使用者的向量,使具有相同行為序列的使用者被對映到相似的向量空間之中。
該論文借鑑了skip-gram 的思想,公式如下:
p ( a i , t a i , t 1 , . . . a i , t s , u i ) = e x p ( w a i , t . v T ) / a A e x p ( w a . v I ) p(a_{i,t}|a_{i,t-1},...a_{i,t-s},u_i)=exp(w_{a_{i,t}}.v_{T})/\sum_{a \in A}exp(w_{a}.v_I)
其中 v I = C o n c a t ( a i , t 1 , . . . a i , t s , u i ) v_{I}=Concat(a_{i,t-1},...a_{i,t-s},u_i) 。由於採用該方式會導致計算量過大,故會採用負取樣技術,最終的優化的損失函式如下:
L = l o g σ ( w a , i , t , v I ) + k E a n [ l o g σ ( w a n v I ) ] L=log \sigma (w_{a,{i,t}},v_I)+k*E_{a_n}[log \sigma(-w_{a_n}v_I)]
最終採用的是AdaGrad進行模型的訓練,最終就能得到表徵每個使用者屬性的向量 u i u_i ,該向量可以運用在很多後續的任務之中。

今天講解的第二篇paper是2015年發表的論文《Metadata Embeddings for User and Item Cold-start Recommendations》。其實這篇paper本身的模型非常簡單就是對經典的FM做了小小的改動,但是其用到的思想是非常有啟發意義的。FM在描述實體互動上採用了向量內積的方式,即使用向量來描述實體屬性,使用向量的內積操作來表達實體之間的特徵互動。但是對於一些冷啟動的場景下確是不太適合,比方說有些使用者或者item是新加入的,對於他們的Embedding就很難生成了。這裡作者巧妙的提出了feature Embedding的概念,即使用者的Embedding是由其對應的feature Embedding相加得到的,對於商品的Embedding來說也是相同的處理思想,如下述公式所示:
q u = j f u e j U q_u=\sum_{j \in f_u}e_j^U
p i = j f i e j I p_i=\sum_{j \in f_i}e_j^I

今天講解的第三篇paper是2018年在KDD會議上發表的論文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》,這是Airbnb針對其名宿租賃場景提出的一個模型,目標是對user和host listing進行Embedding,從而完成host listing的相似度匹配工作。
從本質上來說,這篇paper提出的幾個idea都是對skip-gram模型進行微小的修改,從而適配Airbnb適用的目標場景。

listing Embedding
首先我來介紹一下listing Embedding的應用場景,假設集合 S S 包含了N個使用者的click session行為資訊,每一個click session S = ( l 1 , l 2 , . . . l M ) S=(l_1,l_2,...l_M) 其實是由 M M 個listing id組成的。由於每一個使用者點選行為會非常多,這些listing id的長度會很長,為了分段這些記錄,使用30min為間隔進行分段,即同一個使用者兩個click行為之間的間隔在30min以上的就認為是2個session。

從描述中不難看出,每一個session就相當於一個句子,每一個listing 就相對於句子中的每一個詞語,直接套用原始的skip-gram就可以生成每一個listing的Embedding形式的向量,skit-gram + negative sampling公式如下:
L = ( l , c ) D p l o g 1 1 + e v c v l ( l , c ) D n l o g 1 1 + e v c v l L=-\sum_{(l,c)\in D_p} log \frac{1}{1+e^{-v_cv_l}}-\sum_{(l,c)\in D_n} log \frac{1}{1+e^{v_cv_l}}
當然這是最基本的模型,如果只有這個,這篇paper是不會被kdd錄用的。接下來,作者通過進一步分析每一個session,他發現所有的session可以分為2中型別:1 成功轉化的session,即在一系列的click行為之後,以成功的預訂行為作為session的結尾;2 瀏覽性的session,即在一系列的click行為之後,並沒有以成功的預訂行為結束的session。作者通過這一點,對原始的skip-gram模型進行了修改,主要針對的是那些成功轉換的session,如下圖所示:
在這裡插入圖片描述
即把每一個session中成功預訂的listing作為整個session中所有其他listing的context,整個損失函式如下所示:
L = ( l , c ) D p l o g 1 1 + e v c v l ( l , c ) D n l o g 1 1