嘉賓:劉雨丹 騰訊 高級研究員算法
整理:Jane Zhangsegmentfault
來源:DataFunTalk緩存
出品:DataFun微信
注:歡迎關注DataFunTalk同名公衆號,收看第一手原創技術文章。架構
導讀:本次分享是微信看一看團隊在 KDD2019 上發表的一篇論文。長尾問題是推薦系統中的經典問題,但現今流行的點擊率預估方法沒法從根本上解決這個問題。文章在 look-alike 方法基礎上,針對微信看一看的應用場景設計了一套實時 look-alike 框架,在解決長尾問題的同時也知足了資訊推薦的高時效性要求。框架
▌背景異步
微信你們可能都用過,微信中的「看一看」是 feed 推薦流的形式,涵蓋了騰訊整個生態鏈的內容分發平臺,包括騰訊新聞、公衆號文章、騰訊視頻等。天天總分發量在千萬級以上,面對如此大的分發量,要知足不一樣興趣偏好的用戶需求,使用傳統的方法時遇到了一些問題。咱們針對發現的問題作了優化和改進,接下來分享下咱們優化的過程。函數
▌未緩解的馬太效應性能
馬太效應,簡單解釋,在內容的生態系統中,天然分發狀態會形成一種現象:頭部10%的內容佔據了系統90%的流量、曝光量or點擊量,剩下90%的內容,集中在長尾的10%裏。這對於內容的生產方、內容系統的生態和使用系統的用戶來講,都是不健康的狀態。形成這種現象的緣由,是由於系統分發能力不夠強,沒法處理信息過載的現象,推薦系統設計的初衷就是爲了解決馬太效應問題。學習
回顧推薦系統的發展,從最開始的規則匹配 -> 協同過濾 -> 線性模型 -> deep learning,逐步緩解了馬太效應現象,但沒有徹底解決。
形成這個現象的緣由是傳統模型、CTR 預估和 deep model,都對部分特徵有依賴,沒有把特徵徹底發掘出來,致使模型推薦結果是趨熱的,使生態系統內優質長尾內容投放依然困難。由於 CTR model 最終趨向於行爲特徵,或者後驗結果較好的數據,對於優質長尾內容,如小衆興趣的音樂、電影、深度報道的新聞專題等,得到的相應曝光依舊困難,處於馬太效應 long tail 90%的部分,這會影響推薦系統的生態,致使推薦系統內容愈來愈窄。
▌爲何沒法準確投放長尾?
怎樣解決這個問題?這個問題歸根結底是對內容的建模不夠完整。咱們嘗試分析下問題出在哪:
先看下推薦系統建模流程。首先獲得原始樣本,這是業務下的訓練數據,形式是三元組:userid,itemid 和 label。若是是 timeline 的樣本,那就是點擊或者不點擊。原始樣本中,一條樣本能夠完整表示一個用戶在某個時間點對一個 item 產生了一次行爲,把這個三元組看成信息的最完整形式。對於這個完整形式,直接建模很簡單,如傳統的 item CF,或者協同過濾。協同過濾是最初級的方法,直接對 uid,itemid,label 作擬合,由於能夠徹底利用初始樣本的信息,擬合的準確性很是好。弱點也很明顯,對原始樣本中沒有包含的 userid 或者 itemid,沒有泛化推理能力,後續新曝光的 user 和 item 是沒法處理的。這個問題,就是咱們要作的第二步驟,對原始樣本作抽象。既然沒法獲取全部的 userid 和 itemid,那就要對 user 或者 item 作一層抽象,如 user 抽象成基礎畫像:年齡、性別或所處地域;item 抽象成語義特徵:topic、tag 等;item 歷史行爲特徵,簡單作統計:過去一段時間的點擊率、曝光率、曝光次數。最後基於泛化過的特徵作擬合,獲得最終模型。
問題出在哪?作原始特徵抽象,抽象意味着發生了信息損失,這部分信息損失致使模型擬合時走向了比較偏的道路。舉個簡單的例子:同一個 item,有相同的 topic tag,歷史點擊率和歷史曝光次數和點擊次數也相同,能夠說這兩個 item 是相同的嗎?顯然有多是不一樣的。使用統計特徵沒法完整表達,一樣的 item 點擊都是0.5,PV 都是1000 or 2000。有些 item 被這羣用戶看過,有些 item 被那羣用戶看過。儘管語義特徵和行爲特徵都相同,但兩羣 user 不一樣,Item 的受衆也不一樣。這裏說的抽象的方式,是不完整的 item 行爲建模,也是對 item 歷史行爲不完整的刻畫,這就致使了整個 model,對 item 後驗數據十分依賴,致使推薦結果趨向於 CTR 表現好或者 PV 表現好的 item。最終後驗數據表現好的數據又會更進一步被模型推薦且曝光,這樣會形成惡性循環:一方面,加重了頭部效應的影響,使模型陷入局部最優;另外一方面,整個推薦系統邊界效應收窄,用戶趨向於看以前表現好的數據,不多看到能拓寬推薦系統邊界或者用戶視野的長尾數據。
▌Look-alike 模型
問題就是這樣產生的, 能夠思考一下,問題的本質是什麼?就是由於模型沒法對 item 行爲完整建模,這一步信息損失太大,怎麼解決這個問題呢?咱們首先想到了一種方案:look-alike。
這是廣告領域的經典方案,這類模型的方法也很簡單,首先能夠有一個候選集合的 item,咱們要推這部分 item,怎麼推呢?第一個步驟:找到歷史上已知的、廣告主提供的對 item 表達過興趣的用戶,這部分用戶稱爲種子用戶。而後使用用戶類似度法方法,找到和種子用戶最類似的目標人羣,稱爲目標用戶,把這部分 item 直接推給目標用戶。這個方法在廣告系統中,是用來作定向投放的,效果很好。爲何呢?咱們來看下模型的總體思路。
把相關的 item 找到對它發生過歷史行爲的種子用戶,直接用種子用戶的特徵,做爲模型的輸入,這是正樣本;從全局用戶中負採樣一部分用戶做爲負樣本。用歷史行爲的用戶的特徵來學習 item 的歷史行爲,至關於把不一樣用戶看過的 item 區分開,實際上是對 item 的歷史行爲特徵的完整建模。以前提到,行爲樣本是信息量最大的樣本,它們沒有通過抽象,若是能完整的用受衆用戶的行爲來計算 item 的特徵,能夠說是最完整的 item 歷史特徵的建模。
Look-alike 在廣告領域的應用已經很完善,也有不少方式。能夠把 look-alike 相關的研究分紅兩個方向:第一種是基於類似度的 look-alike,這種 look-alike 比較簡單,大致思路是把全部用戶作 user embedding,映射到低維的向量中,對它作基於 k-means 或者局部敏感 hash 作聚類,根據當前用戶屬於哪一個聚類,把這個種子用戶的類感興趣的內容推給目標用戶。這種方法的特色:性能強。由於簡單,只須要找簇中心,或者向量類似度的計算,由於簡單、性能好,模型準確性低。
第二種是和第一種相反的,基於迴歸。包括 LR,或者樹模型,或者 DNN or deep model 的方法,主要思路是直接建模種子用戶的特徵。把種子用戶當作模型的正樣本, 針對每一個 item 訓練一個迴歸模型,作二分類,得出種子用戶的特徵規律。這種方法的優勢是:準確性高,由於會針對每一個 item 建模。缺點也明顯:訓練開銷大,針對每一個 item 都要單獨訓練一個模型。對於廣告來講,能夠接受,由於廣告的候選集沒有那麼大,更新頻率也沒那麼高。
可是對於咱們的推薦場景,有一些問題:1. 對內容時效性要求高,如推薦的新聞專題,必須在5分鐘或10分鐘內要觸達用戶;2. 候選集更新頻率高,咱們天天的候選集上千萬,每分鐘、每一秒都有新內容,若是新內容沒法進入推薦池,會影響推薦效果。
▌核心需求
在咱們的場景下,若是還用廣告領域的經典的 look-alike,是沒法解決的。若是要對每一個候選集建模,採用 regression-base 的方法,如每分鐘都要對新加進來的候選集作建模,包括積累種子用戶、作負採樣、訓練,等模型收斂後離線預測 target user 的類似分,這對於線上的時效性是不能接受的。
對於 similarity base 的方法,它的問題是計算過於簡單,若是直接和 CTR 模型 PK,核心指標會降低,得出來的結論是:傳統的 look-alike 不能直接照搬到咱們的系統中。
針對咱們的需求,咱們整理出來了應該知足的3點核心需求:
▌RALM:Real-time Attention based Look-alike Model
基於這三個核心需求,咱們提出了一個新的方法,全稱是 real-time attention based look-alike model,簡稱 RALM。我先簡單講下 RALM 核心的三個點。
① 模型可總結爲 user-users 的 model。回想下經典的 CTR 預估模型,是 user2item 的 point-wise 的處理流程建模。User、item、label,咱們作的最大的變化,是借鑑了 look-alike 的思想,把 item 替換成種子用戶。用種子用戶的用戶特徵,代替 item 的行爲特徵。因此模型從 user2item 的 model,變成 user2user 的 model。圖中右側是 target user,左側是 seeds。
② 完善的 seeds representation。用種子用戶代替 item 行爲特徵。這樣面臨的問題是:怎樣更好地表達一我的羣。這個 seeds representation,是咱們研究中的核心步驟,要獲得一個高效、自適應更新的種子用戶的表達方式。
③ real-time。最終目標是部署在線上,實時預測種子用戶羣體類似度,須要是可以實現 real-time 的框架。
上述是模型表達的思路。I 是一個 item,把 item 用 seeds 的 embedding 的集合來表示,seeds embedding,是組成這個種子用戶的每一個用戶的 embedding 的函數。學習了 seeds representation,就是這個函數 f。
接下來看下離線訓練部分,這是離線訓練的總體結構。
模型離線訓練分紅兩個階段:右側 user representation learning, 左側第二階段是 look alike learning。user representation learning 模型結構,最後的目標是經過一個用戶在不一樣領域的行爲,學習到用戶在全部領域的多樣性且兼顧準確性的用戶興趣的高階畫像。這個畫像在這個位置是低維特徵,向量特徵經過 user presentation learning 的目標學到了全部用戶的 embedding 以後,第二階段是 look alike learning。Look alike learning 模型,是一個 user to user 的 model,右側是目標用戶的特徵輸入,左側是種子用戶人羣的 embedding 輸入,左邊種子用戶是一羣用戶的 embedding 堆疊到一塊兒,輸入實際上是一個矩陣。這兩邊的輸入來源都是第一階段 representation learning 輸出的 embedding。Look alike 的目標是學習目標用戶和候選 item 種子用戶的類似度,最上面是學習兩次類似分的,最後完成種子用戶的擴展。
▌User Representation Learning
按順序來分析下,第一階段,是用戶的表示學習,user representation learning。
這個模型你們看着會比較眼熟,它是用 Youtube 的 representation model 中演化過來的。Youbute 的基礎模型很簡單,下面是用戶在不一樣領域的行爲,下面的基礎特徵可能會有離散值,也多是連續值。若是是離散值,能夠經過 embedding lookup,再過一個 pooling,再和全部領域的特徵作 merge,上面過一個全鏈接,最後輸出 embedding。右側是感興趣的 item,也會作一些 embedding lookup,整個作 sce loss,或者是多分類。要預測的是:用戶在點擊了這麼多 item 以後,下一個要點擊的 item,最後要預測的就是表達用戶興趣的 embedding。這層 merge layer,最初 Youtube 的版本是用一個 concat。能夠看到最第一版模型在訓練時遇到了一個問題,最下層是用到了用戶不少個域 ( 每一個 field 稱爲一個域,多是每一個用戶在每一個分佈下的行爲,如電商購物下行爲,或者是公衆號閱讀的行爲 )。
訓練時看到一個現象,有些域的行爲學的很是強,參數來看學的很是充分,某些 field 參數分佈不大,最後的權重值較小,對最終預估的分數沒有影響。這裏有兩個名詞:強關聯和弱關聯。最終預估結果關係比較大的 field、參數學習較強的,稱爲強關聯特徵域;相反,學的不充分的、對最終結果影響小的,稱爲弱關聯特徵域。對於強關聯和弱關聯,若是看到參數分佈是這樣的,是否是就代表弱關聯特徵不重要呢?並非。舉例來講,representation learning 若是訓練目標是在「看一看」中的閱讀行爲,對於某些常用微信公衆號、或者閱讀的用戶來講,他們在公衆號平臺的閱讀歷史就是很是強的關聯特徵,可以決定再看一看中的興趣。對於這些特徵來講,這些特徵是很強的,對於其餘的如在電商中的購物或者是在搜索中的 query,這些是比較弱的,對看一看的影響頗有限。再思考另外一種 case,好比,看一看經過某種形式,吸引了不少新用戶。新用戶進來以後,沒有在公衆號平臺的閱讀歷史,可是他們在購物或者搜索中有歷史行爲,此時這些歷史行爲會影響他下一次閱讀的文章,或者感興趣的 item。這些特徵對這些用戶來講是很是重要的。但目前,顯然這些用戶是沒有學到這些變化的。
排查了下模型訓練的過程,能夠把結果集中在這一點上,就是這個 merge layer,實際上是負責把用戶不一樣域的特徵 merge 到一塊兒。Merge layer,能夠看到右側的圖,原始的 deep model 用的是左側的實現方法,直接用 concat。Concat 的優勢是,能夠學到全部 field 的參數,缺點是,沒法根據輸入的不一樣分佈,來調整權重值。也就是說,若是80%的用戶的閱讀歷史都是看一看的種子用戶,閱讀歷史都是很豐富的,就頗有可能對全部用戶都把這個特徵學的很強。若是是少許用戶,就學不到了,少許用戶關注對其它特徵的啓發做用,concat layer 是學不到的。由於它對於大部分用戶來講,已經把參數學的很是重了,小部分用戶不足以對它產生影響。因此須要一個機制,針對不一樣用戶的特徵域的輸入動態調整 merge layer 的方式,咱們想到的最好的辦法是 attention。Attention 是最近在 NLP 中很是火的,不少模型都會用到。爲何要用 attetnion?
右下角的結構,就是 attention。咱們用到的 attention 是把用戶的輸入的全部的域當作 attention 的 query,key 和 value 都是自身 field 的自己。這是一個典型的 self-attetnion,咱們最後要作的是,讓模型根據用戶本身的輸入領域的狀況,動態調整不一樣領域的融合方式,相對於以前的 concat 的方式來講,concat 實際上是把全部領域的 field 強行放在同一個向量空間中來學習,天然會有學習不充分的狀況。Self-attenion merge 是讓不一樣的域在本身的向量空間中學習充分,再經過不一樣的權重組合在一塊兒。實際上是至關於讓用戶能有屬於本身的表達,而不是被歷史豐富的用戶帶着走。這是一個優化,能夠明顯改善強弱特徵、訓練不均衡的問題。
能夠看一下這是我以前訓練的時候在某個特徵域用 tensorboard 打出來的參數分佈的狀況,能夠看到 attention merge layer 先後,訓練參數有很大變化,以前這些參數基本上都是0,以後會激活出一些值,這個是最後 user presentat learning 的值:precession、recall、auc。也能夠看到模型加完 attention 以後,在 auc 和 loss 上都有所優化。
通過 user representation learning 以後,咱們如今擁有了全部用戶的兼顧多樣性和準確性的 embedding 表達。接下來要作的是怎麼用 embedding 來表達種子用戶人羣?
▌Look-alike learning
Look-alike 要作的第一步就是如何表達 seeds user。
一個種子用戶應該包含什麼信息,這裏咱們作兩點假設:
種子用戶的相對錶達=個性信息+共性信息。怎樣學習 local info 和 global info 呢?咱們想到的是用不一樣的 attention 機制,學習出兩個 embedding:local & global embedding,分別表示這兩種信息。對於 local embedding,是右上角的圖,稱爲 local attention unit,這個 attention,是一個乘法開始,它的公式是把種子用戶的矩陣乘以 w,再乘以 target user 的 embedding,再作一層 softmax,再乘以種子用戶本身,這是一個典型的乘法 attention。它的做用是提取種子用戶羣體中和 target user 相關的部分。捕獲種子用戶的 local info。
第二部分是 global info,用 global attention,只和 user 相關,和 attention merge 的方法相似,也是一個 self-attention。做用是把種子用戶乘以矩陣轉換,再乘以種子用戶本身,所作的就是捕捉用戶羣體自身內部的興趣分佈。獲得的這兩種 local & global embedding 以後,進行加權和,這就是種子用戶羣體的所有信息。另外一個問題來了,採用兩種 attention union 來捕獲信息,這意味着要計算不少次矩陣乘法,對線上開銷很大。兩個 embedding 須要多少次計算?這裏有個表達公式,這個 h 是 embedding 的維度,K 是種子用戶用戶的數量,總的計算次數 = h h K * 2。對於線上耗時,一次預測超過 1000ms,沒法接受。
優化耗時,第一個方法是減小種子用戶的數量,這樣會影響種子用戶的表達完整性;另外一種是咱們線上採起的方式,使用聚類。找到種子用戶內部比較類似的,把它們聚在一塊兒。這種方法:1. 減小 key 的數量,2. 保持種子用戶的所有信息。聚類的方式比較簡單,用的是 k-means。
簡單看下這個模型,右側是 target user embedding,通過全鏈接,左邊是 series user embedding 矩陣,兩邊都通過 embedding 以後,首先對種子用戶的 embedding 作聚類,獲得 k 個聚類中心,把種子用戶的向量根據 k 個聚類中心作聚和,在相似中心內部作相似於 average 的聚和,而後獲得 k 個向量,在這 k 個向量之上,一邊作 global embedding,另外一邊和 target user 作 local embedding。有了這兩個 embedding 以後,經過加權和的方式,作 cosine,再去擬合 user 到 item 的 label。這裏的 label 用的是點擊。
細節:
聚類的過程須要迭代,比較耗時,並不是每一個 batch 都去更新聚類中心,而是採起迭代更新的方式,好比把1000個 batch 一輪,訓練完1000個 batch 以後,這1000個 batch 中,不更新聚類中心;到了第二輪,根據全鏈接參數的變化,再去更新種子用戶的聚類中心,每經過一輪更新一次聚類中心,保證和核心參數是同步的。這樣既保證了訓練的效率,也保證了訓練的準確性。聚類的優化,使線上的計算次數減少到了 k/K 中,以前 K 是萬級別的數量,如今 k 是百級別的數量,耗時也降低了不少。
根據實驗結果,肯定不一樣聚類中心數 k 帶來的影響,選擇了合適的 k。實驗中,k=20,線上 k 是100左右。模型訓練的 label 優化方式,是一個多分類。對不一樣的種子用戶人羣選擇最類似的用戶。多分類的優化方式和 deep model 類似,採用 negative sampling 的方式。
▌系統架構
線上須要實現實時預測,系統實際部署到線上,須要整套系統架構。簡單介紹下 RALM 的配套體系。
大致過程,分紅三個模塊,從最底下的離線訓練,到在線異步處理,到在線服務,接下來分別講一下。
離線訓練,就是兩個階段的訓練,representation learning,look alike learning,須要一提的是,進行完 look alike learning 以後,能夠把 user 通過全鏈接層的 user 表達緩存起來。全量用戶,有10多億,能夠 catch 到 KV 中。能夠提供給在線服務作緩存,線上不用作實時全量傳播。
2.在線異步處理
離線訓練結束後,是在線異步處理,主要做用是某些能夠離線且和線上請求無關的計算,能夠先計算完,如更新種子用戶。每一個 item 候選集都會對應一個種子用戶列表,更新種子用戶列表,能夠每一分鐘更新一次,這和訪問用戶無關,只和候選集的 item 有關。能夠實時拉取用戶的點擊日誌,更新點擊某個候選集的種子列表。
① 能夠把 global embedding 預計算 ( gl 只和種子用戶有關,是 self-attenion,可在線作異步處理,如每隔一分鐘算一次 )。
② 計算 k-means 聚類中心,也是隻和種子用戶有關,能夠提早計算好,如推到推薦系統內存中。
③ 全部的東西都是定時更新,不須要線上實時計算。
3.在線服務
線上把聚類中心、global embedding 和全部用戶的 embedding 都已緩存好,只須要拉取 user embedding,和候選集的 global embedding 和聚類中心。線上只須要計算 local embedding,是 target user 到種子用戶的 attention,這須要根據線上請求的 urn 來實時計算。再計算一次 cosine,就能夠獲得類似度,這個計算量很小。
▌實驗結果
算出 look alike 類似度以後,類似度的分數,可直接給到排序服務,作曝光依據。這是當時寫論文以前作的 ABtest,對比的是用戶畫像匹配推送的策略,上線以後,在擴大曝光規模的前提下,CTR 基本取向穩定,並且有微小提高,多樣性也提高了不少,這都是相對提高。
▌一些細節和思考
特徵:
爲何要用第一階段的 user representation learning 獲得用戶的高階畫像?高階畫像的做用:包含了用戶在某個領域的所有信息,信息量很大,結合 look alike learning 中的行爲,須要去學習用戶羣體的特徵。不用高階特徵,怎樣學習用戶羣體?比較簡單的方法是經過統計的方式:平均年齡分佈和平均閱讀傾向。這些都是基於離散的統計,信息損失很大。若是有了高階的特徵,高階特徵也是從低階特徵,如基礎畫像、年月分佈,這些都是能夠學到高階特徵中。若是可以直接輸出全部領域的高階特徵,以後的利用、或者做爲召回、做爲 CTR 特徵,都很方便。
模型調優:
① 防止模型過擬合。look alike 的結構很簡單,這樣作的緣由: 直接使用用戶的高階特徵,使用了用戶特徵,若是模型不作處理,容易對高階特徵過擬合。採起了2種方式:
② 採用 stacking model 的形式。看一看閱讀、電商、新聞、音樂領域都作一次 user representation learning,這些特徵用 stacking 的模式都放到 look alike model 中學習,這就是不一樣特徵根據不一樣目標來訓練的,更加減小了在同一個模型中過擬合的防線。
冷啓動曝光:
Look alike model 中用了種子用戶的表達,若是線上有新的 item,怎樣作曝光?
本次分享就到這裏,謝謝你們。
▌Q & A
Q:這個算法有沒有在召回環節用,曝光該如何理解?
A:目前的策略有兩種方式:
Q:可否將兩階段學習合併成一個端到端學習?
A:End-to-End 方式存在兩個問題:
Q:若是將第一階段用戶表徵學習換成其餘通用能學習表徵用戶向量的模型,效果會有什麼影響?
A:咱們單獨用 user representation learning 和其它模型作過對比,好比 CTR 中的 user embedding,是針對當前業務比較精準化的表達,所在在泛化性上沒有 user representation learning 效果好。
▌參考資料
Real-time Attention Based Look-alike Model for Recommender System
https://arxiv.org/abs/1906.05022