Categories
程式開發

汽車之家推薦系統排序算法迭代之路


導讀:汽車之家的推薦系統緊隨前沿技術,在支持內部多個推薦場景的同時,對外也有了一定的輸出。未來我們期望汽車之家的推薦系統不只是前沿技術的應用者,更是推動者和創新者。本次分享的主題為汽車之家推薦系統排序算法迭代之路,主要包括:

  • 汽車之家推薦系統
  • 排序模型
  • 特徵及訓練樣本
  • 未來計劃的優化方向

01. 汽車之家推薦系統

1. 概述

汽車之家推薦系統上線已有近5年曆史,主要給用戶推薦個性化的汽車之家資源。推薦系​​統的上線是汽車之家 APP 生態內容以分類體系分發轉變為個性化推薦的重要里程碑。汽車之家推薦的資源主要包括:專業編輯、汽車大V、論壇用戶生產的文章、視頻、圖片,以及車系物品等,總量上億。

推薦的目標是給用戶推薦他喜愛的內容,做好推薦可以拆解為三個子目標:

  • 一是對用戶的理解
  • 二是對資源的刻畫
  • 三是用戶和資源的最佳匹配

再對上面三個目標進行拆解,用戶理解包含用戶屬性、行為收集及行為的表示,資源的刻畫包括自身的屬性及外部賦給資源的特徵,用戶和資源的匹配有非常多的方法或模型,是推薦系統的核心工作,追求更好更優的匹配,是推薦系統不斷演進的動力所在。

汽車之家推薦系統排序算法迭代之路 1

匹配又可以分為兩部分,召回和排序,召回是盡可能多的找到用戶喜歡的資源,排序是對找到的資源再做一次優選,召回和排序又可以進一步細分。

2. 架構

推薦系​​統要從海量的資源庫裡,快速找到用戶潛在感興趣的資源。主要有四個環節:

第一,收集資源;

第二,從所有資源中找到用戶感興趣的資源;

第三,對用戶感興趣的資源根據用戶喜好程度進行排序;第四,輸出給用戶最感興趣的 n 個資源。

汽車之家推薦系統排序算法迭代之路 2

基於以上四個環節對推薦系統架構進行設計,一般由如下模塊組成。

汽車之家推薦系統排序算法迭代之路 3

其中:

  • 資源池:存儲各種類型的海量資源,一般由數據庫存儲,如 mysql、hive、redis 等。
  • 標籤生成:標籤是對資源更多維度的結構化刻畫。比如:分類標籤、關鍵詞、質量分等。
  • 索引:對資源的各類標籤、關鍵詞建立倒排索引,及相似向量檢索引擎等。
  • 過濾:對用戶的曝光歷史、負反饋等進行過濾。
  • 召回:使用用戶畫像標籤或用戶 Embedding 到索引和向量庫中獲取相關的候選資源。
  • 用戶畫像:用戶屬性及根據用戶的歷史行為給用戶打的標籤。
  • 排序:通過模型對召回的每個候選資源進行預測打分。
  • 特徵/模型:排序依賴的用戶特徵、資源特徵及模型。
  • 運營:業務策略,包括提權、曝光佔比控制、打散等業務策略。
  • 輸出:將排序及運營後的 topN 個資源打包返回給客戶端。

02. 排序模型

1. 模型介紹

汽車之家首頁推薦排序模型主要經歷了 LR、XGBoost、FM、DeepFM、DeepFM Online Learning 這幾個主要的演進過程,在這個過程中還實驗瞭如 Wide&Deep、DCN、LSTM、GRU 等模型。

汽車之家推薦系統排序算法迭代之路 4

LR 模型是 CTR 預估領域早期最成功的模型,大多早期的工業推薦排序系統採取 LR 這種 “線性模型+人工特徵組合引入非線性” 的模式。 LR 模型具有訓練快、上線快、可解釋性強、容易上規模等優點,目前仍然有不少實際系統採取這種模式。同時 LR 模型也是之家推薦排序系統初期的驗證模型和中後期的 baseline 模型。

XGBoost 模型在使用和 LR 相同的特徵,上線後就取得了比較明顯的效果,之後又增加了 user 和 item 的實時特徵,實驗組 CTR 得到了進一步的提升,總體上相對提升6%。在和對照組持續觀察了3週後,XGBoost 的提升效果得到了驗證,替換了 LR 成為線上的全量模型和 baseline 模型。之後還嘗試了 XGBoost+LR,效果相比 XGBoost 沒有明顯提升。

