美圖個性化推送的 AI 探索之路

導讀:Push 作爲一種有效的拉起 DAU 和召回用戶的策略,近幾年來被各類社交 App 廣泛應用,隨着深度神經網絡在語音和圖像識別上取得的巨大成功,AlphaGo 戰勝人類圍棋頂尖高手,以深度網絡爲基礎的人工智能迎來第三次高潮。如何將深度模型應用於個性化 push 場景,從而減少無效 push 對用戶的騷擾,是近年來一個關注的熱點。本次分享將結合美圖的實際業務場景從 Embedding、召回、排序、文案、內容池等多個方面介紹如何打造一個良好的 push 場景。

本次分享的內容概要如下:

1. 業務背景

Push 也就是推送通知,可以通過系統界面直接觸達用戶,當用戶點擊就會喚醒 APP,是提高 APP 的日活,留存等指指標重要的環節之一。

2. Embedding 演進

首先,我們介紹 Embedding 的過程。從三個算法層面介紹 embedding:Word2Vec,Listing Embedding ( 參考 Airbnb ) 在個性化 push 的應用,以及近兩年流行的圖相關的算法 GCNs。

2.1 Word2Vec

  • Feed 也就是展示頁的一個 item,對於美圖秀秀來說就是用戶發的一張圖,對於電商來說就是一個商品,本文統一稱爲 feed。
  • Embedding 就是把任何一個 Feed 轉化爲一個向量,服務於後面的召回和排序。Embedding 是比較基礎的過程,在最開始階段,我們嘗試了最基礎的 Work2Vec 中的 Skip-Gram 的模型,通過對於用戶的點擊序列模仿 Work2Vec 中的一個句子。如圖所示,我們有序列之後,定義窗口大小,通過中心詞,就會得到 Train Sample。緊接着定義單側窗口大小爲2,就可以得到樣本對,把樣本對輸入模型,就可以返回向量。

在實驗中,我們採用了60天的點擊序列,輸出向量設置爲100維。

2.2 Airbnb Listing Embedding

Airbnb listing Embedding 是2018年 KDD 的最佳論文,這裏和 Word2Vec 主要的區別在於損失函數,模型本身和 Word2Vec 是保持一致的,所以我們先看 Word2Vec 的損失函數:

損失函數由正負樣本兩部分組成,正樣本對 Dp 來源於用戶點擊流生成的 item pair,負樣本對 Dn 通過當前的 item + 隨機採樣空間的其他 item ( 這裏假設隨機採樣的樣本不是當前 item 的鄰居 ),ctx 表示上下文。這裏需要注意的是在 log 裏,正樣本前面有負號,負樣本沒有負號。

但是,之前的構造只用了用戶的點擊數據,實際上用戶還有點贊、分享等行爲數據可以利用。所以,在 Airbnb listing Embedding 中,加入了 Global Context 這樣一個概念:通過用戶歷史的點贊、分享對應的 feed,與當前的 feed 構造出全局正樣本對,使這些 feed 在點擊序列上和當前的 feed 並不相鄰, 加入到損失函數中。( 如公式中的紫色部分 )

同理,我們可以通過用戶的點擊"不喜歡"的行爲來構造負樣本 ( 如公式中的紅色部分 )。除此之外,用戶的瀏覽過,但是沒有點擊的 feed 也可以隨機採樣之後當做負樣本,加入到損失函數中 ( 如公式中的藍色部分 )。

這樣,就把 Airbnb listing Embedding 的策略引入到了美圖秀秀的場景裏。

2.3 Graph Embedding

Graph Embedding 是近幾年比較流行的 Embedding 方法,主要策略可以分爲三類:Shallow Embedding,Neighborhood autoencoder methods 和 GCN 的方法。但是前兩種方法涉及到不可拓展和直推式的缺陷,GCN 可以避免以上的缺陷。

前面兩種 Embedding 只對行爲序列本身進行了建模,但是沒有考慮節點本身的特徵;另外,在之後的排序模型中,排序模型使用了 item 的自身屬性進行排序。GCN 就是把用戶行爲和 item 本身的特徵聯合起來,既能用上圖的拓撲結構,又可以把握屬性特徵,把信息融合起來做 Embedding。在上圖中,假設我們要計算 A 的 Embedding,可以通過計算 A 的一階近鄰 BC 的信息聚合得到 Aggregate,而 BC 的信息可以由二階近鄰 DEC,EBFG 的信息計算卷積 ( Convolution ) 計算得到。

