原創 Synced 機器之心
機器之心發布
機器之心編輯部
推薦領域的模型壓縮一直是個極具挑戰性的問題,面對實際部署中數千萬或億級的推薦項,如何壓縮才能獲得最佳性能?由 SIAT-NLP 組與騰訊看點推薦團隊共同完成的論文《A Generic Network Compression Framework for Sequential Recommender Systems》,提出了一個序列推薦模型框架「CpRec」,壓縮率更高、訓練和推斷速度也更快。目前這篇論文已被 SIGIR 2020 接收。
原文連結:https://arxiv.org/pdf/2004.13139.pdf
提起模型壓縮,很多人都非常熟悉。在實際應用部署中,推薦領域的模型壓縮問題比較於 NLP 和 CV 更具挑戰性, 工業級推薦系統例如 YouTube 與抖音, 參數量是大型 NLP 及 CV 模型(如 BERT-Large, ResNet-101)參數量的上百倍,原因在於工業推薦系統中存在千萬乃至億級別以上的推薦項目。而當前最優的序列推薦系統 (SRS) 模型通常是基於三明治結構的深度神經網絡,通常這些模型需要大量參數(例如使用較大的嵌入維度或深層網絡體系結構)才能獲得最佳推薦性能。
這篇論文提出了一個序列推薦模型框架「CpRec」,其中使用了兩種通用的模型壓縮技術。具體來說,文中首先提出一種分塊自適應分解方法,通過利用 SRS 中的推薦項服從長尾分布的事實來近似輸入矩陣和 softmax 矩陣。為了減少中間層的參數,文中引入了三種分層參數共享方案。通過廣泛的消融研究,文中證明了所提出的 CpRec 在現實世界的 SRS 數據集中可以實現高達 4-8 倍的壓縮率。同時,CpRec 在訓練和推斷過程中速度更快,並且在大多數情況下勝過其未壓縮的模型。相關工作也會在不久後開源。
分塊自適應分解
如上圖所示,本文中首先根據推薦系的頻率對所有推薦項進行排序
,其中x_1和x_k分別是頻率最高和最低的推薦項。將推薦項集合S劃分為n個簇:
其中
。每個簇中推薦項的數量為
,且
,K為所有推薦項的數量。因此,可以將輸入嵌入矩陣
如上圖 (a) 分割為個n塊
如上圖 (b),其中 d 是嵌入大小。採用相似的策略,文中對輸出 softmax 矩陣
分割為n個塊
。接下來,文中分別描述了輸入嵌入矩陣和輸出 softmax 矩陣的分塊自適應分解。
基於分塊自適應分解的輸入嵌入層
在輸入層中,文中將塊
分解為兩個低階矩陣
,其中
d_j是第j個塊的因式分解維度(也稱為秩)。由於高頻率的推薦項應具有更高的表達能力,因此隨著簇的索引增加,減小對應的d_j。相應地,每個推薦項的嵌入表示與通過原始的 look-up 操作的嵌入表示是不同的。給定推薦項標籤 ID x,用下列的等式來表示其嵌入向量 為:
其中
表示第j個塊的第g行的嵌入向量,
。通過這種因式分解,能將輸入嵌入層的參數量從
減少到
。當
,輸入嵌入層的參數量會明顯減少。上圖 (c) 闡述了這個分解過程。
基於分塊自適應分解的輸出 softmax 層
在輸出 softmax 層,文中指出直接的在輸出 softmax 層運用與輸入層相同的策略會造成模型性能降低的問題。為了解決這些問題,通過二層樹結構來構造這些塊,其中每個樹節點代表一個簇。上圖 (d) 顯示了輸出 softmax 層的分塊嵌入的範例。文中在輸出 softmax 層中使用與輸入嵌入層類似的分塊嵌入的聚簇配置。一個主要的不同是輸出層的第一個塊矩陣被擴展為
, 其中n-1表示葉子節點所屬的父類的數量。第一個簇的標籤集合被擴展為
, 其中k_1+1到
對應於第 2 個到第 n 個簇的父類標籤。在輸出 softmax 層的其它的塊矩陣為
, 其中
。對比於原始的 softmax 層,該方法能將輸出 softmax 層的參數量從
減少到
。
論文中提到,在訓練過程中,對於給定上下文向量
(即序列推薦模型的最終隱藏向量)的情況下預測下一個用戶可能感興趣的推薦項,需要首先根據下一個推薦的標籤(例如x)確定搜索空間。如果屬於第一個簇,則僅計算該簇中的logits。如果x屬於其他簇,則在其父類所屬簇(即第一個簇)和當前簇中計算。
為:
因此文中訓練過程分為兩個步驟:第一步,計算第一個聚類的,這需要
時間。在第二步,如果推薦項標籤x屬於葉子節點上的簇之一,則計算該簇的logits,這需要
時間。對比於使用原始的 softmax,文中將訓練時間從O(K)減少到
和
之間。另外,文中在推斷階段也不需要為所有推薦項計算 softmax 概率,可通過提前停止搜索以加快生成過程。具體來說,如果前 N 個概率得分位於第一個簇中,不需要計算在其它簇的推薦項的概率分數。
分層參數共享
為了充分利用深度模型的堆疊層的優勢,同時提高參數效率,該研究採用了多種參數共享策略。例如上圖 (a) 是 ALBERT 採用的跨層參數共享方法,但在此條件下分析了在減少大量冗餘參數的同時,神經網絡模型的表達也受到了一定程度的限制,因此又提出一個高級版本「跨塊參數共享」,如上圖 (b)。
此外,研究還提出了另外兩種分層的參數共享方法:相鄰層和相鄰塊參數共享,分別為上圖 (c) 和上圖 (d)。具體地,相鄰層參數共享表示每個殘差塊中的兩個單獨的層共享相同的參數集。相鄰塊參數共享表示在每兩個相鄰殘差塊之間共享參數。
這些參數共享策略被認為具有兩個主要優點:(1)作為一種正則化方法,它們可以穩定訓練過程並提高模型的泛化能力;(2)它們可以顯著減少參數量,而不會像跨層參數共享那樣降低性能。
CpRec 採用 NextitNet 模型實例化的架構圖如下:
實驗結果
這一部分主要以 NextItNet 框架實例化 CpRec,在 weishi、movielen、tiktok 和 ColdRec 等 4 個數據集上進行實驗,另外由於序列推薦系統在不同序列長度的數據集下,表現不同,為展示其可靠性,採用 10、20、50 和 100 等 4 種序列長度對數據集進行預處理。文中採用多種評測指標,包括 MRR、HR 和 NDCC 等 3 個 top-N 評測指標以測評模型準確率,採用參數量 (Params)、訓練時間 (Training Times) 和推測加速比 (Inference Speedup) 等指標以測評模型壓縮表現。
結果顯示,在該 4 個數據集的模型表現和壓縮效果的評價指標中,CpRec 在推薦準確率與壓縮效果上都具有比較好的表現。
本文為機器之心專欄,轉載請聯繫本公眾號獲得授權。
✄---
加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com
投稿或尋求報導:content@jiqizhixin.com
廣告 & 商務合作:bd@jiqizhixin.com
原標題:《面對千萬級推薦,如何壓縮模型最高效?這是騰訊看點新框架》
閱讀原文