日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

widedeep 在贝壳推荐场景的实践

發(fā)布時間:2024/1/23 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 widedeep 在贝壳推荐场景的实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文主要向大家介紹 wide & deep 模型在貝殼推薦場景中的實踐。

"推薦" 對于我們來說并不陌生,已經(jīng)滲透到了我們生活中的方方面面,比如淘寶的商品推薦,網(wǎng)易云的音樂推薦,抖音的短視頻推薦等。在房產(chǎn)O2O領(lǐng)域,同樣也需要推薦。無論在哪個推薦領(lǐng)域,推薦系統(tǒng)面臨的一個共同挑戰(zhàn)是如何同時滿足推薦結(jié)果的準確性和多樣性。準確性要求推薦的內(nèi)容與用戶高度相關(guān),推的精準;多樣性則要求推薦內(nèi)容更加新穎,讓用戶具有新鮮感。設(shè)計合理的推薦策略,兼顧內(nèi)容準確性和多樣性,提升線上推薦效果,一直是我們算法同學(xué)的工作重點。本文向大家介紹wide & deep 模型的設(shè)計理念與基本原理,以及該 模型在我們的業(yè)務(wù)場景中的實踐與效果。本文分享的結(jié)構(gòu)如下:

  • wide & deep 模型概述

  • wide & deep 模型在貝殼推薦場景的實踐

  • 階段總結(jié)與未來規(guī)劃

wide & deep 模型概述

wide & deep模型是Google在2016年發(fā)布的一類用于分類和回歸的模型。該模型應(yīng)用到了Google Play的應(yīng)用推薦中,有效的增加了Google Play的軟件安裝量。目前wide & deep模型已經(jīng)開源,并且在TensorFlow上提供了高級API。下面將主要圍繞Google發(fā)布的論文《Wide & Deep Learning for Recommender Systems》來介紹 wide&deep 模型的原理和框架。

文中設(shè)計了一種融合淺層模型(wide)和深層模型(deep)進行聯(lián)合訓(xùn)練的框架,綜合利用淺層模型的記憶能力和深層模型的泛化能力,實現(xiàn)單模型對推薦系統(tǒng)準確性和多樣性的兼顧。模型框架如圖 Figure 1 所示。

在wide & deep模型中包括兩部分,分別為wide模型和deep模型,其中wide部分是一個廣義線性模型, 上圖中的左側(cè)部分,deep模型是一個前饋神經(jīng)網(wǎng)絡(luò),如上圖右側(cè)所示。wide & deep模型的思想來源是,模仿人腦有不斷記憶并且泛化的過程,將線性模型(用于記憶)和深度神經(jīng)網(wǎng)絡(luò)模型(用于泛化)相結(jié)合,汲取各自優(yōu)勢,從而達到整體效果的最優(yōu)。

wide & deep模型旨在使得訓(xùn)練得到的模型能夠同時兼顧記憶(Memorization)與泛化(Generalization)能力:

  • Memorization:模型能夠從歷史數(shù)據(jù)中學(xué)習到高頻共現(xiàn)的特征組合,發(fā)掘特征之間的相關(guān)性,通過特征交叉產(chǎn)生特征相互作用的“記憶”,高效可解釋。但要泛化,則需要更多的特征工程。

  • Generalization:代表模型能夠利用相關(guān)性的傳遞性去探索歷史數(shù)據(jù)中從未出現(xiàn)過的特征組合,通過embedding的方法,使用低維稠密特征輸入,可以更好的泛化訓(xùn)練樣本中從未出現(xiàn)的交叉特征。

我們分別來看一下wide部分和deep部分:

Wide部分?就是我們熟知的LR線性模型,這部分主要用作學(xué)習樣本中特征的共現(xiàn)性,達到 “記憶” 的目的。該模型的表達式如下:

其中,y是預(yù)估值,x表示特征向量,w為模型參數(shù), b是偏置項。

特征集合包括原始特征和轉(zhuǎn)換后的特征,其中交叉特征在wide部分十分重要,能夠捕捉到特征間的交互,因此通常會對稀疏的特征進行交叉特征轉(zhuǎn)換,定義如下:

其中是一個布爾變量,當?shù)趥€特征是第個轉(zhuǎn)換的一部分時為1,否則為0。舉個二元特征來說,交叉特征轉(zhuǎn)換(e.g :?),只有當和同時為1時,轉(zhuǎn)換結(jié)果才為1,否則為0。因此,通過特征之間的交叉變換,便捕獲了二元特征之間的相關(guān)性,為廣義線性模型增加了非線性。

