馬蜂窩推薦排序算法模型的迭代實(shí)現(xiàn)

馬蜂窩推薦系統(tǒng)主要由召回(Match)、排序(Rank)、重排序(Rerank)幾個(gè)部分組成,整體架構(gòu)圖如下:

image
image

在召回階段,系統(tǒng)會(huì)從海量的內(nèi)容庫篩選出符合用戶偏好的候選集(百級(jí)、千級(jí));排序階段在此基礎(chǔ)上,基于特定的優(yōu)化目標(biāo)(如點(diǎn)擊率)對(duì)候選集內(nèi)容進(jìn)行更加精準(zhǔn)的計(jì)算和選擇,為每一條內(nèi)容進(jìn)行精確打分,進(jìn)而從候選集的成百上千條內(nèi)容中選出用戶最感興趣的少量高質(zhì)量?jī)?nèi)容。

本文我們將重點(diǎn)介紹馬蜂窩推薦系統(tǒng)中的核心之一——排序算法平臺(tái),它的整體架構(gòu)如何;為了給用戶呈現(xiàn)更加精準(zhǔn)的推薦結(jié)果,在支撐模型快速、高效迭代的過程中,排序算法平臺(tái)發(fā)揮了哪些作用及經(jīng)歷的實(shí)踐。

Part.2 排序算法平臺(tái)的演進(jìn)

2.1 整體架構(gòu)

目前,馬蜂窩排序算法線上模型排序平臺(tái)主要由通用數(shù)據(jù)處理模塊、可替換模型生產(chǎn)模塊、監(jiān)控與分析模塊三部分組成,各模塊結(jié)構(gòu)及平臺(tái)整體工作流程如下圖所示:

image

image

2.1.1 模塊功能

(1) 通用數(shù)據(jù)處理模塊

核心功能是特征建設(shè)以及訓(xùn)練樣本的構(gòu)建,也是整個(gè)排序算法最為基礎(chǔ)和關(guān)鍵的部分。數(shù)據(jù)源涉及點(diǎn)擊曝光日志、用戶畫像、內(nèi)容畫像等等,底層的數(shù)據(jù)處理依賴 Spark 離線批處理和 Flink 實(shí)時(shí)流處理。

(2) 可替換模型生產(chǎn)模塊

主要負(fù)責(zé)訓(xùn)練集的構(gòu)建、模型的訓(xùn)練以及生成線上配置,實(shí)現(xiàn)模型的無縫同步上線。

(3) 監(jiān)控與分析模塊

主要包括上游依賴數(shù)據(jù)的監(jiān)控、推薦池的監(jiān)控,特征的監(jiān)控與分析,模型的可視化分析等功能。

各個(gè)模塊的功能以及他們之間的交互使用 JSON 配置文件進(jìn)行集成,使模型的訓(xùn)練和上線僅僅需要修改配置就能完成,極大提升了開發(fā)效率,為排序算法的快速迭代打下了堅(jiān)實(shí)的基礎(chǔ)。

2.1.2 主要配置文件類型

配置文件主要分為 TrainConfig、MergeConfig、OnlineConfig、CtrConfig 四類,其作用分別為:

(1)TrainConfig

指訓(xùn)練配置,主要包括訓(xùn)練集配置和模型配置:

  • 訓(xùn)練集配置包括指定使用哪些特征進(jìn)行訓(xùn)練;指定使用哪些時(shí)間段內(nèi)的訓(xùn)練數(shù)據(jù);指定場(chǎng)景、頁面、和頻道等

  • 模型配置包括模型參數(shù)、訓(xùn)練集路徑、測(cè)試集路徑、模型保存路徑等

(2)MergeConfig

指特征配置,包括上下文特征、用戶特征、物品特征、交叉特征的選擇。

這里,我們將交叉特征的計(jì)算方式也實(shí)現(xiàn)了配置化。例如用戶特征中有一些向量特征,內(nèi)容特征也有一些向量特征。當(dāng)我們希望使用某兩個(gè)向量的余弦相似度或者歐式距離作為一個(gè)交叉特征給模型使用時(shí),這種交叉特征的選擇和計(jì)算方式可以直接通過配置實(shí)現(xiàn),并且同步的線上配置中供線上使用。

(3)OnlineConfig

指線上配置,訓(xùn)練數(shù)據(jù)構(gòu)建的過程中自動(dòng)生成供線上使用,包括特征的配置(上下文特征、用戶特征、內(nèi)容特征、交叉特征)、模型的路徑、特征的版本。

(4)CtrConfig

指默認(rèn) CTR 配置,作用為針對(duì)用戶和內(nèi)容的 CTR 特征進(jìn)行平滑處理。

2.1.3 特征工程

從應(yīng)用的視角來看,特征主要包括三類,用戶特征(User Feature)、內(nèi)容特征(Article Feature)、上下文特征(Context Feature)。

