雲計算

MIND – 基於動態路由的用戶多向量召回

作者簡介:
睿德,淘系技術部高級算法專家。從事推薦技術召回, 排序算法的開發。

內容簡要:
一、 問題背景
二、 算法思路
三、 系統架構

一、 問題背景

(一) 應用場景

在一個典型的推薦場景中,推薦算法的任務是將一個經過篩選排序的,貼近用戶興趣的商品列表推薦給用戶。下面兩張圖片展示了手機淘寶兩個比較典型的推薦場景,分別是首頁的信息流場景和微詳情頁場景。正如場景名字猜你喜歡所表達的,推薦算法的目標是使得推薦結果儘可能貼合用戶的興趣,滿足用戶的需求。

1.png

在實際的場景中,淘寶的數據體量相對較大,面對的是億級的用戶與億級的商品。在這樣體量的工業場景中,我們通常將整個推薦系統拆分為多個環節,其中召回(Match) 與排序 (Rank)是其中兩個比較典型的環節。MIND 算法是我們團隊針對召回環節的一項工作。

(二) 召回

2.png

召回系統負責從海量的候選商品中挑選出與用戶興趣相關的商品集合。它作為推薦算法的第一環,直接決定了整個系統的效果上限。與此同時,面臨億級別的候選集合,也就要求所使用的召回算法在計算上足夠地高效。通常計算效率上的要求是通過建立索引的方式來達到。
很長一段時間,協同過濾,尤其是 Item-based 的協同過慮都是業界主要使用的一種召回算法,例如圖中的基於圖的算法和基於 graph embedding 的算法。線上服務時,它使用鍵值索引,簡單,高效,時效性強,往往能達到比較不錯的效果。但它也受限於索引形式,表達能力有限,並且不能做到端到端的優化,這就對我們提出了新的算法要求。
近些年,向量檢索技術的普及使得用戶與商品能以向量的形式進行表徵,增強了數據的表達能力,也給我們算法設計帶來了新的可能。

(三)電商場景特點 – 數據多峰分佈

3.png

提到向量召回算法,圖中谷歌 YouTube 提出的這個向量召回模型是早期一個具有代表性的模型。但是在我們場景直接使用該模型上線,卻並沒有拿到非常令人滿意的效果。

4.png

回到我們的電商場景中,電商的數據是很有自身的特點的。通常來說,一個用戶的行為是比較豐富的,用戶的購物行為和瀏覽興趣往往橫跨多個類目,並且常常體現出內在的聚集性,也就是數據的多峰分佈。因此我們認為,在向量維度有限的情況下,像 YouTube 召回模型中單個用戶向量的表達範式是有改進優化空間的。

二、算法思路

(一)如何表達用戶的多個興趣

前面提到單個向量對用戶的刻畫可能存在不足,一個很直接的想法就是使用多個向量來對用戶進行表徵。通過豐富的用戶行為產生用戶的幾個隸屬於某些方面的興趣的方法,容易聯想到可以通過聚類的方式來將用戶豐富的行為集合聚合成幾個比較具體的興趣。
在算法設計之初,端到端的優化是我們納入考慮的一個點,我們期望聚類的過程能夠很好地嵌入到深度模型結構中。從訓練的成本上來看, 我們也希望這個過程能比較快地收斂,不會帶來太多額外的開銷。膠囊網絡中的動態路由算法正符合我們的算法設計需求。

5.png

(二)如何學習用戶的多個興趣

6.png

如圖所示,動態路由算法處理的是兩層向量之間的關係,其中每個元素都代表一個向量,即所謂的膠囊。下層的特徵表達是固定的,而上層膠囊在開始階段是未知的。
最開始我們隨機得到一個初始連接權重,得到上層膠囊的一個初始的表達。接下來在迭代過程中,上層的膠囊會和下層的膠囊進行相似度的計算,並根據相似度來進行權重的重新分配,重新計算上層膠囊的表達。重複幾輪這樣的迭代,最終這個權重會傾向於收斂到一組具體的值。從計算過程來看,動態路由算法的迭代的過程和 Kmeans 聚類是一個非常相似的過程。
因此,可以將用戶的行為序列看作下層的膠囊,將要抽取的用戶興趣向量表達看作是上層的膠囊,進行用戶多興趣的抽取。