Deep部分是一個前饋神經(jīng)網(wǎng)絡(luò)。該部分的輸入,通常是一些稠密的連續(xù)特征,對于一些高維的稀疏特征(id類等特征),首先會轉(zhuǎn)換成低維且稠密的向量,就是大家常說的embeding vector,然后將這些特征拼接成一個大的稠密矩陣,再喂入第一層。在訓(xùn)練過程中通過優(yōu)化損失函數(shù)不斷迭代更新,每個隱藏層執(zhí)行下面的運算:

其中l(wèi)是隱層的標號;f是激活函數(shù),Google的論文中使用的是ReLU。

最后通過?聯(lián)合訓(xùn)練?的方式將 wide 模型的輸出和 deep 模型的輸出合并到一起。這里要重點區(qū)別聯(lián)合訓(xùn)練和集成學(xué)習的差別。集成學(xué)習是多模型分別獨立訓(xùn)練,最后再將結(jié)果進行融合;而聯(lián)合訓(xùn)練會將wide和deep模型組合在一起,在訓(xùn)練時同時優(yōu)化所有參數(shù),并且進行加權(quán)求和,根據(jù)最終的loss計算出gradient,反向傳播到Wide和Deep兩部分中,分別訓(xùn)練自己的參數(shù)。也就是說,wide & deep 模型的權(quán)重更新會受到 wide 側(cè)和 deep 側(cè)對模型訓(xùn)練誤差的共同影響。在論文中,wide部分是使用L1正則化的Follow-the-regularized-leader(FTRL)算法進行優(yōu)化,deep部分使用的是AdaGrad完成優(yōu)化。

到此對 wide & deep 模型結(jié)構(gòu)的講解就結(jié)束了,它的核心思想是結(jié)合線性模型的記憶能力和 DNN 模型的泛化能力,從而提升模型的整體性能,也因此能夠同時兼顧推薦的準確性和多樣性。

wide & deep 模型在貝殼推薦場景的實踐

我們的推薦系統(tǒng)中,主要分為兩大階段:召回和排序。如圖 Figure 2 所示,其中召回階段負責從數(shù)據(jù)存儲系統(tǒng)中篩選出與用戶相關(guān)的一些房源,排序階段負責對這些召回的房源進行精準的排序和打分。

我們將wide&deep模型應(yīng)用在了貝殼首頁推薦場景下的排序階段,優(yōu)化目標定義為推薦 點擊率。排序階段模型的搭建主要包括了樣本構(gòu)建、特征工程、模型離線訓(xùn)練及線上化,其中樣本與特征是整個機器學(xué)習中最重要的兩個環(huán)節(jié),直接決定了模型效果的上限。接下來分別介紹下這幾個部分:

樣本構(gòu)建

推薦排序模型的目標是預(yù)測用戶是否點擊,我們的訓(xùn)練樣本采樣自用戶在首頁場景下對房源卡片的瀏覽和點擊數(shù)據(jù)。

原始樣本是一個三元組,包括userid,itemid和label。其中l(wèi)abel的定義如下:

  • 正樣本:用戶點擊的房源。

  • 負樣本:用戶點擊最大位置以上曝光未點擊的房源;從未點擊的用戶部分曝光未點擊的房源。

label為1時,代表用戶點擊,為0時代表用戶曝光未點擊。

在首頁場景下的正負樣本比例在1:12,為了解決正負樣本的不均衡問題,我們對負樣本進行下采樣,將正負比例控制在了1:8。在離線訓(xùn)練時,我們也嘗試對于商機樣本進行一定程度的加權(quán),使得模型能夠更充分的學(xué)到這部分樣本的特征。

此外,我們還對訓(xùn)練樣本進行了清洗,去除掉?Noise樣本,這里的Noise樣本指的是特征值近似或相同的情況下,分別對應(yīng)正負兩種樣本。在我們的業(yè)務(wù)場景下,用戶在不同時間對同一房源可能會存在不同的行為,導(dǎo)致采集的樣本中有正有負,而特征只存在微小的差異,模型是很難學(xué)到微小的特征差異對結(jié)果帶來的改變的,此類樣本送入到模型中會產(chǎn)生 "歧義"。因此,我們將Noise樣本進行清洗,去掉沖突,減少對模型的干擾。

特征工程