如果按獲取的方式又可以分為:

  • 統(tǒng)計(jì)特征(Statistics Feature):包括用戶、內(nèi)容、特定時(shí)間段內(nèi)的點(diǎn)擊量/曝光量/CTR 等

  • 向量特征(Embedding Feature):以標(biāo)簽、目的地等信息為基礎(chǔ),利用用戶點(diǎn)擊行為歷史,使用 Word2Vec 訓(xùn)練的向量特征等;

  • 交叉特征(Cross Feature):基于標(biāo)簽或目的地向量,構(gòu)建用戶向量或物品向量,從而得到用戶與物品的相似度特征等

2.2 排序算法平臺(tái) V1

在排序算法平臺(tái) V1 階段,通過簡(jiǎn)單的 JSON 文件配置,平臺(tái)就能夠?qū)崿F(xiàn)特征的選擇、訓(xùn)練集的選擇、分場(chǎng)景 XGBoost 模型的訓(xùn)練、XGBoost 模型離線 AUC 的評(píng)估、生成線上配置文件自動(dòng)同步上線等功能。
image
image

2.3 排序算法平臺(tái) V2

針對(duì)上面存在的這些問題,我們?cè)谂判蛩惴ㄆ脚_(tái)的監(jiān)控分析模塊增加了數(shù)據(jù)驗(yàn)證、模型解釋的功能,幫助我們對(duì)模型的持續(xù)迭代優(yōu)化提供更加科學(xué)、精準(zhǔn)的依據(jù)。

image
image

2.3.1 數(shù)據(jù)驗(yàn)證(DataVerification)

在算法平臺(tái) V1 階段,當(dāng)模型離線效果(AUC)表現(xiàn)很好,而線上效果不符合預(yù)期時(shí),我們很難排查定位問題,影響模型迭代。

通過對(duì)問題的調(diào)查和分析我們發(fā)現(xiàn),造成線上效果不符合預(yù)期的一個(gè)很重要的原因,可能是目前模型的訓(xùn)練集是基于數(shù)倉每天匯總的一張點(diǎn)擊曝光表得到。由于數(shù)據(jù)上報(bào)延遲等原因,這張離線的點(diǎn)擊曝光表中的一些上下文特征與實(shí)時(shí)的點(diǎn)擊曝光行為可能存在誤差,帶來一些離線和線上特征不一致的問題。

針對(duì)這種情況,我們?cè)黾恿藬?shù)據(jù)驗(yàn)證的功能,將離線構(gòu)建的訓(xùn)練集與線上打印的實(shí)時(shí)特征日志進(jìn)行各個(gè)維度的對(duì)比分析。

具體做法就是以線上的實(shí)時(shí)點(diǎn)擊曝光日志(包含所使用的模型、特征以及模型預(yù)測(cè)分等信息)為基礎(chǔ),為每條實(shí)時(shí)點(diǎn)擊曝光記錄都增加一個(gè)唯一 ID,在離線匯總的點(diǎn)擊曝光表中也會(huì)保留這個(gè)唯一 ID。這樣,針對(duì)一條點(diǎn)擊曝光記錄,我們就可以將離線構(gòu)建的訓(xùn)練集中的特征,與線上實(shí)際使用的特征關(guān)聯(lián)起來,對(duì)線上和離線模型的 AUC、線上和離線模型的預(yù)測(cè)分以及特征的情況進(jìn)行對(duì)比,從而發(fā)現(xiàn)一些問題。

舉例來說,在之前的模型迭代過程中,模型離線 AUC 很高,但是線上效果卻并不理想。通過數(shù)據(jù)驗(yàn)證,我們首先對(duì)比了線上和離線模型 AUC 的情況,發(fā)現(xiàn)存在效果不一致的現(xiàn)象,接著對(duì)比線上和離線模型的預(yù)測(cè)分,并找到線上和離線預(yù)測(cè)分相差最大的 TopK 個(gè)樣本,對(duì)它們的離線特征和線上特征進(jìn)行對(duì)比分析。最后發(fā)現(xiàn)是由于數(shù)據(jù)上報(bào)延遲造成了一些線上和離線上下文特征的不一致,以及線上XGBoost、DMatrix 構(gòu)建時(shí)選的 missingValue 參數(shù)有問題,從而導(dǎo)致了線上和離線模型預(yù)測(cè)分存在偏差。上述問題修復(fù)后,線上 UV 點(diǎn)擊率提升了 16.79%,PV 點(diǎn)擊率提升了 19.10%。

通過數(shù)據(jù)驗(yàn)證的功能和解決策略,我們快速定位到了問題的原因,加速算法模型迭代開發(fā)的過程,提升了線上的應(yīng)用效果。

2.3.2 模型解釋(ModelExplain)

模型解釋可以打開機(jī)器學(xué)習(xí)模型的黑盒,增加我們對(duì)模型決策的信任,幫助理解模型決策,為改進(jìn)模型提供啟發(fā)。關(guān)于模型解釋的一些概念,推薦給大家兩篇文章來幫助理解:《Why Should I Trust You Explaining the Predictions of Any Classifier》、《A Unified Approach to Interpreting Model Predictions》。