具體來說,延展的過程中,主要包括對於高階信息的彙總 Aggregate,以及當前階和鄰階節點上一階的卷積之間信息的結合 Combine。其中,Combine 可以有很多操作,比如拼接,求和等。Aggregate 的過程中,需要注意的一點是採用了 Importance pooling,這裏並不會對每個鄰居節點都彙總,而是先計算一個Importance Factor ( 影響力因子 ),影響力因子小於閾值的不參與加權,最後根據權重去加權求和。

構件圖的不同形態:

  • 二分圖形態:兩種類型 ( Feeds,User ) 內部之間沒有邊,不同類型之間纔有邊;
  • 單體圖形態:根據用戶同一時間段的行爲,將 Feeds 之間關聯起來。

到此爲止,我們介紹了 Embedding 所嘗試的方法。

3. 召回模型

召回主要採用了四個方面:全局召回 ( 熱榜,熱搜,熱詞 ),個性化召回 ( 根據用戶的行爲,興趣進行召回 ),屬性召回 ( 也就是畫像召回,通過機型,性別,年齡等 ),最後是相關召回 ( 包括相似,關鍵詞召回等 )。

3.1 個性化召回之 YoutubeNet

YoutubeNet 是近兩年比較流行的算法,它既可以做召回,也可以做排序。通過輸入用戶的行爲序列得到用戶和 item 的向量,然後就可以通過向量相似程度,對每個 user 相似的 topN 個 item 進行個性化召回,實驗中到達點擊率提升了1.661%。

3.2 個性化召回之聚類召回

業務上,push 也包含一個任務是實現將"工具類用戶"轉化成"社交類用戶",從而提高長期的 DAU。在聚類召回階段,可以通過對於用戶的工具偏好特徵去構建 multi-hot 的向量,然後進行用戶羣聚類,對於每個特定的用戶羣召回對應的榜單。

3.3 相關召回之相似召回

相關召回在美圖秀秀中是輸出用戶近期的 item 點擊流,獲取了對應的 Embedding 之後,可以通過計算 Embedding 的均值然後找餘弦距離最小的候選項;或者直接將每個候選項去找餘弦距離最小的候選項,最後進行彙總。這裏值得思考的一個問題是,何時利用好工具行爲的特徵,是在排序階段,召回階段,還是生成 Embedding 的階段?經過實驗,得到在 Embedding 階段使用工具行爲特徵效果最好。

3.4 相關召回之聚類召回

聚類召回主要是爲了實現多樣性,避免同質化的內容。通過對 item 的 Embedding 進行聚類,相當於每個 item 多了一個分類標籤。通過統計用戶對於每個類別的行爲記錄次數,按照倒敘進行排列。在召回階段,按照排列好的順序依次從每一個類別中抽取一個 item,如果所有類別都抽了一遍,召回的數量仍然不夠多,可以繼續再抽一輪,直到候選數目足夠。這樣就實現了召回源的多樣性。

3.5 相關召回之文案相關召回

當選取候選 item 之後,發送 push 仍需要一條文字信息觸達用戶,這裏簡稱文案。文案一般由編輯生成,會有很多候選項,所以也需要對文案進行建模召回。主要有以下三個方案:

  • 關鍵詞召回:通過對於歷史的文案進行分詞,得到每條文案的關鍵詞,然後把用戶對於文案的點擊映射到對於關鍵詞的點擊,這樣就能得到用戶對於不同關鍵詞的偏好。當我們新需要發送一條文案時,可以得到用戶對於每條候選文案偏好度,召回偏好大的文案。

  • 熱詞召回:通過計算全局哪些關鍵詞最受歡迎,召回的過程中直接召回帶有熱門關鍵詞的文案。

  • 文案相似度召回:通過 NLP 的模型,比如 BERT,生成每一條對應的 Embedding,然後召回與用戶點擊過的文案餘弦距離最小的文案。

以上,就是所有的召回部分。

4. 排序模型

4.1 LR 邏輯迴歸模型

在排序模型的初始迭代階段,使用了最簡單的 LR 模型,LR 的模型優點是模型淺,計算簡單,解釋性強,易於使用。但是缺點也顯而易見,LR 對於非線性特徵擬合程度差;除此之外,交叉特徵的生成依賴於大量嘗試以及人工經驗,所以嘗試成本很高。

4.2 xNFM 模型

通過對於 LR,Wide&Deep,deepFM,NFM,DCN,xNFM,xDeepFM 模型的嘗試與對比,最後選擇的 xNFM 的模型。xNFM 優點是組合了一階和二階的特徵的優點,性能上也可以達到工業落地的需求。