FM 簡潔優雅地實現了二階特徵組合。實現特徵組合比較容易想到的是在 LR 的基礎上加入二階特徵組合即可,即任意兩個特徵進行組合,將組合出的特徵看作新特徵,加到 LR 模型中。組合特徵的權重在訓練階段學習獲得。但這樣對組合特徵建模,泛化能力比較弱,尤其是在大規模稀疏特徵存在的場景下。 FM 模型也直接引入任意兩個特徵的二階特徵組合,但對於每個特徵,學習一個大小為 k 的一維向量,兩個特徵 Xi和 Xj 的特徵組合的權重值,通過特徵對應的向量 Vi 和 Vj 的內積i , Vj>來表示。這本質上是對特徵進行 Embedding 化表徵,和目前常見的各種實體 Embedding 本質思想是一樣的。特徵組合對於推薦排序是非常重要的,DNN 模型一樣離不開特徵組合這個特點,但MLP 是種低效率地捕獲特徵組合的結構,所以排序相關的深度模型,基本都具有類似FM 組合特徵的部分。 FM 模型實踐階段主要是增加了樣本量由幾千萬到3億,線上實驗 CTR 對比 XGBoost 相對提升2%,因為後續 DeepFM 很快上線,FM 並沒有推全。

Wide&Deep 是推薦領域取得較大成功的最早期深度模型,由 Google 於2016年提出。 Wide&Deep 模型包括Wide 部分和Deep 部分,Wide 部分為LR,輸入為one-hot 後的離散型特徵和等頻分桶後的連續性特徵,這部分可以對樣本中特徵與目標較為明顯的關聯進行記憶學習;Deep 部分為MLP,輸入為Embedding 後的離散型特徵和歸一化後的連續型特徵,可以泛化學習到樣本中多個特徵之間與目標看不到的潛在關聯。使用 Wide&Deep 的另一個優勢在於 Wide 部分的存在,可以沿用之前淺層學習的成果,尤其是特徵工程部分。 Wide&Deep 上線後 CTR 相對提升3%,比同期上線的 DeepFM 低0.5%,線上主要使用了 DeepFM 模型。

DeepFM 將 Wide&Deep 的 Wide 部分 LR 替換成 FM 來避免人工特徵工程。 DeepFM 相比 Wide&Deep 模型更能捕捉低階特徵信息。同時,Wide&Deep 部分的 Embedding 層需要針對 Deep 部分單獨設計,而在 DeepFM 中,FM 和 Deep 部分共享 Embedding 層,FM 訓練得到的參數既作為 wide 部分的輸出,也作為 MLP 部分的輸入。 DeepFM 支持 end-end 訓練,Embedding 和網絡權重聯合訓練,無需預訓練和單獨訓練。 DeepFM 上線後 CTR 相對提升3.49%,略好於同期上線的 Wide&Deep。在效果得到驗證後推全了 DeepFM 模型,使其成為線上的全量模型和 baseline 模型。線上效果的提升帶來的是推薦排序模型預測耗時的增加,為了保證不超過最大平響,在不明顯提高模型loss 的前提下,實驗優化Deep 部分的參數,包括減少Embedding 的維度和隱藏層的神經元個數與層數等。通過部署模型上線後觀察效果,模型預測的耗時隨之減少,而且CTR 也沒有明顯波動,依然明顯高於對照組,說明深度學習的泛化能力較強,即便降低模型的神經網絡配置,依然能較好地擬合樣本。

與Wide&Deep 和DeepFM 類似,DCN 將Wide 部分升級為Cross 網絡,Cross 網絡一方面通過顯式的高階特徵交叉,另一方面通過層與層之間擬合殘差,能夠更深入地挖掘出非線性特徵組合與目標的關係,更快地達到穩定的擬合狀態。在和 DeepFM 採用相同特徵的情況下,實驗 CTR 也和 DeepFM 持平。根據線上的迭代經驗和業務特點,嘗試優化了 DCN 的模型結構。在DCN 原始的Embedding and Stacking 層中,離散型特徵在經過Embedding 處理後,與連續型特徵直接拼接在一起,統一輸入進後面的網絡,這樣帶來的不足是:雖然網絡可以用顯性和隱性的方式學習特徵間的有效交叉,但缺少單個特徵內部信息的挖掘,將這部分壓力轉移到了特徵工程,從而增加了人工成本。基於充分利用每個特徵,通過排序模型自適應學習到更多信息的考慮,嘗試對所有特徵分別進行擴展。在DCN 的Embedding and Stacking 層和網絡層之間實驗引入特徵擴展層,將每個特徵從原始的1維擴展到n 維,與Embedding 只對離散型特徵處理不同,維度擴展也會處理連續性特徵。擴展後的特徵在伴隨著維度增加的同時,會將更多自身信息輸入到網絡層參與高階計算,與只使用原始特徵相比,模型可以更深入利用已有特徵,節約了特徵工程的人工成本。通過離線實驗,在採用相同特徵的情況下,相較 DCN,基於特徵擴展的 DCN 上線後實驗 CTR 相對提升1%。

