再談序列化推薦

近年來很多序列化推薦的方法都是通過把用戶歷史行爲序列轉化爲一個總的向量化表達,來給用戶做下一個 item 推薦。然而,通過經驗性的分析,我們就會發現用戶序列行爲中包含多種多樣完全不同含義的 item,這個表示用戶的向量受歷史行爲的影響非常大,因此無法推薦出用戶歷史行爲中類別佔比較小的 item。所以應該用不同的 embedding 去編碼用戶當前的意圖,這篇論文《Sparse-Interest Network for Sequential Recommendation》提出了 SINE 解決序列化推薦的問題,煉丹筆記前面已經介紹了大部分阿里的序列化推薦算法,所以廢話不多說,直接介紹 SINE。

假定 x (𝑢) 𝑢=1...N 表示 N 個用戶與 M 個 item 的數據,x (𝑢) = [x1, x2, ..., xn] 表示用戶點擊序列,考慮到工業級推薦系統包含數十億的 item,SINE 的目標是挖掘出用戶 K 個向量表達,能抓住用戶準確的意圖,召回 top 的 item 提供給下游 (排序模塊)。

最新的用於抓住用戶準確意圖的序列化編碼器可以被總結爲兩大類。第一類方法隱式的挖掘用戶多層興趣,例如基於多頭 self-attention 的方法,另一類顯式的捕捉用戶多層意圖。第一類方法在和單個向量推薦相比較,並沒有明顯的提升。另一類則可以有效的挖掘用戶的多興趣,這些方法都存在一個共同的問題,就是要求用戶在交互過的各個類目都有一個 embeding 表達,導致該類方法可擴展性特別差。舉個例子,按照專家的標註,阿里天貓所有商品可以分爲 1w 類,所以在推薦系統中一個用戶有類目個向量是不現實的。

大家可以邊看圖,邊閱讀下面各個模塊的介紹:

稀疏興趣模塊 (Sparse-interest module)

Concept Activation: 先用自注意力方法把輸入的序列聚合,如下公式所示:

W1 ∈ R𝐷×𝐷 和 W2 ∈ R 𝐷 都是訓練參數,然後按照 attention 的 score a 把輸入的向量序列聚合起來 z𝑢 = (a ⊤ X𝑢 ) ⊤ ,Zu 就是用戶的一個 D 維度的總體向量表達,用這個向量去激活興趣,C ∈ R𝐿×𝐷表示 L 個興趣 (類目) 向量:

從上公式,我們看到,先要找到和用戶最相關的 k 個興趣,然後按照相關度縮放 k 個興趣向量。

Intention assignment: 在得到 k 個興趣向量後,我們可以通過計算行爲序列到興趣向量的距離,挖掘出用戶最相關的意圖,參考下公式:

pk|t 表示位置 t 處的 item 與第 k 個興趣相關的概率。

Interest embedding generation: 有了以上所有向量和 attention score 後,可以通過下式進行興趣向量集成:

興趣集成模塊 (interest aggregation module)

在稀疏興趣模塊中,我們實際上獲得了 k 個興趣,我們可以像 MIND 一樣,用下一個 item 作爲目標 label,去選擇不同的興趣向量訓練,儘管這樣很簡單,但是缺陷就是實際預估中,是沒有目標 label 的,導致訓練和線上有着很大的 gap,導致效果上有很大損失。

爲了解決這個問題,可以先預估用戶下一個意圖的類目,而不是 item。我們通過上面計算的 pk|t 可以得到用戶傾向性矩陣 Pu∈ R 𝑛×k ,我們用此矩陣對用戶的興趣向量進行聚合,得到最終的興趣向量:

Capt 可以理解爲用戶目前的意圖,是個 D 維度的向量,我們通過下式得到用戶的最終表達 vu:

通過下式模型優化:

由於上式複雜度較高,所以實際使用了 sampled softmax 進行優化。同時爲了保證興趣向量互相正交,所以還引入了正則化損失:

|| · ||F 表示 Frobenius 範數,最終 loss 爲:

從實驗效果,我們可以看出 SINE 的 HR 和 NDCG 的結果都是比較出衆的:

通過拉出多個興趣向量 top k 的 item,我們也發現模型對商品集合做了很好的聚類:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Alu5a9Up6ujR32QrHCSuyA