特征工程主要包括特征構(gòu)建,特征分析,特征處理,以及特征選擇等。特征構(gòu)建也主要是圍繞用戶和房源這兩個角色構(gòu)建相關(guān)的特征。我們主要用到了以下的特征:

  • 用戶特征:注冊時長、上一次訪問距今時長等基礎(chǔ)特征,最近3/7/15/30/90天活躍/瀏覽/關(guān)注/im數(shù)量等行為特征,以及畫像偏好特征和轉(zhuǎn)化率特征。

  • 房源特征:價格、面積、居室、樓層等基礎(chǔ)特征,是否地鐵房/學(xué)區(qū)房/有電梯/近醫(yī)院等二值特征,以及熱度值/點擊率等連續(xù)特征。

  • 交叉特征:將畫像偏好和房源的特征進行交叉,主要包含這幾維度:價格、面積、居室、城區(qū)、商圈、小區(qū)、樓層級別的交叉。交叉值為用戶對房源在該維度下的偏好值。

在構(gòu)建完特征,拿到一份數(shù)據(jù)集后,需要先對數(shù)據(jù)進行EDA分析,包括查看數(shù)據(jù)的統(tǒng)計分布、類別概況與取值范圍等。對原始數(shù)據(jù)有了初步的認識與了解后,我們會進行特征處理將特征轉(zhuǎn)化為更容易被模型學(xué)習的數(shù)據(jù)形式,主要的特征分析和處理過程如下:

缺失值與異常值處理:首先我們會進行特征的缺失值分析,分析其缺失、異常、為0的比例,根據(jù)特征的類型(離散/連續(xù))與缺失的比例,進行不同方式的缺失值填充。此外,通過對樣本特征進行EDA分析可知,有些特征存在異常值,導(dǎo)致整體的數(shù)據(jù)分布出現(xiàn)嚴重偏差,這里通過四分位距(IQR)對異常值進行檢測,并將異常值進行截斷。

等頻分桶處理:對于一些連續(xù)特征,例如價格、面積等,我們對其分布進行畫圖分析。如圖 Figure 3 所示, 這里以價格特征為例:

通過畫圖分析可知,價格整體呈長尾分布,這就導(dǎo)致大部分樣本的特征值都集中在一個小的取值范圍內(nèi),使得樣本特征的區(qū)分度減小。因此,我們將這類連續(xù)特征進行等頻分桶,保證樣本的分布在每個區(qū)間是均勻的,從而保證樣本之間的區(qū)分度和數(shù)值的穩(wěn)定性。

此外,不同城市下的分布區(qū)間存在較大差異,如上圖中,天津的價格區(qū)間主要是分布在50-150萬,北京的價格區(qū)間主要是分布在100-350萬,如果對整體的訓(xùn)練集做等頻分桶,會導(dǎo)致不同城市下的特征存在偏差。針對這一問題,我們做特征處理時,是分城市進行處理的,從而保證每個城市下的特征都是均勻分布的。

歸一化處理:對取值較大的連續(xù)值特征使用了最大最小歸一化方法,將特征值都轉(zhuǎn)化為0-1之間的數(shù)值。該方法能夠使得特征之間擁有統(tǒng)一的標準,提升特征的區(qū)分度,并且將數(shù)據(jù)歸一化到0到1之間的數(shù)據(jù),能夠加快模型的訓(xùn)練速度,實驗也證明模型效果確實有顯著提升。

低頻過濾:對于離散型特征,我們對其取值分布進行統(tǒng)計,圖 Figure 4 中,以居室和樓層特征為例:

通過對居室和樓層級別進行分析可知,臥室數(shù)量大部分為兩居、三居。中樓層的房源最多,而底層和頂層的房源非常少。通過對此類特征的統(tǒng)計,我們能夠清楚的看出特征值的頻率分布情況,有些類別的取值比較低頻,存在分布不均的情況,因此我們將這部分特征進行了低頻過濾處理,將出現(xiàn)頻次小于閾值的值歸為一類。

embedding:對于一些高維稀疏的id類特征,例如小區(qū),商圈id等,可以作為deep模型的embedding輸入,通過embeding層轉(zhuǎn)換成低維且稠密的向量。降維后的特征具有較強的“擴展能力”,能夠探索歷史數(shù)據(jù)中從未出現(xiàn)過的特征組合,增強模型的表達能力。

這里需要注意的是,一些id類特征維度很高,呈長尾分布,可以將這部分特征進行低頻過濾,降維后再放入embedding中。

模型離線訓(xùn)練與線上化

離線訓(xùn)練?經(jīng)過上述的樣本構(gòu)建與特征工程,生成了訓(xùn)練集,作為wide & deep的訓(xùn)練樣本。我們使用的模型結(jié)構(gòu)如圖Figure 5所示,采用了三層的網(wǎng)絡(luò)結(jié)構(gòu)。

