文章作者:李晨旭 汽車之家 出品平臺:DataFunTalk 導讀:汽車之家的推薦系統(tǒng)緊隨前沿技術(shù),在支持內(nèi)部多個推薦場景的同時,對外也有了一定的輸出。未來我們期望汽車之家的推薦系統(tǒng)不只是前沿技術(shù)的應(yīng)用者,更是推動者和創(chuàng)新者。本次分享的主題為汽車之家推薦系統(tǒng)排序算法迭代之路,主要包括:
01. 汽車之家推薦系統(tǒng) 1. 概述 汽車之家推薦系統(tǒng)上線已有近5年歷史,主要給用戶推薦個性化的汽車之家資源。推薦系統(tǒng)的上線是汽車之家 APP 生態(tài)內(nèi)容以分類體系分發(fā)轉(zhuǎn)變?yōu)閭€性化推薦的重要里程碑。汽車之家推薦的資源主要包括:專業(yè)編輯、汽車大V、論壇用戶生產(chǎn)的文章、視頻、圖片,以及車系物品等,總量上億。 推薦的目標是給用戶推薦他喜愛的內(nèi)容,做好推薦可以拆解為三個子目標:
再對上面三個目標進行拆解,用戶理解包含用戶屬性、行為收集及行為的表示,資源的刻畫包括自身的屬性及外部賦給資源的特征,用戶和資源的匹配有非常多的方法或模型,是推薦系統(tǒng)的核心工作,追求更好更優(yōu)的匹配,是推薦系統(tǒng)不斷演進的動力所在。 匹配又可以分為兩部分,召回和排序,召回是盡可能多的找到用戶喜歡的資源,排序是對找到的資源再做一次優(yōu)選,召回和排序又可以進一步細分。 2. 架構(gòu) 推薦系統(tǒng)要從海量的資源庫里,快速找到用戶潛在感興趣的資源。主要有四個環(huán)節(jié): 第一,收集資源; 第二,從所有資源中找到用戶感興趣的資源; 第三,對用戶感興趣的資源根據(jù)用戶喜好程度進行排序; 基于以上四個環(huán)節(jié)對推薦系統(tǒng)架構(gòu)進行設(shè)計,一般由如下模塊組成。
02. 排序模型 1. 模型介紹 汽車之家首頁推薦排序模型主要經(jīng)歷了 LR、XGBoost、FM、DeepFM、DeepFM Online Learning 這幾個主要的演進過程,在這個過程中還實驗了如 Wide&Deep、DCN、LSTM、GRU 等模型。 LR 模型是 CTR 預估領(lǐng)域早期最成功的模型,大多早期的工業(yè)推薦排序系統(tǒng)采取 LR 這種 '線性模型+人工特征組合引入非線性' 的模式。LR 模型具有訓練快、上線快、可解釋性強、容易上規(guī)模等優(yōu)點,目前仍然有不少實際系統(tǒng)采取這種模式。同時 LR 模型也是之家推薦排序系統(tǒng)初期的驗證模型和中后期的 baseline 模型。 XGBoost 模型在使用和 LR 相同的特征,上線后就取得了比較明顯的效果,之后又增加了 user 和 item 的實時特征,實驗組 CTR 得到了進一步的提升,總體上相對提升6%。在和對照組持續(xù)觀察了3周后,XGBoost 的提升效果得到了驗證,替換了 LR 成為線上的全量模型和 baseline 模型。之后還嘗試了 XGBoost+LR,效果相比 XGBoost 沒有明顯提升。 FM 簡潔優(yōu)雅地實現(xiàn)了二階特征組合。實現(xiàn)特征組合比較容易想到的是在 LR 的基礎(chǔ)上加入二階特征組合即可,即任意兩個特征進行組合,將組合出的特征看作新特征,加到 LR 模型中。組合特征的權(quán)重在訓練階段學習獲得。但這樣對組合特征建模,泛化能力比較弱,尤其是在大規(guī)模稀疏特征存在的場景下。FM 模型也直接引入任意兩個特征的二階特征組合,但對于每個特征,學習一個大小為 k 的一維向量,兩個特征 Xi 和 Xj 的特征組合的權(quán)重值,通過特征對應(yīng)的向量 Vi 和 Vj 的內(nèi)積<Vi , Vj>來表示。這本質(zhì)上是對特征進行 Embedding 化表征,和目前常見的各種實體 Embedding 本質(zhì)思想是一樣的。特征組合對于推薦排序是非常重要的,DNN 模型一樣離不開特征組合這個特點,但 MLP 是種低效率地捕獲特征組合的結(jié)構(gòu),所以排序相關(guān)的深度模型,基本都具有類似 FM 組合特征的部分。FM 模型實踐階段主要是增加了樣本量由幾千萬到3億,線上實驗 CTR 對比 XGBoost 相對提升2%,因為后續(xù) DeepFM 很快上線,F(xiàn)M 并沒有推全。 Wide&Deep 是推薦領(lǐng)域取得較大成功的最早期深度模型,由 Google 于2016年提出。Wide&Deep 模型包括 Wide 部分和 Deep 部分,Wide 部分為 LR,輸入為 one-hot 后的離散型特征和等頻分桶后的連續(xù)性特征,這部分可以對樣本中特征與目標較為明顯的關(guān)聯(lián)進行記憶學習;Deep 部分為 MLP,輸入為 Embedding 后的離散型特征和歸一化后的連續(xù)型特征,可以泛化學習到樣本中多個特征之間與目標看不到的潛在關(guān)聯(lián)。使用 Wide&Deep 的另一個優(yōu)勢在于 Wide 部分的存在,可以沿用之前淺層學習的成果,尤其是特征工程部分。Wide&Deep 上線后 CTR 相對提升3%,比同期上線的 DeepFM 低0.5%,線上主要使用了 DeepFM 模型。 DeepFM 將 Wide&Deep 的 Wide 部分 LR 替換成 FM 來避免人工特征工程。DeepFM 相比 Wide&Deep 模型更能捕捉低階特征信息。同時,Wide&Deep 部分的 Embedding 層需要針對 Deep 部分單獨設(shè)計,而在 DeepFM 中,F(xiàn)M 和 Deep 部分共享 Embedding 層,F(xiàn)M 訓練得到的參數(shù)既作為 wide 部分的輸出,也作為 MLP 部分的輸入。DeepFM 支持 end-end 訓練,Embedding 和網(wǎng)絡(luò)權(quán)重聯(lián)合訓練,無需預訓練和單獨訓練。DeepFM 上線后 CTR 相對提升3.49%,略好于同期上線的 Wide&Deep。在效果得到驗證后推全了 DeepFM 模型,使其成為線上的全量模型和 baseline 模型。線上效果的提升帶來的是推薦排序模型預測耗時的增加,為了保證不超過最大平響,在不明顯提高模型 loss 的前提下,實驗優(yōu)化 Deep 部分的參數(shù),包括減少 Embedding 的維度和隱藏層的神經(jīng)元個數(shù)與層數(shù)等。通過部署模型上線后觀察效果,模型預測的耗時隨之減少,而且 CTR 也沒有明顯波動,依然明顯高于對照組,說明深度學習的泛化能力較強,即便降低模型的神經(jīng)網(wǎng)絡(luò)配置,依然能較好地擬合樣本。 與 Wide&Deep 和 DeepFM 類似,DCN 將 Wide 部分升級為 Cross 網(wǎng)絡(luò),Cross 網(wǎng)絡(luò)一方面通過顯式的高階特征交叉,另一方面通過層與層之間擬合殘差,能夠更深入地挖掘出非線性特征組合與目標的關(guān)系,更快地達到穩(wěn)定的擬合狀態(tài)。在和 DeepFM 采用相同特征的情況下,實驗 CTR 也和 DeepFM 持平。根據(jù)線上的迭代經(jīng)驗和業(yè)務(wù)特點,嘗試優(yōu)化了 DCN 的模型結(jié)構(gòu)。在 DCN 原始的 Embedding and Stacking 層中,離散型特征在經(jīng)過 Embedding 處理后,與連續(xù)型特征直接拼接在一起,統(tǒng)一輸入進后面的網(wǎng)絡(luò),這樣帶來的不足是:雖然網(wǎng)絡(luò)可以用顯性和隱性的方式學習特征間的有效交叉,但缺少單個特征內(nèi)部信息的挖掘,將這部分壓力轉(zhuǎn)移到了特征工程,從而增加了人工成本。基于充分利用每個特征,通過排序模型自適應(yīng)學習到更多信息的考慮,嘗試對所有特征分別進行擴展。在 DCN 的 Embedding and Stacking 層和網(wǎng)絡(luò)層之間實驗引入特征擴展層,將每個特征從原始的1維擴展到 n 維,與 Embedding 只對離散型特征處理不同,維度擴展也會處理連續(xù)性特征。擴展后的特征在伴隨著維度增加的同時,會將更多自身信息輸入到網(wǎng)絡(luò)層參與高階計算,與只使用原始特征相比,模型可以更深入利用已有特征,節(jié)約了特征工程的人工成本。通過離線實驗,在采用相同特征的情況下,相較 DCN,基于特征擴展的 DCN 上線后實驗 CTR 相對提升1%。 在上述模型迭代的同時,還實驗了 LSTM、GRU 等模型,LSTM 和 GRU 都是基于序列的 next click 模型,模型的結(jié)構(gòu)很簡單,對于一個 Session 中的點擊序列 X=[X1,X2,X3...Xn-1,Xn],依次將 X1,X2,...,Xn-1 輸入到模型中,預測下一個被點擊的是哪一個 Item。首先,序列中的每一個物品 Xt 被轉(zhuǎn)換為 one-hot,隨后轉(zhuǎn)換成其對應(yīng)的 embedding,經(jīng)過 N 層隱含單元后,再經(jīng)過一個全聯(lián)接層得到下一次每個物品被點擊的概率。這些模型的 CTR 都暫未明顯好于 DeepFM,所以都還在實驗階段,沒有成為線上主要模型。 在 DeepFM 和其他深度模型的實踐中,比較容易犯的錯誤是不考慮特征組成和樣本數(shù)量,直接暴力增加模型復雜度,從而導致訓練時間驟增、模型文件變大和線上的預測時間更久,最終引起推薦系統(tǒng)服務(wù)超時。如果特征數(shù)量少、特征工程完善和樣本選取合理,使用簡單的深度學習模型反而能夠達到更好的效果。 2. 在線學習 在線學習利用實時收集的用戶反饋,實時更新模型參數(shù)進行預測,實時反饋用戶行為變化帶來的影響。在線學習相對離線學習可以理解為數(shù)據(jù)集無限大,時間序列無限長,利用樣本數(shù)據(jù)流逐條更新模型,在線學習是 DeepFM 上線后在模型更新方面做的優(yōu)化。之前的模型更新從一周到一天,為了模型能更快的學習到用戶的實時行為,我們將模型的更新周期做到了分鐘級。 這里主要有兩部分工作,一是 Label 及特征的實時獲取,二是模型的實時更新。 對于 Label 及特征的實時獲取是通過每次請求的唯一標識 id 使用服務(wù)端 dump 的特征和客戶端的 Label ( 曝光、點擊 ) 進行 join 生成,這里要注意的是 Label 必須和當次請求的特征 join,如果特征數(shù)據(jù)在 Label 之后有更新,則會產(chǎn)生特征穿越的問題。 模型的實時更新是將實時獲取的樣本累積到一個 batch 后,就進行迭代更新,更新后的模型每隔10分鐘往線上推一次。累計10分鐘在保證捕獲用戶實時行為實效性的前提下,既可以降低工程實現(xiàn)難度,又可以降低樣本的抖動影響,對樣本不均衡的情況可以采取采樣策略進行處理。 3. 排序服務(wù) 排序服務(wù)是以 API 的形式提供,其中: 輸入: Deviceid:用戶唯一標識,在服務(wù)內(nèi)部通過此 id 獲取用戶的屬性及行為特征。 Itemid:這是對用戶待排序的資源 id,在服務(wù)內(nèi)部會獲取到這些資源屬性、熱度、標簽等信息。 Pvid:當次請求的唯一標識,用于關(guān)聯(lián)客戶端和服務(wù)端的日志。 Model-name:模型名稱,指定選用哪個模型進行排序,排序服務(wù)提供了多個模型供選擇。 Model-version:模型版本,和 Model-name 搭配使用,指定同一個模型的哪個版本,這個參數(shù)主要用來進行模型迭代優(yōu)化。 Debug:此參數(shù)用來輸出排序過程中的一些中間結(jié)果。 輸出:Itemid 及其打分。 排序服務(wù)中的多個模型有不同的更新策略,更新周期可配置。排序服務(wù)還依賴于特征服務(wù)獲取用戶和資源的特征,對應(yīng)到不同模型還有不同的特征工程處理。 4. 模型更新 實驗的小流量排序模型經(jīng)過離線驗證,線上可以定時直接熱更新。線上的全量排序模型更新除了離線驗證外,還要在推全之前有一個預上線實驗驗證,確保在預上線實驗組上 CTR 等數(shù)據(jù)沒問題,再將模型全部更新。 5. AB 實驗 在機器學習領(lǐng)域中,AB 實驗是驗證模型最終效果的主要手段。進行 AB 實驗的主要手段是進行用戶分桶,即將用戶分成實驗組和對照組,對實驗組的用戶施以新模型,對照組的用戶施以舊模型。在分桶的過程中,要注意樣本的獨立性和采樣方式的無偏性,確保同一個用戶每次只能分到同一個桶中,在分桶過程中選取 DeviceId 必須是完全隨機的,這樣才能保證桶中的樣本是無偏的。實驗組和對照組的劃分必須是在相同的約束條件下隨機選取 DeviceId。如下圖 a、b、c 的劃分都不正確,其中 a 中實際劃分的用戶超出了實驗約束的用戶群,b 中實驗組用戶正確,但是把剩余的所有用戶作為對照組是不對的,c 中實驗用戶正確,對照組用戶有所擴大也是不對的,只有 d 是正確的。 線上的 AB 主要有三部分,一是實驗及其分桶的配置,二是分桶對應(yīng)的代碼邏輯,三是實驗及分桶的效果數(shù)據(jù)。實驗之間的流量是正交的,每個實驗中多個分桶的流量是互斥的。如我們的排序模型設(shè)置了一個實驗,多個分桶,有2%、5%、10%流量的三個對照組,模型上線時從2%開始逐步擴量進行效果對比驗證。 6. 模型訓練 推薦排序模型的訓練主要基于之家機器學習平臺 AutoPAI。汽車之家 AutoPAI 是一個支持可視化拖曳組件建模,支持上百種機器學習算法組件,支持多個深度學習框架,和 Hadoop、Spark 打通,支持分布式 GPU 訓練深度學習模型的平臺,并且支持在線開發(fā)、自動部署等功能。 我們的簡單模型如 LR、XGBoost 可以直接在界面上拖動數(shù)據(jù)源、特征處理組件、模型組件、驗證組件進行訓練并保存模型,之后進行一鍵部署線上服務(wù)。深度模型支持在線開發(fā)、調(diào)試,之后將調(diào)試好的代碼通過深度學習組件進行提交,選擇 GPU 卡數(shù)進行訓練,訓練完成后可一鍵部署服務(wù)。 7. 可視化 Debug 對模型或策略單次請求效果的驗證,一般上線后通過白名單進行驗證,但這還是要進行代碼或配置的上線,上線一方面是有風險,另一方面一般上線是多個實驗多個功能一起上線,即使一個實驗添加了白名單也有可能受到其他實驗的影響。對此,我們基于代碼 Debug 的思想,把調(diào)試放在程序正式發(fā)布前,我們做了推薦 Debug 系統(tǒng),在實驗上線前就可以通過 Debug 系統(tǒng)進行效果驗證及中間環(huán)節(jié)驗證。 我們的 Debug 平臺最主要的推薦效果驗證輸入有兩部分,一是推薦接口,二是實驗配置。通過更改這兩部分的參數(shù),就可以模擬線上真實返回渲染,并可以輸出這次請求整個鏈路的中間結(jié)果。Debug 平臺還支持對索引、召回、排序等子模塊的直接驗證,可以查詢資源特征、用戶畫像,用戶曝光點擊行為等。Debug 平臺的上線極大的提高了我們的上線效率。 03. 特征及訓練樣本 1. 特征介紹 模型的輸入一般包括:用戶畫像特征、item 特征,上下文特征,交叉特征、位置特征和序列 item 特征,其中: 用戶畫像特征有:用戶自身屬性,如性別、年齡、職業(yè)、地域等;用戶行為,如不同時間窗口的瀏覽時長、點擊、搜索、發(fā)貼、收藏、點贊等行為;基于行為所產(chǎn)生的興趣偏好,如車系、標簽偏好等;基于行為的衍生統(tǒng)計指標,如用戶 ctr、活躍度等。 Item 特征有:item 自身屬性,如標題、正文字數(shù)、圖片個數(shù)等;基于 item 挖掘的特征,如內(nèi)容分類、關(guān)鍵詞、情感、內(nèi)容專業(yè)度、內(nèi)容豐富度、作者影響力等;item 被用戶賦予的行為,如 uv、pv、ctr、收藏、點贊、回復等。 交叉特征有:item 標簽與用戶標簽的匹配度。 2. 特征處理 直接使用原始特征不易于模型擬合,所以傳入模型后還需要進一步處理,具體包括:異常值處理、歸一化和等頻分桶。 異常值處理: 訓練樣本中的特征一般都存在異常值,對于離散型特征,可以將其單獨分配到 one-hot 的一個位置,不會存在全為0的情況,但對于連續(xù)型特征,通常會對其賦默認值,如果為0則該特征不會參與到結(jié)果計算,如果為平均值則可能不符合各個特征的物理含義。為了得到合理的默認值,排序模型通過在特征處理階段,對每個連續(xù)型特征引入不為0的 weight 和 bias,默認值的計算方式為:weight x featurevalue + bias,weight 和 bias 通過模型訓練學到,當出現(xiàn)異常值時,特征值默認等于 bias。通過離線實驗,測試集的 loss 有明顯下降,上線后的 CTR 也優(yōu)于默認取0值或取平均值。 歸一化: 連續(xù)型特征的值分布一般不統(tǒng)一,例如曝光量和 CTR,曝光量取值都大于1,且最大值可能會是幾百萬,而 CTR 的取值區(qū)間為0到1,如果直接輸入到排序模型,分布不均的統(tǒng)計特征會導致訓練波動,不但影響收斂速度,而且最終可能會無法擬合。常規(guī)的歸一化方法包括:min-max、log 和 standard 等,通過離線實驗觀察測試集的 loss,其中 min-max 的效果最好。 等頻分桶: 對于連續(xù)型特征,當線上的特征值出現(xiàn)異常變化的時候,可能會存在泛化性不好或者魯棒性不足的問題。為此引入了等頻分桶,即按樣本特征的分布頻率,為每個特征規(guī)定好多個取值分界線,根據(jù)原始特征值分到不同的桶中,再根據(jù)桶的編號進行 one-hot 處理。深度模型的 NN 部分使用連續(xù)特征時因為長尾分布對最大值做了限制,后來實驗 NN 部分使用離散特征效果更好,也使用了離散特征。 3. 特征表達 我們的排序模型不僅引入了大規(guī)模的稀疏特征,而且實現(xiàn)了多種形式的向量表達。 如基于 item 內(nèi)容分類的 Bert embedding,基于 item 圖像和視頻的 embedding,基于行為的 Graph embedding、LSTM embedding 等。 4. 特征生產(chǎn) 用戶和資源的特征做到了離線加實時,離線特征存儲了用戶和資源最近三個月的行為,實時特征做到了秒級別的更新。特征生產(chǎn)系統(tǒng)架構(gòu)如下: 5. 特征服務(wù) 特征服務(wù)是支持排序服務(wù)的基礎(chǔ)服務(wù),主要輸出用戶和資源的離線及實時特征。 6. 訓練樣本生成 排序服務(wù)在用戶每次請求時調(diào)用特征服務(wù),獲取實時和歷史特征,輸入模型,并輸入到一個 dump 隊列再與客戶端的曝光點擊進行 join 生成模型實時訓練更新的樣本,流程如上圖。 04. 未來計劃的優(yōu)化方向 模型目標:后續(xù)的優(yōu)化目標不僅僅限于 CTR,而是綜合點擊、互動、時長等多個目標同時優(yōu)化,這是未來目標優(yōu)化的趨勢。多目標模型的實現(xiàn)既可以每個目標獨立建模優(yōu)化然后進行融合,也可以通過共享參數(shù)的多目標網(wǎng)絡(luò)實現(xiàn)。 模型表達能力:也就是網(wǎng)絡(luò)結(jié)構(gòu)的升級,如使用 Transformer 進行更好的特征抽取,自動化特征工程,AutoML 自動設(shè)計更好的網(wǎng)絡(luò)模型,和推薦場景很吻合的強化學習等。 特征擴充及信息融合:主要有用戶長短期興趣更精準的 Embedding 表達,文本、圖片、視頻、互動行為等多模態(tài)信息的融合表達等。 汽車之家的推薦系統(tǒng)緊隨前沿技術(shù),在支持內(nèi)部多個推薦場景的同時,對外也有了一定的輸出。未來我們期望汽車之家的推薦系統(tǒng)不只是前沿技術(shù)的應(yīng)用者,更是推動者和創(chuàng)新者。 |
|