xNFM 不是業界主流的模型,而是在落地中對於 NFM 的變種。主要區別在於:

  • 模型的輸入端爲了降低模型參數規模,把 id 類特徵和非 id 類特徵分別進行 Embedding,可以大大減少參數規模。
  • 在上層網絡,主要區別在於右側。傳統的 NFM 的弊端是隻考慮了一個顯性的二階信息,而忽略了一階信息 ( 單特徵 ),所以我們增加了右邊的網絡用來捕捉單特徵的信息。相比於 LR,提升效果明顯,到達點擊率提升13.89%。

4.3 雙塔模型

隨着用戶量的增加,計算量飆升,笛卡爾積之後會有千億級別的計算量,使得模型更新週期變長,時效性降低。爲了解決這個問題,我們提出了雙塔的結構。雙塔的結構特別在,當 user 和 item 分別構建一個 DNN 的全連接的網絡。這樣設計優化主要體現在工程性能方面,存儲量大大降低,預測階段耗時也降低,從而實現了支持億級別的用戶高效計算。從最初的雙塔之後接入到內積,再到上圖的雙塔接入 NFM,到最後再加入點擊序列的信息,三個版本的迭代最終點擊率累計提升23.9%。

4.4 三塔模型

在之前也提到,我們有很多召回策略,但是召回源質量參差不齊,所以就需要解決對於召回源的選取。

  • 最初的想法是根據每個召回源的轉化對排序結果進行 socre reweight,但是弊端也很明顯,因爲召回源直接並不互斥,同個 item 會被多個召回源命中,所以 reweight 的規則也難以定義。
  • 之後,爲了個性化,直接把召回源信息加入到模型中。這裏爲什麼不把召回源直接加入到 item 的特徵中,而是單獨的構造了一個塔呢?主要工程上的考慮,如果把召回源的信息加到 item 塔中,必須等 item 塔計算完成之後才能進行生產預測,會造成串行化,增加了延時。

增加了召回源信息之後,到達點擊率提高了3.06%。

4.5 Field_wise 三塔模型

最後一版就是對於 NFM 模型的改進,在 NFM 左邊的 Bi-Interaction Layer 中,BI 是 Bi-linear 的縮寫,這一層其實是一個pooling層操作,它把很多個向量轉換成一個向量,形式化如下:

輸入是整個的嵌入向量,xi,xj 是特徵取值,vi,vu 是特徵對應的嵌入向量。中間的操作表示對應位置相乘。所以原始的嵌入向量任意兩個都進行組合,對應位置相乘結果得到一個新向量;然後把這些新向量相加,就得到了 Bi-Interaction 的輸出。這個輸出只有一個向量。這裏參考 FM 到 FFM 的改進過程,引入 Field 的概念。由於 BI 層不同的類別特徵所表達是權重不相同,而 BI 層捕捉不到這個信息,所以可以對於每個向量相乘前可以加上權重。但是,這樣會導致參數過多,而同屬於一個 field 的變量權重應該相近,所以對於 BI 層進行同類別的權重 wi,j 共享而會使用相同參數的點積來計算:

從而得到了 Fieldwise 三塔模型。模型上線後最終得到了到達點擊率5.68%的提升。

5. 文章小節

到此爲止,我們分別介紹了 Embedding,召回,排序三部分。Embedding 作爲底層的服務輔助召回和排序,總共涵蓋了 word2vec,airbnb listing embedding,GCNs 等幾種不同策略;在召回部分,從不同場景與目標介紹了不同的召回策略;排序部分主要是模型由 LR 到 Field_wise 三塔模型的迭代過程,重點是如何解決特徵生產階段中耗時的笛卡爾積運算,使得一些更具規模的模型得以在線上業務投入生產。

今天的分享就到這裏,謝謝大家。

作者介紹

周燕穩,美圖高級推薦算法工程師

畢業於廈門大學。曾就職於阿里巴巴、人人網,從事大數據、數據挖掘相關工作,現主要負責美圖秀秀 push 推薦業務的召回和排序的相關算法設計及落地。

蔣文瑞,美圖技術經理

從事 AI 與個性化推薦相關研究工作,畢業於武漢大學。研究方向爲大規模機器學習、深度模型及監督/無監督訓練,並於 NIPS 2015 Workshop 發表論文。曾就職於 HTC 大數據研發中心、秭雲科技。

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247498181&idx=1&sn=f3ee8fc793cc47d069913017f5aa7c74&chksm=fbd74ba9cca0c2bfef5fd5a07805b35cc90d15146899125e6bf21be2294a811e42d851cd2c06&scene=27#wechat_redirect

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章