机器学习模型在携程海外酒店推荐场景中的应用
導(dǎo)讀
?
?
互聯(lián)網(wǎng)企業(yè)的核心需求是“增長(zhǎng)”,移動(dòng)互聯(lián)時(shí)代下的在線旅游業(yè)也不例外。隨著大數(shù)據(jù)、云計(jì)算和人工智能等技術(shù)的不斷進(jìn)步,通過算法和模型來(lái)實(shí)現(xiàn)增長(zhǎng)已成為核心。
?
近年來(lái)推薦系統(tǒng)迅速崛起,主要解決在信息過載的情況下,幫助用戶高效獲取感興趣的信息,同時(shí)幫助企業(yè)最大限度的吸引用戶、留存用戶、增加用戶黏性、提高用戶轉(zhuǎn)化率。因此個(gè)性化的推薦服務(wù)對(duì)于在線旅游業(yè)也變得非常重要,通過推薦能夠?qū)⒂脩魪谋姸嗟穆眯羞x擇中解放出來(lái),指導(dǎo)用戶快速找到感興趣的項(xiàng)目,大大簡(jiǎn)化用戶的旅行計(jì)劃和購(gòu)買。
?
在線旅游服務(wù)商 (OTA)提供的應(yīng)用中包含酒店、航班、旅游產(chǎn)品、攻略等各個(gè)環(huán)節(jié)和產(chǎn)品。其中酒店涉及到的推薦場(chǎng)景較多,例如城市熱門酒店推薦、附近同類型酒店推薦、機(jī)票頁(yè)酒店交叉推薦、Meta著陸頁(yè)相似酒店推薦、信息流推薦等。大部分場(chǎng)景都實(shí)現(xiàn)了個(gè)性化的推薦服務(wù),其核心就是一組酒店與一組用戶相匹配的挑戰(zhàn)。
?
推薦準(zhǔn)確性取決于如何利用可用信息,這些信息主要包括物品信息(I)、用戶信息(U)及上下文信息(C)等,例如給定的酒店特征、酒店的位置吸引力、用戶的購(gòu)買歷史等。將這些信息構(gòu)建一個(gè)函數(shù) f(U,I,C),預(yù)測(cè)用戶對(duì)特定候選酒店的喜好程序,再根據(jù)喜好程度對(duì)所有候選酒店進(jìn)行排序,生成推薦列表。見圖1推薦系統(tǒng)邏輯框架。
?
推薦系統(tǒng)排序模型在推薦系統(tǒng)中占據(jù)絕對(duì)核心的地位,很多公司也都在提出并嘗試一些前沿的算法和推薦模型。而機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型正在變得越來(lái)越復(fù)雜,將這種復(fù)雜模型推上線,模型響應(yīng)速度就可能變得很慢,因此對(duì)推薦系統(tǒng)的數(shù)據(jù)流和工程實(shí)現(xiàn)產(chǎn)生新的挑戰(zhàn)。
?
如何做到海量數(shù)據(jù)的實(shí)時(shí)處理、特征的實(shí)時(shí)提取、線上模型服務(wù)過程的數(shù)據(jù)實(shí)時(shí)獲取以及工程能力與技術(shù)方案的平衡等,成為模型上線的重要挑戰(zhàn)。本文主要探討OTA酒店推薦方面常用的在線部署模型以及技術(shù)架構(gòu),并從核心之外的角度審視推薦系統(tǒng)的不同技術(shù)模塊及優(yōu)化思路。
?
圖1 推薦系統(tǒng)邏輯框架
?
一、酒店推薦系統(tǒng)的技術(shù)架構(gòu)
?
?
實(shí)際推薦系統(tǒng)中主要解決的問題可以分為兩類,數(shù)據(jù)部分以及算法模型部分。其中數(shù)據(jù)部分融合了數(shù)據(jù)離線批處理、實(shí)時(shí)流處理的數(shù)據(jù)流框架。算法模型部分則是集訓(xùn)練 (training)、評(píng)估 (evaluation)、部署 (deployment)、線上推斷 (online inference) 為一體的模型框架。目前通用的推薦系統(tǒng)技術(shù)架構(gòu)如圖2所示。
?
圖2 推薦系統(tǒng)的技術(shù)架構(gòu)示意圖
?
?
1.1 數(shù)據(jù)部分
推薦系統(tǒng)的數(shù)據(jù)部分主要負(fù)責(zé)用戶、物品、上下文的信息收集與處理。并且按實(shí)時(shí)性強(qiáng)弱,分別在三種平臺(tái)上進(jìn)行處理。客戶端是最接近用戶的環(huán)節(jié),也是能夠?qū)崟r(shí)收集用戶會(huì)話內(nèi)行為及上下文特征的地方,這些特征隨http請(qǐng)求一起到達(dá)服務(wù)器端是常用的請(qǐng)求推薦結(jié)果的方式。
?
隨著Storm、Spark Streaming、Flink等流計(jì)算平臺(tái)的日益成熟,利用流計(jì)算平臺(tái)進(jìn)行準(zhǔn)實(shí)時(shí)的特征處理已經(jīng)成為當(dāng)前推薦系統(tǒng)的主要模式。流計(jì)算平臺(tái)并非完全實(shí)時(shí)的平臺(tái),每次需要等待并處理一小批日志,以流的形式進(jìn)行微批處理(mini batch),系統(tǒng)可能無(wú)法在3分鐘內(nèi)把session內(nèi)部的行為歷史存儲(chǔ)到特征數(shù)據(jù)庫(kù)(如Redis)中。但它的優(yōu)勢(shì)是能夠進(jìn)行一些簡(jiǎn)單的特征統(tǒng)計(jì)的計(jì)算,比如一個(gè)物品在該時(shí)間窗口內(nèi)的曝光次數(shù),點(diǎn)擊次數(shù)、一個(gè)用戶的頁(yè)面瀏覽時(shí)長(zhǎng)等。
?
大數(shù)據(jù)離線數(shù)據(jù)處理主要是利用Spark等分布式批處理計(jì)算平臺(tái)對(duì)全量特征進(jìn)行計(jì)算和抽取。主要用于模型訓(xùn)練和離線評(píng)估,以及將特征保存入特征數(shù)據(jù)庫(kù),供之后的線上推薦模型使用。
?
酒店推薦系統(tǒng)中的實(shí)時(shí)特征部分主要來(lái)源于用戶的實(shí)時(shí)點(diǎn)擊行為數(shù)據(jù)和一些上下文信息(如GPS獲得的地點(diǎn)信息等),通過Storm或Flink進(jìn)行準(zhǔn)實(shí)時(shí)流處理,將用戶實(shí)時(shí)行為數(shù)據(jù)解析入特征數(shù)據(jù)庫(kù)Redis。
?
離線特征部分主要包含用戶和酒店兩部分的特征。其中用戶離線特征主要由用戶畫像(CRM)提供,包含數(shù)據(jù)庫(kù)中用戶的訂單和瀏覽歷史信息等,并且嚴(yán)格遵守歐盟通用數(shù)據(jù)保護(hù)條例(GDPR)。酒店離線特征主要包含酒店的基礎(chǔ)信息,如星級(jí)、評(píng)分等。由于特征維度及樣本量較大,離線特征數(shù)據(jù)的清洗與預(yù)處理通常在Spark平臺(tái)上進(jìn)行,后將處理好的特征數(shù)據(jù)落入HDFS的Hive表并同步至Redis緩存中。離線特征與實(shí)時(shí)特征合并供線上模型使用。下面代碼展示Hive表數(shù)據(jù)同步Redis的方法:
?
?
1.2 模型部分
?
模型部分是推薦系統(tǒng)的主體,一般由召回層、排序?qū)印⒀a(bǔ)充策略與算法層組成。召回層一般利用高效的召回規(guī)則、算法或者簡(jiǎn)單的模型,快速?gòu)暮A康暮蜻x集中召回用戶可能感興趣的物品。排序?qū)永门判蚰P蛯?duì)篩選的候選集進(jìn)行精排序。排序?qū)邮峭扑]系統(tǒng)產(chǎn)生效果的重點(diǎn),后面部分將重點(diǎn)介紹一些主流推薦模型和酒店推薦上的應(yīng)用。
?
補(bǔ)充策略與算法層也被稱為再排序?qū)?#xff0c;再將推薦列表返回用戶之前,根據(jù)新鮮度、多樣性等指標(biāo)結(jié)合補(bǔ)充策略與算法進(jìn)行一定調(diào)整,最終形成用戶可見的推薦列表。從召回所有候選物品集,到最后產(chǎn)生推薦列表,這一過程一般稱為模型服務(wù)過程。
?
在線環(huán)境進(jìn)行模型服務(wù)之前,需要通過模型訓(xùn)練確定模型結(jié)構(gòu)及參數(shù)值,并生成模型文件。另外,為了評(píng)估推薦模型的效果,方便模型的迭代優(yōu)化,推薦模型部分有離線評(píng)估和線上A/B測(cè)試等多種線上線下評(píng)估模式。
?
二、酒店推薦系統(tǒng)的工程實(shí)現(xiàn)
?
?
如何將離線訓(xùn)練好的模型部署在線上的生成環(huán)境,進(jìn)行線上實(shí)時(shí)推斷,一直是業(yè)界難點(diǎn)。目前酒店推薦場(chǎng)景中主要用到兩種部署推薦模型的主流方法,一是利用PMML轉(zhuǎn)換并部署模型,二是Tensorflow Serving方式。
?
2.1 利用PMML轉(zhuǎn)換并部署模型
?
酒店推薦場(chǎng)景中由于實(shí)時(shí)數(shù)據(jù)量較大,通常采用SOA框架實(shí)現(xiàn)分布式服務(wù),完成模型服務(wù)過程。但絕大部分SOA框架都是Java或C++語(yǔ)言編寫,而預(yù)測(cè)模型大多是基于Python語(yǔ)言。因此常用預(yù)測(cè)模型標(biāo)記語(yǔ)言(Predictive ModelMarkup Language,以下簡(jiǎn)稱PMML)重新實(shí)現(xiàn)算法模型,然后將模型封裝成類,通過JAVA調(diào)用這個(gè)類來(lái)進(jìn)行預(yù)測(cè)。由python封裝的模型可以通過sklearn中的sklearn2pmml函數(shù)實(shí)現(xiàn)PMML文件轉(zhuǎn)換。XGBoost模型需要JPMML-XGBoost命令行轉(zhuǎn)換工具,轉(zhuǎn)換命令為:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ?
XGBoost模型需要生成.model模型文件和 .fmap特征映射文件。.model文件可以通過save_model函數(shù)生成。
?
2.2 Tensorflow Serving
?
上面的方法也適用于Tensorflow生成的模型,但由于Tensorflow模型文件往往較大,且PMML文件無(wú)法優(yōu)化,使用起來(lái)比較麻煩。本質(zhì)上講,Tensorflow Serving的工作流程和PMML類工具的流程是一致的。不同之處在于,Tensorflow定義了自己的模型序列化標(biāo)準(zhǔn)。
?
利用Tensorflow自帶的模型序列化函數(shù)可將訓(xùn)練好的模型參數(shù)和結(jié)構(gòu)保存至某文件路徑。路徑下包括variables文件夾和saved_model.pbtxt文件。variable文件夾下包含各個(gè)變量的狀態(tài)(斷點(diǎn)),有*.data和*.index兩類文件。*.data記錄變量的內(nèi)容。*.index文件用于將變量名映射到*.data中的變量數(shù)據(jù)。.pbtxt文件是包含SavedModel、MetaGraphs、Graphs、簽名等的二進(jìn)制protobuf。模型文件通常由自身的Python API生成,然后由Tensorflow的客戶端庫(kù)(如JAVA或C++庫(kù))來(lái)加載模型并進(jìn)行在線預(yù)測(cè)。以下代碼展示了使用SavedModelBuilder 構(gòu)建 SavedModel 的典型方法:
?
?
添加Tensorflow相關(guān)依賴后Java導(dǎo)入已保存的模型方法為:
?
?
具體的酒店實(shí)時(shí)推薦工程架構(gòu)如圖3所示。
?
圖3 酒店實(shí)時(shí)推薦工程架構(gòu)
?
三、Embedding技術(shù)在酒店推薦中的應(yīng)用
?
?
Embedding方法已成為應(yīng)用最廣泛的深度學(xué)習(xí)技術(shù)。通過低維的向量表示一個(gè)對(duì)象,可以同時(shí)表達(dá)對(duì)象之間的潛在關(guān)系,即向量之間的距離反應(yīng)對(duì)象之間的相似性。該方法的流行始于自然語(yǔ)言處理領(lǐng)域?qū)τ谠~向量生成問題的研究,發(fā)展到其他應(yīng)用領(lǐng)域的物品也可以通過某種方式生成其向量化表示,例如旅游領(lǐng)域?qū)频赀M(jìn)行Embedding,并對(duì)酒店進(jìn)行相似度計(jì)算,因此成為常用的推薦系統(tǒng)召回層技術(shù)。
?
Embedding技術(shù)中最著名的就是Word2vec模型,用于生成對(duì)詞的向量表達(dá)。而對(duì)于用戶購(gòu)買序列中的商品或者用戶瀏覽序列中的酒店使用的Embedding方法稱為Item2vec方法。
?
在酒店召回層我們采用了酒店Embedding技術(shù)計(jì)算相似度,召回候選酒店集。在Word2vec方法中詞的上下文即為鄰近詞的序列,而詞的序列其實(shí)等價(jià)于一系列連續(xù)操作的item序列。因此,我們將用戶一次瀏覽會(huì)話中連續(xù)點(diǎn)擊的酒店序列作為訓(xùn)練語(yǔ)料,學(xué)習(xí)酒店的向量表示。抽取用戶的連續(xù)點(diǎn)擊如表1所示。酒店間的共現(xiàn)為正樣本,且按照酒店的頻率分布進(jìn)行負(fù)樣本采樣。
?
表1 用戶在同一個(gè)會(huì)話下的酒店連續(xù)點(diǎn)擊記錄
| uid | sessionid | hotelid |
| 001 | 1 | 1701976, 480887, 1525866, 846838 |
| 002 | 4 | 686430,1542818,993356,1525732,1525866,688217,1701976,1007025 |
?
酒店嵌入矩陣(Embeddingmatrix)的行數(shù)為酒店的總個(gè)數(shù),列數(shù)為嵌入維度。酒店相似度使用余弦相似度。將相似度得分從高到低排序,選取TopN酒店做候選酒店。酒店向量生成使用的是Word2vec模型中的Skip-Gram模型。Skip-Gram神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練一個(gè)帶有單個(gè)隱含層的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)來(lái)執(zhí)行某個(gè)預(yù)測(cè)任務(wù),訓(xùn)練好的模型并不用于實(shí)際預(yù)測(cè),其真正目的是獲取輸入層-隱含層的權(quán)重矩陣,將這些權(quán)重值視為詞向量。
?
圖4展示了當(dāng)skip_window = 2時(shí)(即僅選輸入詞前后各兩個(gè)詞和輸入詞進(jìn)行組合),訓(xùn)練樣本是如何產(chǎn)生的(藍(lán)色代表輸入詞,方框內(nèi)代表位于窗口內(nèi)的單詞)。通過輸入文本中成對(duì)的單詞來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò),其輸出概率代表著到詞典中每個(gè)詞有多大可能性跟輸入單詞同時(shí)出現(xiàn)。
?
圖4 訓(xùn)練樣本生成
?
每個(gè)詞wt都決定了wt+j,基于極大似然估計(jì)方法,希望所有樣本的條件概率p(wt+j|wt)之積最大,這里使用對(duì)數(shù)概率。因此Word2vec的目標(biāo)函數(shù)如公式(1)所示。
?
? (1)
?
基于訓(xùn)練數(shù)據(jù)需要構(gòu)建詞匯表并對(duì)單詞做one-hot編碼。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖5所示。假設(shè)從訓(xùn)練數(shù)據(jù)中抽取出10000個(gè)唯一不重復(fù)的單詞組成詞匯表,則模型的輸入為10000維的向量,輸出也是10000維的向量。每一維輸出都是一個(gè)概率,代表當(dāng)前詞是輸入樣本時(shí)輸出詞的概率大小。
?
圖5 Skip-Gram神經(jīng)網(wǎng)絡(luò)
?
隱含層不使用激活函數(shù),輸出層使用softmax計(jì)算輸出概率。由于權(quán)重矩陣規(guī)模非常大,通過梯度下降更新權(quán)重是相當(dāng)慢的,并且需要大量的訓(xùn)練數(shù)據(jù)避免過擬合。因此通常對(duì)優(yōu)化目標(biāo)采用負(fù)采樣方法,即每個(gè)訓(xùn)練樣本的訓(xùn)練只會(huì)更新一小部分的模型權(quán)重,從而降低計(jì)算負(fù)擔(dān)。Skip-Gram模型的Tensorflow核心代碼如下所示:
?
?
Word2vec和由其衍生出的Item2vec是Embedding技術(shù)的基礎(chǔ)性方法,但都是建立在序列樣本的基礎(chǔ)上。在互聯(lián)網(wǎng)場(chǎng)景下,數(shù)據(jù)對(duì)象之間更多呈現(xiàn)的是圖結(jié)構(gòu)。典型的場(chǎng)景是由用戶行為數(shù)據(jù)生成的物品關(guān)系圖,如圖6(a)(b) 所示,以及由屬性和實(shí)體組成的知識(shí)圖譜,如圖6(c)所示。
?
圖6 物品關(guān)系圖與知識(shí)圖譜
?
由于用戶瀏覽酒店的模式不一定呈現(xiàn)序列結(jié)構(gòu),而是一種關(guān)系圖結(jié)構(gòu),我們后期嘗試Graph Embedding中的DeepWalk方法對(duì)圖結(jié)構(gòu)中的節(jié)點(diǎn)酒店進(jìn)行Embedding。即在由酒店組成的圖結(jié)構(gòu)上進(jìn)行隨機(jī)游走(如圖7所示),產(chǎn)生大量酒店序列,然后將這些物品序列作為訓(xùn)練樣本輸入Word2vec進(jìn)行訓(xùn)練,得到酒店的Embedding。在DeepWalk算法中,需要定義隨機(jī)游走的跳轉(zhuǎn)概率,即到達(dá)節(jié)點(diǎn)vi后,下一步遍歷vi的鄰接點(diǎn)vj的概率。見公式(2)。
?
圖7 隨機(jī)游走
?
? (2)
?
其中ε是物品關(guān)系圖中所有邊的集合。如果物品關(guān)系圖是有向有權(quán)圖,則N+(vi)是節(jié)點(diǎn)vi所有的出邊集合,Mij是節(jié)點(diǎn)vi到節(jié)點(diǎn)vj邊的權(quán)重。如果物品關(guān)系圖是無(wú)向無(wú)權(quán)圖,則權(quán)重Mij將為常數(shù)1,且N+(vi)是節(jié)點(diǎn)vi所有邊的集合。酒店推薦場(chǎng)景采用無(wú)權(quán)無(wú)向圖結(jié)構(gòu)進(jìn)行訓(xùn)練。
?
四、酒店推薦系統(tǒng)中的模型應(yīng)用
?
?
深度學(xué)習(xí)之前傳統(tǒng)的推薦模型發(fā)展主要由這幾部分組成:協(xié)同過濾算法族、邏輯回歸模型族、因子分解機(jī)模型族以及組合模型,思路演化主要是增強(qiáng)泛化能力、保留記憶能力、挖掘特征組合關(guān)系。
?
經(jīng)典的協(xié)同過濾算法曾是推薦系統(tǒng)的首選模型,并且衍生出矩陣分解模型,能夠更好的處理稀疏共現(xiàn)矩陣問題,增強(qiáng)模型的泛化能力。在酒店推薦中我們也常常將協(xié)同過濾作為召回層的算法使用。與協(xié)同過濾僅利用用戶和物品之間的顯式或隱式反饋信息相比,邏輯回歸能夠利用和融合更多用戶、物品及上下文特征。并發(fā)展出來(lái)因子分解機(jī)模型FM,加入二階部分,使模型具備進(jìn)行特征組合的能力。在此基礎(chǔ)上又發(fā)展出域感知因子分解機(jī)FFM,進(jìn)一步加強(qiáng)因子分解機(jī)特征交叉的能力。
?
另外為了融合多個(gè)模型優(yōu)點(diǎn),將不同模型組合使用成為推薦模型常用的方法。Facebook提出的GBDT+LR[ 梯度提升決策樹+邏輯回歸 ] 組合模型是在業(yè)界影響力較大的組合方式。其中GBDT作為有監(jiān)督的特征轉(zhuǎn)換器,對(duì)于連續(xù)型特征和離散特征分別做離散化非線性變換和笛卡爾乘積的特征組合,將實(shí)數(shù)向量轉(zhuǎn)換為簡(jiǎn)單的二進(jìn)制值向量,構(gòu)造新特征向量。LR用于新特征向量的訓(xùn)練,并取得比單獨(dú)使用兩個(gè)模型都好的結(jié)果。組合模型中體現(xiàn)的特征工程模型化的思想,成為深度學(xué)習(xí)推薦模型的主要思想之一。
?
酒店推薦系統(tǒng)仍然延續(xù)通常意義上的CTR(Click- through rate)預(yù)估類的優(yōu)化目標(biāo),其任務(wù)核心衍生為把推薦問題當(dāng)作分類問題對(duì)待,預(yù)測(cè)用戶點(diǎn)擊某個(gè)酒店的概率CTR,并且返回用戶一組按CTR從高到低排序的酒店列表。因此也稱為搜索排序系統(tǒng)。
?
酒店推薦場(chǎng)景亦屬于高度稀疏數(shù)據(jù),往往需要解決記憶/泛化問題及特征交互問題。因此深度學(xué)習(xí)模型的優(yōu)勢(shì)就展現(xiàn)出來(lái),通過學(xué)習(xí)一種低維的特征向量表示(Dense Embedding),深度神經(jīng)網(wǎng)絡(luò)已經(jīng)表現(xiàn)出自動(dòng)學(xué)習(xí)復(fù)雜特征交互的潛力。并且通過較少的特征工程,可以從稀疏特征中更好的泛化去發(fā)現(xiàn)特征關(guān)聯(lián)。深度學(xué)習(xí)推薦模型大量借鑒并融合了深度學(xué)習(xí)在圖像、語(yǔ)音及自然語(yǔ)言處理方向的成果,在模型結(jié)構(gòu)上進(jìn)行了快速的演化。主要有以下幾種演變方向。
?
(1)改變神經(jīng)網(wǎng)絡(luò)的復(fù)雜結(jié)構(gòu),從單層神經(jīng)網(wǎng)絡(luò)模型AutoRec到經(jīng)典的Deep Crossing(深度特征交叉),增加了深度神經(jīng)網(wǎng)絡(luò)的層數(shù)和結(jié)構(gòu)復(fù)雜度。
(2)改變特征交叉方式,例如NeuralCF(神經(jīng)網(wǎng)絡(luò)協(xié)同過濾)和PNN(基于積操作的神經(jīng)網(wǎng)絡(luò))模型。
(3)組合模型,主要是指Wide&Deep模型及其后續(xù)變種Deep&Cross、DeepFM等,通過組合不同特點(diǎn)、優(yōu)勢(shì)互補(bǔ)的網(wǎng)絡(luò),提升模型的綜合能力。
(4)注意力機(jī)制與推薦模型的結(jié)合,主要包括FM與注意力機(jī)制的AFM和DIN(深度興趣網(wǎng)絡(luò))。
(5)其他結(jié)合方式(序列模型、強(qiáng)化學(xué)習(xí)與推薦模型的結(jié)合等)。
?
以下簡(jiǎn)單介紹幾種在推薦模型演化過程中常用的模型結(jié)構(gòu)和原理。
?
4.1 Factorization Machines(因式分解機(jī))
?
對(duì)于一個(gè)給定的特征向量,線性回歸建模時(shí)采用的函數(shù)是
?
(3)
?
其中, W0和為模型參數(shù)。方程中各特征分量xi和xj?(i≠j)之間相互獨(dú)立,即中僅考慮單個(gè)的特征分量,而沒有考慮特征分量之間的相互關(guān)系。因此將改寫為:
?
(4)
?
公式中增加了任意兩個(gè)不同特征之間的關(guān)系。但是在稀疏數(shù)據(jù)中,這樣的建模方式存在一個(gè)缺陷,對(duì)于訓(xùn)練數(shù)據(jù)中未出現(xiàn)交互的特征分量,不能對(duì)相應(yīng)的參數(shù)進(jìn)行估計(jì)。而在類似推薦這種高度稀疏數(shù)據(jù)場(chǎng)景中,樣本中出現(xiàn)未交互的特征分量是很普遍的。
?
為了克服上面的缺陷,針對(duì)每個(gè)維度的特征分量xi引入輔助向量
?
?
其中為超參數(shù), wij改寫為
?
?
則模型方程可以改寫為:
???????
?? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ?
由于對(duì)應(yīng)一種矩陣分解技術(shù),因此模型方程的方法稱為Factorization Machines。該模型方程可以證明在線性時(shí)間0(kn)?內(nèi)計(jì)算,并且方程可以進(jìn)一步推導(dǎo)為:
?
?(6)
?
FactorizationMachines的Tensorflow核心實(shí)現(xiàn)代碼如下:
?
?
4.2 Wide & Deep Learning
?
深度學(xué)習(xí)存在過度泛化的問題,當(dāng)用戶與物品交互較少即特征向量稀疏時(shí)推薦一些與用戶不相關(guān)的項(xiàng)目(例如用戶有特定的偏好或者一些小眾項(xiàng)目),這種情況下大多數(shù)項(xiàng)目不應(yīng)該被推薦,但是Dense Embedding會(huì)給出非0的預(yù)測(cè),因此不相關(guān)的項(xiàng)目也會(huì)被推薦。而進(jìn)行特征交叉乘積變換的線性模型能夠記憶這些特殊情況或例外規(guī)則,并且使用更少的參數(shù)。Google在2016年提出了Wide& Deep模型,很好的結(jié)合了線性模型的記憶能力和深度神經(jīng)網(wǎng)絡(luò)的泛化能力,在訓(xùn)練過程中同時(shí)優(yōu)化2個(gè)模型的參數(shù),從而達(dá)到整體模型的預(yù)測(cè)能力最優(yōu)。模型結(jié)構(gòu)如圖9所示。
?
圖9 Wide & Deep模型結(jié)構(gòu)
?
Wide部分就是LR,輸入特征包含了原始特征和交叉特征。Deep部分是MLP網(wǎng)絡(luò),隱含層的激活函數(shù)使用ReLUs=max(0,a),輸入特征包含了連續(xù)的特征和embedding特征。對(duì)于一個(gè)邏輯回歸任務(wù)Wide & Deep模型預(yù)測(cè)方程為:
?
(7)
?
其中Y是二分類標(biāo)簽,σ(.)是sigmoid函數(shù),?(x)是原始特征的交叉乘積轉(zhuǎn)換。Wwide是所有線性模型的權(quán)重向量,Wdeep是應(yīng)用于最后激活層輸出的權(quán)重。
?
Wide& Deep建模可以使用Tensorflow高級(jí)API,建模步驟如下:
?
(1)選擇Wide部分的特征(wide_columns):稀疏基礎(chǔ)特征和交叉特征。
(2)選擇Deep部分的特征(deep_columns):連續(xù)型特征、類別特征(編碼)。
(3)將Wide & Deep特征合并輸入模型(DNNLinearCombinedClassifier)。
?
?
4.3 FTRL 算法
?
Wide& Deep模型訓(xùn)練方面常使用結(jié)合 L1 正則的Follow-the-regularized-leader (FTRL) 算法進(jìn)行Wide部分訓(xùn)練,而Deep部分使用AdaGrad算法進(jìn)行訓(xùn)練。
?
其中FTRL算法可以實(shí)施于在線學(xué)習(xí),對(duì)模型參數(shù)進(jìn)行實(shí)時(shí)更新,在處理諸如邏輯回歸之類的帶非光滑正則化項(xiàng)的凸優(yōu)化問題上性能非常出色。像Batch Gradient Descent 等優(yōu)化算法,是對(duì)一批樣本進(jìn)行一次求解,得到一個(gè)全局最優(yōu)解。而實(shí)際CTR預(yù)測(cè)需要更快速地更新模型,模型的參數(shù)需要針對(duì)每一個(gè)新來(lái)樣本進(jìn)行一次迭代。因此可以通過工程上實(shí)現(xiàn)FTRL算法,從而快速更新模型的參數(shù)。FTRL算法的特征權(quán)重更新公式為:
?
(8)
?
其中是針對(duì)每個(gè)特征維度的學(xué)習(xí)率。如果特征 A 比特征 B變化快,那么在維度 A 上面的學(xué)習(xí)率應(yīng)該比維度 B 上面的學(xué)習(xí)率下降得更快。維度i的學(xué)習(xí)率定義為:
?
(9)
?
在Logistic Regression中,假設(shè)σ(a)=1/(1+exp(-a))是sigmoid函數(shù),yt∈{0,1},需要預(yù)測(cè)Pt=σ(Wt),損失函數(shù)使用LogLoss函數(shù):
?
?(10)
?
梯度.Logistic Regression的FTRL算法為:
?
?
4.4 DeepFM
?
Wide & Deep 模型中需要寬度部分和深度部分兩類不同的輸入,而寬度部分仍然需要依賴大量的特征工程工作。2018年提出的DeepFM 模型結(jié)合了分解向量機(jī)(FM)和深度神經(jīng)網(wǎng)絡(luò)(DNN),既能學(xué)習(xí)復(fù)雜的低階與高階特征交互又不需要原始特征以外的特征工程,并且允許端到端的學(xué)習(xí)方式。模型結(jié)構(gòu)如圖10所示。嵌入層(Dense Embedding)將原始輸入向量壓縮到低維稠密向量,作為FM和深度部分的輸入。因此不同于Wide & Deep 模型,DeepFM的FM部分和深度部分共享相同的輸入向量,從而可以進(jìn)行端到端的訓(xùn)練。
?
圖10 ?DeepFM 模型結(jié)構(gòu)
?
盡管不同F(xiàn)ield的輸入長(zhǎng)度不同,但是Embedding之后的Dense vector的長(zhǎng)度均為k。Dense vector其實(shí)就是輸入層到Embedding層該神經(jīng)元相連的k條線的權(quán)重,即。這k個(gè)值組合起來(lái)就是我們?cè)贔M中所提到的輔助向量vi,即FM和深度神經(jīng)網(wǎng)絡(luò)的共享輸入向量。其中深度部分可以使用不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。如圖所示DeepFM模型是一種并行結(jié)構(gòu),預(yù)測(cè)結(jié)果可以表示為:
?
(11)
?
DeepFM 模型的Tensorflow核心實(shí)現(xiàn)代碼如下:
?
?
五、酒店推薦系統(tǒng)評(píng)估
?
?
推薦系統(tǒng)一般分為離線評(píng)估和在線評(píng)估兩部分。離線評(píng)估的指標(biāo)主要是機(jī)器學(xué)習(xí)模型常用的一些評(píng)估指標(biāo),包括準(zhǔn)確率、精確率與召回率、F1-Score、AUC值等。在線評(píng)估的主要方式是A/B測(cè)試,主要評(píng)估指標(biāo)有點(diǎn)擊率、轉(zhuǎn)化率、點(diǎn)擊排名等。
?
為了測(cè)試模型效果,我們選取了某一個(gè)酒店推薦場(chǎng)景,并抽取100萬(wàn)左右數(shù)據(jù)作為訓(xùn)練樣本。其中正樣本為用戶點(diǎn)擊,負(fù)樣本為有露出但用戶未點(diǎn)擊,并對(duì)數(shù)據(jù)集做樣本平衡處理。特征部分不贅述。模型離線表現(xiàn)如表2所示。
?
表2 模型離線表現(xiàn)對(duì)比
| Model | AUC (5000 ?iters) |
| Logistic ?Regression | 0.597 |
| Xgboost | 0.737 |
| XGBoost+LR | 0.75 |
| FM | 0.599 |
| Wide ?& Deep | 0.799 |
| DeepFM | 0.80 |
?
在線測(cè)試部分使用A/B測(cè)試,其中A版本為舊版本,推薦算法基于規(guī)則推薦,B版本為新版本,使用XGBoost模型進(jìn)行酒店點(diǎn)擊率預(yù)測(cè)并排序,同時(shí)使用基于酒店的協(xié)同過濾算法進(jìn)行候選酒店召回。工程上線參考第三部分描述。A/B實(shí)驗(yàn)周期為一個(gè)月,使用的評(píng)估指標(biāo)包括酒店平均點(diǎn)擊率及酒店訂單量等。其中酒店平均點(diǎn)擊率增長(zhǎng)25.35%,酒店訂單量總增長(zhǎng)率為27.31%,效果較顯著。更多模型結(jié)構(gòu)將會(huì)持續(xù)上線實(shí)驗(yàn)。
?
六、推薦系統(tǒng)中的一些問題
?
?
在構(gòu)建推薦系統(tǒng)的過程中,推薦模型的作用是重要的,但并不是推薦系統(tǒng)的全部。推薦系統(tǒng)需要解決的問題是綜合性的,包含特征選取和處理、召回層設(shè)計(jì)、實(shí)時(shí)性要求、模型在線學(xué)習(xí)以及冷啟動(dòng)和推薦多樣性問題等。這里主要探討一下冷啟動(dòng)和推薦多樣性問題。
?
冷啟動(dòng)問題主要包括用戶冷啟動(dòng)(新用戶注冊(cè),無(wú)歷史行為)、物品冷啟動(dòng)(新物品加入,無(wú)用戶交互歷史)和系統(tǒng)冷啟動(dòng)問題(無(wú)任何相關(guān)歷史數(shù)據(jù))三類。主流的冷啟動(dòng)策略是基于規(guī)則的冷啟動(dòng)過程,在這過程中可以豐富用戶和物品特征,從而通過推薦模型進(jìn)行個(gè)性化推薦。
?
另外也可以通過主動(dòng)學(xué)習(xí)、遷移學(xué)習(xí)和探索利用機(jī)制。最經(jīng)典的啟發(fā)式探索利用方法為幾個(gè)Bandit算法,如Thompson Sampling算法和UCB(Upper Confidence Bound)算法,二者都是利用了分布的不確定性作為探索強(qiáng)弱的依據(jù)。UCB算法流程如下:
?
(1)假設(shè)有K個(gè)老虎機(jī),對(duì)每個(gè)老虎機(jī)進(jìn)行隨機(jī)搖臂m次,獲得老虎機(jī)受益的初始化經(jīng)驗(yàn)期望。
(2)用t表示至今搖臂的總次數(shù),用nj表示第j個(gè)老虎機(jī)至今被搖臂的次數(shù),計(jì)算每個(gè)老虎機(jī)的UCB值:
(3)選擇UCB值最大的老虎機(jī)i搖臂,并觀察其收益Xi,t。
(4)根據(jù)Xi,t更新老虎機(jī)i的收益期望值。
(5)重復(fù)第2步。
?
ThompsonSampling算法和UCB算法都是工程中常用的探索與利用方法,不但可以解決冷啟動(dòng)問題,還可以發(fā)掘用戶新興趣,增加推薦結(jié)果的多樣性,減少大量同質(zhì)化內(nèi)容同時(shí)出現(xiàn)時(shí)用戶的厭倦情緒。可以說探索與利用的思想是所有推薦系統(tǒng)不可或缺的補(bǔ)充。
?
參考文獻(xiàn)
?
[1] 《深度學(xué)習(xí)推薦系統(tǒng)》,王喆
[2] H.B. McMahan, G. Holt, D. Sculley, M. Young, D. Ebner, J. Grady, L. Nie, T.Phillips, E. Davydov, D. Golovin, S. Chikkerur, D. Liu, M. Wattenberg, A. M.Hrafnkelsson, T. Boulos, and J. Kubica, “Ad click prediction: a view from thetrenches,” in ACM SIGKDD, 2013.
[3]X. He, J. Pan, O. Jin, T. Xu, B. Liu, T. Xu, Y. Shi, A. Atallah, R. Herbrich,S. Bowers, and J. Q. Candela, “Practical lessons from predicting clicks on adsat facebook,” in ADKDD, 2014, pp. 5:1–5:9.
[4] S.Rendle, “Factorization machines,” in ICDM.
[5]H. Cheng, L. Koc, J. Harmsen, T. Shaked, T. Chandra, H. Aradhye, G. Anderson,G. Corrado, W. Chai, M. Ispir, R. Anil, Z. Haque, L. Hong, V. Jain, X. Liu, andH. Shah, “Wide & deep learning for recommender systems,” CoRR, vol.abs/1606.07792, 2016.
[6]Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He, and ZhenhuaDong, “DeepFM:AnEnd-to-End Wide & Deep Learning Framework for CTR Prediction,”arXivpreprint arXiv:1804.04950, 2018
總結(jié)
以上是生活随笔為你收集整理的机器学习模型在携程海外酒店推荐场景中的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超越用户embedding矩阵:用哈希对
- 下一篇: 如何解决微服务的数据一致性分发问题