摘要
最近基於session的推薦系統火熱起來,但是大多數的工作沒有考慮用戶長期的穩定偏好和演變。這篇文章提出了一個novel Behavior-Intensive Neural Network(BINN)模型,該模型結合了用戶的歷史穩定偏好和當前的購買動機,來進行下一次推薦。該模型的兩個主要部件分別為:Neural Item Embedding 和 Discriminative Behaviors Learning 。有區別的學習目標用戶的歷史偏好和當前動機。
看完摘要
問題1:歷史穩定偏好是如何知道穩定的呢?
問題2:這兩部件是怎么實現?
模型
隨着時間的變化用戶的歷史行為自然的會形成一個行為交互序列,我們用以下的形式代表
其中$|H|=n$表示用戶的數量。對於每一個用戶$u$都會有對應的交互序列
其中$x_j$代表用戶$u$與第$j$個item進行交互,$b_j$表示行為類型(比如:點擊,加入購物車,購買),我們的the next-based的推薦任務就是去預測下一個item,即$x_{T+1}$
Neural Item Embedding
首先回顧Google的word2vec,Skip-gram的模型結構
Skip-gram模型
Skip-gram是利用當前詞預測其上下文詞。給定一個訓練序列$w_1,w_2,...,w_T$,該模型的目標函數是最大化平局的log概率:
其中$c$表示context的大小,c越大,訓練樣本越大,准確率越高,同時訓練時間也變長。在skip-gram模型中,$P(w_{i+j}|w_t)$利用softmax函數定義如下:
其中$W$是語料庫的大小,但是在通常情況下,語料庫特別大,直接計算不現實。為了解決這個問題,提出了2種方法,一個是hierarchical softmax,另一個方法是negative sample。對於negative sample,具體就是把目標函數修正為
其中$P_n(w)$是噪聲分布。即訓練目標是使用logistics regression區分出目標詞和噪音詞。
item2vec原理
item2vec就是把用戶的交互行為序列當成一個word2vec種句子,出現在同一個集合的商品被視為positive。對於集合$w_1,w_2,...,w_k$目標函數:
同時也采用負采樣, 並將skip-gram中的sfotmax函數代替為
其中參數$N$為確定每個positive要繪制的negative的數量
w-item2vec
在本篇文章中,作者改進了item2vec。
作者認為,和普通的句子不同的是,有些item是經常被訪問,即在$H$中將會經常出現這些商品,這是因為用戶在進行商品的對比和選擇,所以往往會有相似的物品交叉出現,這也表明了作者的動機,同時,那些低頻率的商品可能是用戶無意間點擊的,這樣可以去除噪音。所以,目標函數改寫為
其中是在序列中$x_i$出現的頻率,同時目標函數變成:
Discriminative Behaviors Learning
一個用戶的決定過程包含兩個因素:用戶的當前動機和歷史偏好。在短期內用戶的購買動機的動態的,並且短期的波動影響短期的特征。考慮到最近的行為(比如:點擊,收藏,購買)可能會暗示作者當前的購買動機,所以我們使用all types of recent behaviors去代表最近的購買動機,但是在另一方面,考慮到並不是所有的最近behavior可以代表用戶的偏好,比如用戶點擊了一個item但是最后並沒有購買它,則可以認為用戶不喜歡這個item。所以,我們只保留可以清晰描述用戶當下偏好的交互。
實際上,用戶的交互過程是一系列隨時間變化的反饋函數。往往傳統的推薦系統對交互歷史采用靜態的方法,但是作者是通過序列模型進行the next item 推薦。我們設計了以下兩個behavior alignments,它們都是基於LSTM的
Session Behaviors Learning
對於一個用戶$u$,假設我們已經有了如下交互序列
同時,我們還有embedding item
對於行為$b_i$是用one-hot來表示的,並且向量的長度是交互類型的數量,比如:點擊。為了確定某一個item$x_i$是否為session行為的元素,SBL的判別函數$D_{SBL}$為
其中$\Phi(a)$可以計算一個判別信號,如果$a$為真,則函數值為1,反之,如果$a$為假,則函數值為0,$x_{t-1}$是預測項目的前一個項目,$ts$是一個控制指標去SBL的長度。具體來講,如果是一個session based scenario,$ts$就是session的長度,對於non-session scenario,$ts$就是人工設置的。在這篇文章中,作者設置$ts$為10.
為了session behavior的一致性,我們設計了Contextual LSTM來去學習用戶的當前購買動機,初始化后,隱藏層$h_j$的狀態是由前一個隱藏層的狀態$h_{j-1}$,當前item embedding $v_j$,和之前behavior 向量$b_j$
其中$i_j$,$f_j$和$o_j$分別是輸入門,遺忘門和輸出門,$j$代表第$j$步,$v_j$是item的embedding向量,$b_j$是一個behavior向量,$c_j$是記憶單元,$\hat{b}$是偏置項,$h_j$是第$j$步的輸出。
最終我們的輸入$h_{t-1}$代表着用戶$u$當前的購買動機,通過上述網絡結構,SBL可以很自然地對用戶會話行為的波動進行建模,獲得當前消費動機的表征。
Preference Behaviors Learning
PBL用來學習用戶長期的穩定的歷史偏好。實際上,只用部分行為可以反映用戶偏好,因此為了確定某一個交互$(v_i,b_i)\in{S_u}$是否為偏好行為的一個可能因素,判別函數$D_{PBL}$可以定義為
其中$P$是一個集合,包含了所有的行為類型,比如:收藏,購買。
不同於SBL,PBL表示全部的歷史偏好,所有波動較小,所以CLSTM不能重復使用,受雙向RNN的影響,作者設計了一個雙向CLSTM結構,名為Bi-CLSTM,這樣可以充分利用上下文關系。
最后通過一個全連接層,我們就可以得到$d$維的下一項item$\hat{v_t}$
模型學習和測試
采用了MSE損失函數
其中$\zeta$是MSE函數,$v_t$是目標用戶u在下一次訪問中訪問的項的表示,$ts$是控制因子,$|S_u|$代表交互序列的長度,$|H|$為用戶的數量。
實驗
數據集
Tianchi和JD,下圖是數據集的划分。
baseline
- S-POP
- BPR-MF
- Item-KNN
- GRU4Rec
- HRNN
評價指標
- Recall@20
- MRR@20
實驗結果
item嵌入可視化
從圖中我們可以看到w-item2vec的聚類更好,同時,這兩種方法在JD數據集上都顯示出了顯著的效果,一種可能的解釋是JD數據集更密集。
推薦性能
新用戶的冷啟動
分析用戶的歷史記錄長度