image

圖中的Hidden Layers為三個全連接層,每個layer后面連接Relu激活函數(shù),訓(xùn)練過程中,wdl是采用聯(lián)合訓(xùn)練的方式,將wide和deep模型組合在一起,在訓(xùn)練時同時優(yōu)化所有參數(shù),并且在訓(xùn)練時進行加權(quán)求和,根據(jù)最終的loss計算出gradient,反向傳播到Wide和Deep兩部分中,分別訓(xùn)練自己的參數(shù)。

模型訓(xùn)練過程中,我們將數(shù)據(jù)集按照時間順序切分,采用7天的數(shù)據(jù)作為訓(xùn)練集,1天的作為測試集。

在訓(xùn)練期間,wide側(cè)的輸入包含了一些交叉特征、離散特征及部分連續(xù)特征。deep側(cè)的輸入,主要是一些稠密的連續(xù)特征,我們也嘗試了將城市、城區(qū)、商圈等id特征進行embedding,但沒有取得效果上的提升,猜測是由于模型對這部分特征沒有學(xué)到很好的表達,無法發(fā)揮出embedding的優(yōu)勢,目前我們還在研究和探索好的embedding特征,也期待能和大家一起討論。

模型調(diào)優(yōu)?為了防止模型過擬合。我們加入了dropOut 與 L2正則;為了加快模型的收斂,引入了Batch Normalization(BN);并且為了保證模型訓(xùn)練的穩(wěn)定性和收斂性,嘗試不同的learning rate(wide側(cè)0.001,deep側(cè)0.01效果較好)和batch_size(目前設(shè)置的2048);在優(yōu)化器的選擇上,我們對比了SGD、Adam、Adagrad等學(xué)習器,最終選擇了效果最好的Adagrad。實驗證明,通過參數(shù)的調(diào)整,能夠明顯的影響模型的訓(xùn)練效果。

線上化?模型訓(xùn)練和驗證后,需要將它進行線上化,我們采用了TensorFlow Serving服務(wù)器。對于線上特征和離線特征的一致性問題,采取了redis存儲的方式,將離線特征處理的參數(shù)存儲在redis中,并且在上線之前,我們會進行特征一致性檢驗。為了提升模型的預(yù)測性能,我們使用多線程并行化的方式構(gòu)造tf-serving請求,最終能在10ms左右返回120個房源的預(yù)測結(jié)果。

線上效果

我們在10月中旬上線第一版wdl排序模型,線上效果如下:

image

Figure 6 和Figure 7 分別對應(yīng)線上CTR 和CVR的提升效果。第一版模型上線后,對比對照組CTR相對提升6.08%,CVR相對提升15.65%。目前我們正在探索新的特征,以及在樣本和特征工程上嘗試不同的方法,進行模型的二期優(yōu)化,提升模型的離線auc,爭取給線上效果帶來進一步的提升。

階段總結(jié)和未來規(guī)劃

本文主要介紹了深度學(xué)習模型 wide&deep 在貝殼排序場景中的實踐,包括根據(jù)業(yè)務(wù)場景構(gòu)建樣本、特征,以及搭建模型等工作,在線上也取得了正向收益。

目前我們正在進行模型的二期優(yōu)化,也在的不斷總結(jié)和嘗試。對于接下來的優(yōu)化方向,主要總結(jié)為以下幾個方面:

  • 樣本精細化采樣代替隨機采樣(包括分城市、分用戶群體的采樣)。

  • 為wide側(cè)挖掘更多有區(qū)分能力的特征,deep側(cè)加入有效的embedding特征。

  • 引入實時特征,確保房源和用戶特征最新和最全。

  • 優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu),提升網(wǎng)絡(luò)學(xué)習能力。

  • 優(yōu)化模型的訓(xùn)練效率,加快線上模型的更新速度,提升線上效果。

  • 嘗試gAUC、MAP等評估指標,保證離線效果提升與線上效果提升的一致性。

此外,深度學(xué)習模型在推薦系統(tǒng)中的應(yīng)用還有更多價值等待我們一起去發(fā)掘,這條算法之路,還是十分漫長的,也希望能和大家一起討論,共同學(xué)習。

參考資料

[1]?https://arxiv.org/pdf/1606.07792.pdf

[2]?https://www.tensorflow.org/serving

總結(jié)

以上是生活随笔為你收集整理的widedeep 在贝壳推荐场景的实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。