在上述模型迭代的同時,還實驗了 LSTM、GRU 等模型,LSTM 和 GRU 都是基於序列的 next click 模型,模型的結構很簡單,對於一個 Session 中的點擊序列 X=[X[X[X[X1,X2,X3…Xn-1,Xn],依次將 X1,X2,…,Xn-1 輸入到模型中,預測下一個被點擊的是哪一個 Item。首先,序列中的每一個物品 Xt 被轉換為 one-hot,隨後轉換成其對應的 embedding,經過 N 層隱含單元後,再經過一個全聯接層得到下一次每個物品被點擊的概率。這些模型的 CTR 都暫未明顯好於 DeepFM,所以都還在實驗階段,沒有成為線上主要模型。

在DeepFM 和其他深度模型的實踐中,比較容易犯的錯誤是不考慮特徵組成和样本數量,直接暴力增加模型複雜度,從而導致訓練時間驟增、模型文件變大和線上的預測時間更久,最終引起推薦系統服務超時。如果特徵數量少、特徵工程完善和样本選取合理,使用簡單的深度學習模型反而能夠達到更好的效果。

2. 在線學習

在線學習利用實時收集的用戶反饋,實時更新模型參數進行預測,實時反饋用戶行為變化帶來的影響。在線學習相對離線學習可以理解為數據集無限大,時間序列無限長,利用樣本數據流逐條更新模型,在線學習是 DeepFM 上線後在模型更新方面做的優化。之前的模型更新從一周到一天,為了模型能更快的學習到用戶的實時行為,我們將模型的更新周期做到了分鐘級。

這裡主要有兩部分工作,一是 Label 及特徵的實時獲取,二是模型的實時更新。

對於Label 及特徵的實時獲取是通過每次請求的唯一標識id 使用服務端dump 的特徵和客戶端的Label ( 曝光、點擊) 進行join 生成,這裡要注意的是Label 必須和當次請求的特徵join,如果特徵數據在Label 之後有更新,則會產生特徵穿越的問題。

模型的實時更新是將實時獲取的樣本累積到一個 batch 後,就進行迭代更新,更新後的模型每隔10分鐘往線上推一次。累計10分鐘在保證捕獲用戶實時行為實效性的前提下,既可以降低工程實現難度,又可以降低樣本的抖動影響,對樣本不均衡的情況可以採取採樣策略進行處理。

汽車之家推薦系統排序算法迭代之路 5

3. 排序服務

排序服務是以 API 的形式提供,其中:

輸入

Deviceid:用戶唯一標識,在服務內部通過此 id 獲取用戶的屬性及行為特徵。

Itemid:這是對用戶待排序的資源 id,在服務內部會獲取到這些資源屬性、熱度、標籤等信息。

Pvid:當次請求的唯一標識,用於關聯客戶端和服務端的日誌。

Model-name:模型名稱,指定選用哪個模型進行排序,排序服務提供了多個模型供選擇。

Model-version:模型版本,和 Model-name 搭配使用,指定同一個模型的哪個版本,這個參數主要用來進行模型迭代優化。

Debug:此參數用來輸出排序過程中的一些中間結果。

輸出:Itemid 及其打分。

排序服務中的多個模型有不同的更新策略,更新周期可配置。排序服務還依賴於特征服務獲取用戶和資源的特徵,對應到不同模型還有不同的特徵工程處理。

汽車之家推薦系統排序算法迭代之路 6

4. 模型更新

實驗的小流量排序模型經過離線驗證,線上可以定時直接熱更新。線上的全量排序模型更新除了離線驗證外,還要在推全之前有一個預上線實驗驗證,確保在預上線實驗組上 CTR 等數據沒問題,再將模型全部更新。

汽車之家推薦系統排序算法迭代之路 7

5. AB 實驗

在機器學習領域中,AB 實驗是驗證模型最終效果的主要手段。進行 AB 實驗的主要手段是進行用戶分桶,即將用戶分成實驗組和對照組,對實驗組的用戶施以新模型,對照組的用戶施以舊模型。在分桶的過程中,要注意樣本的獨立性和採樣方式的無偏性,確保同一個用戶每次只能分到同一個桶中,在分桶過程中選取DeviceId 必須是完全隨機的,這樣才能保證桶中的樣本是無偏的。實驗組和對照組的劃分必須是在相同的約束條件下隨機選取 DeviceId。如下圖a、b、c 的劃分都不正確,其中a 中實際劃分的用戶超出了實驗約束的用戶群,b 中實驗組用戶正確,但是把剩餘的所有用戶作為對照組是不對的,c 中實驗用戶正確,對照組用戶有所擴大也是不對的,只有d 是正確的。

汽車之家推薦系統排序算法迭代之路 8

線上的 AB 主要有三部分,一是實驗及其分桶的配置,二是分桶對應的代碼邏輯,三是實驗及分桶的效果數據。實驗之間的流量是正交的,每個實驗中多個分桶的流量是互斥的。如我們的排序模型設置了一個實驗,多個分桶,有2%、5%、10%流量的三個對照組,模型上線時從2%開始逐步擴量進行效果對比驗證。

汽車之家推薦系統排序算法迭代之路 9

6. 模型訓練

推薦排序模型的訓練主要基於之家機器學習平台 AutoPAI。汽車之家AutoPAI 是一個支持可視化拖曳組件建模,支持上百種機器學習算法組件,支持多個深度學習框架,和Hadoop、Spark 打通,支持分佈式GPU 訓練深度學習模型的平台,並且支持在線開發、自動部署等功能。

我們的簡單模型如 LR、XGBoost 可以直接在界面上拖動數據源、特徵處理組件、模型組件、驗證組件進行訓練並保存模型,之後進行一鍵部署線上服務。深度模型支持在線開發、調試,之後將調試好的代碼通過深度學習組件進行提交,選擇 GPU 卡數進行訓練,訓練完成後可一鍵部署服務。

汽車之家推薦系統排序算法迭代之路 10

7. 可視化 Debug

對模型或策略單次請求效果的驗證,一般上線後通過白名單進行驗證,但這還是要進行代碼或配置的上線,上線一方面是有風險,另一方面一般上線是多個實驗多個功能一起上線,即使一個實驗添加了白名單也有可能受到其他實驗的影響。對此,我們基於代碼 Debug 的思想,把調試放在程序正式發布前,我們做了推薦 Debug 系統,在實驗上線前就可以通過 Debug 系統進行效果驗證及中間環節驗證。

我們的 Debug 平台最主要的推薦效果驗證輸入有兩部分,一是推薦接口,二是實驗配置。通過更改這兩部分的參數,就可以模擬線上真實返回渲染,並可以輸出這次請求整個鏈路的中間結果。 Debug 平台還支持對索引、召回、排序等子模塊的直接驗證,可以查詢資源特徵、用戶畫像,用戶曝光點擊行為等。 Debug 平台的上線極大的提高了我們的上線效率。

汽車之家推薦系統排序算法迭代之路 11

03. 特徵及訓練樣本

1. 特徵介紹

汽車之家推薦系統排序算法迭代之路 12

模型的輸入一般包括:用戶畫像特徵、item 特徵,上下文特徵,交叉特徵、位置特徵和序列 item 特徵,其中:

用戶畫像特徵有:用戶自身屬性,如性別、年齡、職業、地域等;用戶行為,如不同時間窗口的瀏覽時長、點擊、搜索、發貼、收藏、點贊等行為;基於行為所產生的興趣偏好,如車系、標籤偏好等;基於行為的衍生統計指標,如用戶ctr、活躍度等。

Item 特徵有:item 自身屬性,如標題、正文字數、圖片個數等;基於item 挖掘的特徵,如內容分類、關鍵詞、情感、內容專業度、內容豐富度、作者影響力等;item 被用戶賦予的行為,如uv、pv、ctr、收藏、點贊、回復等。

交叉特徵有:item 標籤與用戶標籤的匹配度。

2. 特徵處理

直接使用原始特徵不易於模型擬合,所以傳入模型後還需要進一步處理,具體包括:異常值處理、歸一化和等頻分桶。

異常值處理

訓練樣本中的特徵一般都存在異常值,對於離散型特徵,可以將其單獨分配到one-hot 的一個位置,不會存在全為0的情況,但對於連續型特徵,通常會對其賦默認值,如果為0則該特徵不會參與到結果計算,如果為平均值則可能不符合各個特徵的物理含義。為了得到合理的默認值,排序模型通過在特徵處理階段,對每個連續型特徵引入不為0的 weight 和 bias,默認值的計算方式為:weight x featurevalue + bias,weight 和 bias 通過模型訓練學到,當出現異常值時,特徵值默認等於 bias。通過離線實驗,測試集的 loss 有明顯下降,上線後的 CTR 也優於默認取0值或取平均值。

歸一化

連續型特徵的值分佈一般不統一,例如曝光量和CTR,曝光量取值都大於1,且最大值可能會是幾百萬,而CTR 的取值區間為0到1,如果直接輸入到排序模型,分佈不均的統計特徵會導致訓練波動,不但影響收斂速度,而且最終可能會無法擬合。常規的歸一化方法包括:min-max、log 和 standard 等,通過離線實驗觀察測試集的 loss,其中 min-max 的效果最好。

等頻分桶

對於連續型特徵,當線上的特徵值出現異常變化的時候,可能會存在泛化性不好或者魯棒性不足的問題。為此引入了等頻分桶,即按樣本特徵的分佈頻率,為每個特徵規定好多個取值分界線,根據原始特徵值分到不同的桶中,再根據桶的編號進行one-hot 處理。深度模型的 NN 部分使用連續特徵時因為長尾分佈對最大值做了限制,後來實驗 NN 部分使用離散特徵效果更好,也使用了離散特徵。

3. 特徵表達

我們的排序模型不僅引入了大規模的稀疏特徵,而且實現了多種形式的向量表達。

如基於 item 內容分類的 Bert embedding,基於 item 圖像和視頻的 embedding,基於行為的 Graph embedding、LSTM embedding 等。

汽車之家推薦系統排序算法迭代之路 13

4. 特徵生產

用戶和資源的特徵做到了離線加實時,離線特徵存儲了用戶和資源最近三個月的行為,實時特徵做到了秒級別的更新。特徵生產系統架構如下:

汽車之家推薦系統排序算法迭代之路 14

5. 特征服務

特征服務是支持排序服務的基礎服務,主要輸出用戶和資源的離線及實時特徵。

汽車之家推薦系統排序算法迭代之路 15

6. 訓練樣本生成

排序服務在用戶每次請求時調用特征服務,獲取實時和歷史特徵,輸入模型,並輸入到一個 dump 隊列再與客戶端的曝光點擊進行 join 生成模型實時訓練更新的樣本,流程如上圖。

04. 未來計劃的優化方向

模型目標:後續的優化目標不僅僅限於 CTR,而是綜合點擊、互動、時長等多個目標同時優化,這是未來目標優化的趨勢。多目標模型的實現既可以每個目標獨立建模優化然後進行融合,也可以通過共享參數的多目標網絡實現。

模型表達能力:也就是網絡結構的升級,如使用 Transformer 進行更好的特徵抽取,自動化特徵工程,AutoML 自動設計更好的網絡模型,和推薦場景很吻合的強化學習等。

特徵擴充及信息融合:主要有用戶長短期興趣更精準的 Embedding 表達,文本、圖片、視頻、互動行為等多模態信息的融合表達等。

汽車之家的推薦系統緊隨前沿技術,在支持內部多個推薦場景的同時,對外也有了一定的輸出。未來我們期望汽車之家的推薦系統不只是前沿技術的應用者,更是推動者和創新者。

作者介紹

李晨旭,汽車之家高級算法工程師。 2014年加入汽車之家,先後從事搜索意圖分析、文本挖掘、推薦排序等工作。在汽車之家海量資源和幾億用戶這個平台上,積極嘗試並落地最新的算法研究成果,也積極嘗試在此基礎上創新,並取得了一定的效果。

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247497757&idx=1&sn=fe521ea5a746be9ba0aa208506d716b8&chksm=fbd74a71cca0c3676f2681bb7917a12e77562d2c5b3d1e5def4a3eac3fc40bd57e12ef2548e5&scene=27#wechat_redirect