在實(shí)際開發(fā)中,我們總是在模型的準(zhǔn)確性與模型的可解釋性之間權(quán)衡。簡(jiǎn)單的模型擁有很好的解釋性,但是準(zhǔn)確性不高;而復(fù)雜的模型提高模型準(zhǔn)確性的同時(shí)又犧牲了模型的可解釋性。使用簡(jiǎn)單的模型解釋復(fù)雜的模型是當(dāng)前模型解釋的核心方法之一。

目前,我們線上模型排序使用的是 XGBoost 模型。但在 XGBoost 模型中,傳統(tǒng)的基于特征重要性的模型解釋方法,只能從整體上對(duì)每個(gè)特征給出一個(gè)重要性的衡量,不支持對(duì)模型的局部輸出解釋,或者說單樣本模型輸出解釋。在這樣的背景下,我們的模型解釋模塊使用了新的模型解釋方法 Shap 和 Lime,不僅支持特征的重要性,也支持模型的局部解釋,使我們可以了解到在單個(gè)樣本中,某個(gè)特征的某個(gè)取值對(duì)模型的輸出可以起到何種程度的正向或負(fù)向作用。

下面通過一個(gè)從實(shí)際場(chǎng)景中簡(jiǎn)化的示例來介紹模型解釋的核心功能。首先介紹一下幾個(gè)特征的含義:

image
image
image
image

我們的模型解釋會(huì)對(duì)單個(gè)樣本給出以下的分析:

  • U0-I1
image
image
  • U0-I2
image
image
  • U0-I3
image
image

如圖所示,模型對(duì)單個(gè)樣本 U0-I2,U0-I3_的預(yù)測(cè)值為 0.094930, 0.073473, 0.066176。針對(duì)單個(gè)樣本的預(yù)測(cè),各個(gè)特征值起到多大的正負(fù)向作用可以從圖中的特征條形帶的長(zhǎng)度看出,紅色代表正向作用,藍(lán)色代表負(fù)向作用。這個(gè)值是由下表中的 shap_value 值決定的:

image
image
image
image

其中,logit_output_value = 1.0 / (1 + np.exp(-margin_output_value)),logit_base_value = 1.0 / (1 + np.exp(-margin_base_value)),output_value 是 XGBoost 模型輸出值;base_value 是模型期望輸出;近似等于整個(gè)訓(xùn)練集中模型預(yù)測(cè)值的均值;shap_value 是對(duì)該特征對(duì)預(yù)測(cè)結(jié)果起到的正負(fù)向作用的一個(gè)衡量。

模型預(yù)測(cè)值logit_output_value,0.094930>0.073473>0.066176,所以排序結(jié)果為 I1> I2>I3,U0-I1 的預(yù)測(cè)值為0.094930,特征 doubleFlow_article_ctr_7_v1=_I1_ctr起到了 0.062029 的正向作用,使得預(yù)測(cè)值相較于基值,有增加的趨勢(shì)。同理,ui_cosine_70=0.894006,起到了 0.188769 的正向作用。

直觀上我們可以看出,內(nèi)容 7 天點(diǎn)擊率以及用戶-內(nèi)容相似度越高,模型預(yù)測(cè)值越高,這也是符合預(yù)期的。實(shí)際場(chǎng)景中,我們會(huì)有更多的特征。

Shap 模型解釋最核心的功能是支持局部單樣本分析,當(dāng)然它也支持全局的分析,如特征重要性,特征正負(fù)向作用,特征交互等。下圖是對(duì)特征 doubleFlow_article_ctr_7_v1 的分析,可以看出,內(nèi)容 7 天點(diǎn)擊率小于閾值對(duì)模型的預(yù)測(cè)起負(fù)向作用,大于閾值對(duì)模型的預(yù)測(cè)起正向作用。

image
image

Part.3 近期規(guī)劃

近期,排序算法平臺(tái)將繼續(xù)提升訓(xùn)練模型的線上應(yīng)用效果,并把特征的實(shí)時(shí)作為工作重點(diǎn),快速反映線上的變化。

當(dāng)前排序算法平臺(tái)使用的 XGBoost 模型優(yōu)點(diǎn)是不需要太多的特征工程,包括特征缺失值處理、連續(xù)特征離散化、交叉特征構(gòu)建等。但也存在許多不足,包括:

  1. 很難處理高緯稀疏特征

  2. 需要加載完整的數(shù)據(jù)集到內(nèi)存進(jìn)行模型的訓(xùn)練,不支持在線學(xué)習(xí)算法,很難實(shí)現(xiàn)模型的實(shí)時(shí)更新。

針對(duì)這些問題,后期我們將進(jìn)行 Wide&Deep,DeepFM 等深度模型的建設(shè),如下圖所示:

image
image

另外,當(dāng)前的模型每次都是預(yù)測(cè)單個(gè) Item 的分?jǐn)?shù),然后進(jìn)行排序取一刷的結(jié)果,(Learning to rank,pointwise)。后期我們希望可以實(shí)現(xiàn)一次給用戶推薦一刷的結(jié)果(Learning to rank,listwise),給用戶帶來更加實(shí)時(shí)、準(zhǔn)確的推薦結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容