將用戶的行為序列表達成多個興趣向量,同時也引入了一個新的問題: 在訓練過程中,抽取出來的多個興趣對應了一個具體行為,如何進行求解。具體來說, 問題可以表述為對於每條訓練樣本,使用用戶的哪個興趣進行訓練。我們認為, 用戶某次具體的行為,是其多個興趣其中一個的具體表現。因此,在每次訓練中,我們根據用戶後續的實際行為,在多個興趣中挑選與後續行為最相關的興趣,進行訓練。這個根據 label 來挑選具體興趣的訓練機制,我們稱之為 Label-aware Attention。

7.png

(三) MIND

8.png

上圖是 MIND 模型的整體結構。模型最下層是模型的輸入層,首先,通過 Embedding 層,對 id 類特徵進行了向量化,並通過 pooling 層對將商品 id 及其他商品側特徵進行了信息融合,引入了除商品 id 外的其他更多的特徵,來更好地描述這個商品。
接下來就是我們的興趣抽取層。這一層我們使用了動態路由算法對用戶的行為進行了興趣表達的抽取。在抽取出用戶的多個興趣表達之後,我們將用戶的興趣向量與用戶的畫像特徵進行了一個拼接的操作,即在每個興趣特徵表達上加上用戶畫像的表達。然後通過若干層全連接層將用戶的表達與興趣的表達進行融合。
在這些全連接層之後,我們就得到了用戶的多個最終表達向量,每個向量代表了用戶一方面的興趣。
訓練過程中我們使用 label-aware attention 機制進行訓練。而在線服務時,我們直接使用全連接層抽取出來的多個用戶的表達向量,並行地在選品池中進行向量檢索,將每個用戶興趣向量檢索出來的結果合併之後,得到模型的最終召回結果。

(四) 效果展示

9.png

10.png

這裡是一個簡單的效果展示。上邊是demo的用戶行為序列,可以看到它有服飾、遊戲等相關的行為。在下側是我們根據模型抽取出的4個興趣,分別用這4個向量進行召回得到一些結果。我們可以看到這幾個向量很好地刻畫表達了用戶不同方面的興趣,並且在最終的召回中也召回了相關的商品。
MIND 方式所生成的用戶表達,除了直接進行商品召回,還能做有意思的擴展,比如說通過用戶的實時表達,去找到與當前用戶相似的用戶,做一些 U2U 的召回。

四、系統架構

(一)流程

11.png

在離線流程中,模型每天使用新增數據進行增量訓練。在訓練完成後,導出最新的商品向量表示,並分別將模型與商品向量迴流到線上系統。在線服務時,用戶請求打分服務,得到用戶多組向量,並使用這些用戶向量請求召回服務,得到召回結果。

(二)引擎

在線系統使用的是阿里達摩院自研的 Proxima 向量檢索引擎(點擊查看Proxima詳細介紹),支持 fp16,int8 多種量化,支持異構計算,並支持商品索引的實時更新。MIND 模型結構決定了每個用戶是一個多向量的請求模式,因此在實踐中我們工程團隊使用了 GPU對向量檢索引擎進行加速。優化後單次用戶查詢 9 個向量,線上延遲在 5ms 以內。

(三)全圖化架構

12.png

前面介紹的流程中,模型和商品向量索引分別部署在兩個不同的系統上,很難保證兩邊模型和數據版本切換的一致性。因此我們的工程團隊提出了全圖化的系統架構,其核心是把用戶向量的生成步驟,從原來離線完成轉移到在線完成。每當線上模型發生更新了之後,會自動觸發線上優化過程,使用最新的模型直接生成商品的向量表徵,同時進行向量索引的構建。在向量索引構建完成之後,管控系統統一地將模型和商品索引同步進行更新切換。通過這種方式,一方面簡化了離線流程,保證了在線模型與數據的一致性,另一方面也對商品索引的增量構建更為友好。

五、總結

MIND 模型在手淘多個核心場景全量上線,並取得10%+的效果提升。目前 MIND 召回是手淘首頁信息流線上流量佔比最高的一路召回。線上的 CASE 與效果都表明了模型的有效性: 既表達了用戶多樣的興趣,又展現出了一定的發現性。通過對用戶行為的擴展,MIND 模型也可以同時表達用戶的搜索興趣與購買興趣,更好地對用戶興趣進行刻畫與表達。


“ AI 檢索技術博客”

由阿里巴巴達摩院系統 AI 實驗室創立,

關注 “ AI 檢索技術博客” 公眾號,

獲取更多技術乾貨文章、

AI 檢索領域 Meetup 動態。

qrcode_for_gh_e1b0e5dea42d_430.jpg

Leave a Reply

Your email address will not be published. Required fields are marked *