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