背景介紹
論文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》是airbnb公布的房源推薦算法,獲得了2018年的KDD最佳論文,論文基于airbnb的房源推薦場(chǎng)景,需要對(duì)客人和房主都進(jìn)行有效的推薦槐臀,即用戶輸入目的地和行程日期進(jìn)行搜索時(shí)未檩,將位置蔓姚、價(jià)格、風(fēng)格和評(píng)價(jià)等方面對(duì)用戶有吸引力的房子排前瘾杭,也要考慮房主的偏好站蝠,將可能會(huì)拒絕客人的排名名降低汰具,比如用戶評(píng)價(jià)差,有寵物菱魔,人數(shù)等留荔。論文主要服務(wù)于相似物品的推薦和搜索排序兩個(gè)場(chǎng)景,前者是用戶在瀏覽一個(gè)房源時(shí)澜倦,界面上的相似房源推薦聚蝶,后者是用戶進(jìn)行搜索后的房源展示順序,99%的房源預(yù)定都發(fā)生在這兩個(gè)場(chǎng)景下藻治,算法的最終目標(biāo)是提升推薦房源的預(yù)訂率碘勉,論文所說(shuō)的實(shí)時(shí)的個(gè)性化推薦,是根據(jù)用戶和房主的實(shí)時(shí)行為對(duì)房源的推薦進(jìn)行一定的調(diào)整桩卵,需要注意的是文章的標(biāo)題是設(shè)計(jì)了一些embedding的方法用于實(shí)時(shí)的個(gè)性化推薦验靡,而非實(shí)時(shí)的更新。
Embedding可以將高維的id/類別類特征轉(zhuǎn)換為稠密雏节、連續(xù)的向量胜嗓,向量之間可以計(jì)算夾角計(jì)算相似性,也便于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)矾屯。embedding的計(jì)算常見(jiàn)的有兩種:
- 有監(jiān)督學(xué)習(xí)兼蕊,end-to-end。embedding作為優(yōu)化變量件蚕,隨機(jī)初始化孙技,在優(yōu)化最終logloss的過(guò)程中,得到有意義的embedding作為“副產(chǎn)品”排作,Youtube對(duì)video_id牵啦、Wide&Deep對(duì)app_id、Deep Interest Network對(duì)商品id的embedding都是這一思路妄痪。
- 無(wú)監(jiān)督學(xué)習(xí)哈雏,兩步走。以Item2vec: Neural Item Embedding for Collaborative Filtering為代表衫生。第一步裳瘪,就是簡(jiǎn)單套用word2vec的思路,在電商場(chǎng)景罪针,就將word2vec中的句子換成購(gòu)物車彭羹,將單詞換成商品;新聞推薦場(chǎng)景中泪酱,將句子換成session派殷,將單詞換成文章还最。再直接調(diào)word2vec算法,就得到商品毡惜、文章的embedding向量拓轻。第二步,這些embedding向量经伙,可以用于召回扶叉,可以用于第一類方法的embedding矩陣的初值,也可以當(dāng)特征喂入其他模型橱乱。
本文的embedding計(jì)算方式屬于第二種辜梳。
論文重點(diǎn)內(nèi)容
這篇論文的重點(diǎn)可以分為以下三個(gè)部分:
- Listing Embeddings
- Listing_type Embeddings 和 User_type Embeddings
- 兩類embedding如何用戶實(shí)時(shí)的個(gè)性化推薦
這里的listing表示房源,listing_type和user_type是粗粒度的房源類型和用戶類型泳叠,文章的重點(diǎn)是提出了與業(yè)務(wù)緊密結(jié)合的embedding方法作瞄。下面將分別對(duì)每種embedding的設(shè)計(jì)原理、有效性驗(yàn)證和如何應(yīng)用于實(shí)時(shí)的個(gè)性化推薦進(jìn)行詳細(xì)的說(shuō)明危纫。
Listing Embedding
論文用點(diǎn)擊行為表示用戶的短期興趣宗挥,基于用戶的Listing點(diǎn)擊序列,得到每個(gè)listing的embedding种蝶∑豕ⅲ看似平淡無(wú)奇,但是有一些別致的設(shè)計(jì):
序列的構(gòu)建
每個(gè)序列都由某個(gè)用戶的點(diǎn)擊時(shí)間構(gòu)成螃征,按時(shí)間先后順序排序搪桂,相隔超過(guò)30min的點(diǎn)擊時(shí)間被隔開(kāi)為不同的序列。
原始計(jì)算方法+負(fù)采樣
類似于word2vec中的skip-gram算法盯滚,窗口大小為2m踢械,softmax損失函數(shù),要優(yōu)化的目標(biāo)函數(shù)為:
其中
vl表示房源l的向量表示魄藕。
采用了隨機(jī)負(fù)采樣
其中Dp表示正例内列,Dn表示負(fù)采樣的正例,l表示Listing背率,c表示上下文话瞧。
采用了隨機(jī)梯度下降的優(yōu)化方法。
增加預(yù)定的Listing為全局內(nèi)容
最初的版本是上圖中橙色的部分寝姿,用戶的點(diǎn)擊序列可以分為兩類交排,以預(yù)定為結(jié)尾的和只有點(diǎn)擊沒(méi)有預(yù)定,為了讓embedding的構(gòu)造不僅體現(xiàn)出相鄰上下文的相似關(guān)系饵筑,也能體現(xiàn)出最后的預(yù)定信息埃篓,可以對(duì)以預(yù)定為結(jié)尾的序列,將預(yù)定的Listing作為全局的上下文翻翩,每次窗口滑動(dòng)時(shí)都作為正例參與訓(xùn)練都许,即每次訓(xùn)練都加上圖中紫色的Listing,有點(diǎn)類似于doc2vec中的設(shè)置嫂冻,目標(biāo)函數(shù)的最后一項(xiàng)體現(xiàn)了這一點(diǎn)胶征。
針對(duì)搜索的市場(chǎng)集中的特點(diǎn)增加負(fù)例
訂房的搜索結(jié)果通常限制在某一個(gè)市場(chǎng)區(qū)域中,就容易導(dǎo)致正例集合Dp中包含的Listing都來(lái)自同一個(gè)市場(chǎng)區(qū)域桨仿,而反例由于隨機(jī)采樣包含各個(gè)市場(chǎng)區(qū)域睛低,這樣就導(dǎo)致同一個(gè)市場(chǎng)的Listing的embedding訓(xùn)練不充分,所以文章又增加了一些搜索區(qū)域的負(fù)例服傍,用集合Dmn表示钱雷,在目標(biāo)函數(shù)上的體現(xiàn)如下:
Listing的冷啟動(dòng)Embedding設(shè)置
對(duì)于新的Listing,肯定沒(méi)有embedding可用吹零,文章利用新Listing的一些基本信息罩抗,比如位置、價(jià)格灿椅、類型等套蒂,找到三個(gè)基本距離最近、類型茫蛹、價(jià)位相同的已有Embedding的Listings操刀,將它們的Embedding做平均,作為新Listing的初始Embedding婴洼,這樣的設(shè)定可以覆蓋98%的新Listing骨坑。
Listing的Embedding有效性初步驗(yàn)證
文章在上線這種方法之前先進(jìn)行了Embedding效果的觀察,分三個(gè)方面:
- 觀察Kmeans分到同一蔟的Listing的地理位置是否相近柬采,考察了Embedding對(duì)市場(chǎng)區(qū)域的相似度的學(xué)習(xí)情況欢唾,結(jié)果發(fā)現(xiàn)同一蔟的Listing地理位置相近,學(xué)習(xí)有效警没,聚類結(jié)果還可以反過(guò)來(lái)幫助市場(chǎng)區(qū)域的劃分匈辱;
- 用cosine相似度評(píng)估相同類型、相同價(jià)格區(qū)間的Listing相似度杀迹,比較發(fā)現(xiàn)類型相同亡脸、價(jià)格區(qū)間相同的Listing往往相似度更高;
-
用KNN找一些特殊結(jié)構(gòu)树酪、類型的Listing最近鄰浅碾,考察Embedding對(duì)房屋結(jié)構(gòu)和風(fēng)格這種不易挖掘的相似度學(xué)習(xí)情況,結(jié)果找到的最近鄰?fù)彩怯邢嗨频慕Y(jié)構(gòu)和風(fēng)格续语,比如城堡垂谢、樹(shù)屋等。
實(shí)際應(yīng)用中的生成和更新
訓(xùn)練Listing Embedding用了8億點(diǎn)擊序列疮茄,使用了登陸的用戶滥朱,按id進(jìn)行g(shù)roup并按時(shí)間排序根暑,30min無(wú)動(dòng)作則隔開(kāi),并且移除了停留時(shí)間短(30s)和過(guò)短的序列(<2)徙邻,最后進(jìn)行匿名訓(xùn)練排嫌,并且對(duì)預(yù)定結(jié)尾的序列進(jìn)行了5倍的過(guò)采樣,訓(xùn)練了450萬(wàn)的Listing embedding缰犁。
文章使用滑動(dòng)窗口淳地,每天都對(duì)Embedding進(jìn)行更新,并發(fā)現(xiàn)重新訓(xùn)練比在之前的結(jié)果上進(jìn)行增量訓(xùn)練效果更好帅容,學(xué)習(xí)到的embedding維度為32颇象,Skip-gram窗口大小為10(前5后5)。使用時(shí)將Embedding結(jié)果加載在內(nèi)存并徘,并用map reduce進(jìn)行實(shí)時(shí)計(jì)算遣钳。
User-type & Listing-type Embeddings
通過(guò)點(diǎn)擊序列得到的Embedding主要體現(xiàn)了相同市場(chǎng)區(qū)域的Listing相似度,反映了用戶短期的興趣饮亏,但是用戶長(zhǎng)期的興趣也依然有用耍贾,比如用戶搜索了Los Angeles的Listing,他之前在New York和London也有預(yù)定信息路幸,就可以給他推薦和之前預(yù)定相似的Listing荐开。于是文章就希望利用用戶的預(yù)定序列,生成能反映長(zhǎng)期興趣的User Embedding和Listing Embedding简肴,分別對(duì)應(yīng)租客和房源的長(zhǎng)期興趣晃听。
但是對(duì)每個(gè)用戶或者Listing都生成預(yù)定序列用類似上文的學(xué)習(xí)方法面臨著一些現(xiàn)實(shí)挑戰(zhàn):
- 用戶的預(yù)定序列數(shù)據(jù)量少,預(yù)定的數(shù)據(jù)量遠(yuǎn)少于點(diǎn)擊砰识;
- 有很多用戶只有一次預(yù)定記錄能扒,序列長(zhǎng)度只為1,無(wú)法使用辫狼;
- 能有效學(xué)習(xí)到Embedding的對(duì)象至少需要出現(xiàn)5-10次初斑,這樣的限制條件使得能用的數(shù)據(jù)量更少了;
- 預(yù)定發(fā)生時(shí)間跨度較長(zhǎng)的話膨处,用戶的偏好可能會(huì)發(fā)生變化见秤。
基于以上現(xiàn)實(shí)業(yè)務(wù)情況考慮,文章決定不以User ID和生成預(yù)定序列真椿,而是粗化粒度鹃答,從用戶類型和Listing類型的角度生成embedding。
User type和Listing type的構(gòu)造
文章通過(guò)規(guī)則映射的方式將用戶和Listing劃分成不同的類別突硝,如下兩張表所示测摔,以用戶為例,首先根據(jù)一些基本信息或歷史消費(fèi)信息,根據(jù)每一維度不同取值劃分成不同的桶锋八,不同用戶就會(huì)落入到不同的桶中浙于,再綜合考慮所有維度,就得到了每個(gè)用戶的類別挟纱,特別的路媚,隨著時(shí)間的拉近,不同時(shí)段的用戶的類別可能不同樊销,不同Listing的類別也可能不同。
另外脏款,一些只有基本信息可以利用的用戶分到的類別還可以起到冷啟動(dòng)的作用围苫。
得到在相同向量空間的結(jié)果
如果用戶向量和Listing向量在相同的向量空間中,就可以直接通過(guò)相似度計(jì)算來(lái)體現(xiàn)二者的契合匹配程度撤师。
文章利用用戶的預(yù)定序列剂府,將用戶ID和預(yù)定的Listing ID都替換成各自對(duì)應(yīng)的type,然后以用戶剃盾、Listing交替的方式排列組成可用的序列腺占,值得注意的是,這里每個(gè)序列都是某一個(gè)用戶的預(yù)定記錄痒谴,但是用戶的類型和Listing的類型是會(huì)隨著時(shí)間變化的衰伯。如下圖所示,Ut代表User type积蔚,Lt代表Listing type意鲸,這里是要對(duì)Uti進(jìn)行更新。
和Skip-gram類似的尽爆,采用了滑動(dòng)窗口怎顾,每次對(duì)窗口中心的元素進(jìn)行更新,對(duì)User type和List type的更新公式是類似的漱贱。
User type:
Listing type:
其中槐雾,book表示預(yù)定,正例幅狮,neg是反例募强,負(fù)采樣,C表示上下文彪笼,包括了User type和Listing type钻注,這樣使得學(xué)習(xí)到的embedding在同一個(gè)向量空間。
這樣構(gòu)造的Listing type分布在各個(gè)市場(chǎng)區(qū)域配猫,沒(méi)有必要進(jìn)行額外市場(chǎng)區(qū)域的負(fù)采樣了幅恋。
加入拒絕信號(hào)
點(diǎn)擊和預(yù)定反映了用戶的興趣,但是在airbnb里泵肄,戶主是可以拒絕用戶預(yù)定的捆交,拒絕是個(gè)強(qiáng)烈的反映戶主偏好的信號(hào)淑翼,在得到的embedding中,戶主和他討厭的用戶類型不能是相似的品追,如果相似了進(jìn)行推薦玄括,也是不利于提升預(yù)訂率的∪馔撸基于這方面的考慮遭京,文章將拒絕信號(hào)加入了目標(biāo)函數(shù)中:
兩類embedding如何用戶實(shí)時(shí)的個(gè)性化推薦
論文主要服務(wù)于相似物品的推薦和搜索排序兩個(gè)場(chǎng)景,前者是用戶在瀏覽一個(gè)房源時(shí)泞莉,界面上的相似房源推薦哪雕,用到了Listing Embedding,后者是用戶進(jìn)行搜索后的房源展示順序鲫趁,Listing Embedding和User/Listing Type embedding都有使用斯嚎。
相似房源推薦
之前的方法是利用search model的結(jié)果,經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn)直接用Listing embedding找相似就可以達(dá)到比之前更好的效果挨厚,經(jīng)過(guò)線下驗(yàn)證后上線堡僻,相似房源的點(diǎn)擊率增加了20%以上。
這是線下評(píng)價(jià)指標(biāo)圖疫剃,藍(lán)色表示baseline钉疫,其余的分別表示利用不同目標(biāo)函數(shù)公式后的結(jié)果,縱坐標(biāo)表示預(yù)定的Listing在相似中的排名巢价,數(shù)值越低越好陌选,橫坐標(biāo)表示距離預(yù)定的點(diǎn)擊次數(shù),可以看出使用了embedding的方法在早期點(diǎn)擊的優(yōu)勢(shì)最為明顯蹄溉,添加了預(yù)定信息和區(qū)域負(fù)采樣的embedding方法效果最好咨油。
搜索排序模型
原始的搜索排序模型利用了Listing/user/query的feature以及它們之間交互信息的feature,根據(jù)用戶對(duì)搜索結(jié)果的交互柒爵,設(shè)定了一些label役电,包括{0, 0.01, 0.25, 1, -0.4},0表示房源有曝光但是沒(méi)點(diǎn)擊棉胀,0.01表示用戶點(diǎn)擊了房源法瑟,0.25表示用戶聯(lián)系了房東但是并沒(méi)有預(yù)訂,1表示房源預(yù)訂成功唁奢,-0.4表示房東拒絕了用戶的預(yù)訂霎挟。采用的是GBDT(Gradient Boosting Decision Trees)回歸算法。
文章利用了用戶實(shí)時(shí)的點(diǎn)擊等信息來(lái)構(gòu)造新的相似特征加入到GBDT算法中麻掸,具體地酥夭,將用戶最近兩周有行為的房源做個(gè)分類,一共包括6個(gè)類別,1)用戶擊過(guò)的房源熬北,用 H_c 表示疙描;2)用戶點(diǎn)擊并且停留時(shí)長(zhǎng)超過(guò)60秒的房源,表示長(zhǎng)點(diǎn)擊房源讶隐,用 H_lc 表示起胰;3)曝光卻沒(méi)有點(diǎn)擊的房源,用 H_s 表示巫延;4)用戶加入收藏的房源效五,用 H_w 表示;5)用戶聯(lián)系過(guò)房東但是卻未預(yù)訂的房源炉峰,用 H_i 表示火俄;6)用戶在過(guò)去兩周內(nèi)預(yù)定過(guò)的房源,用 H_b 表示讲冠。將候選房源與上述6個(gè)類別的房源計(jì)算相似度,作為特征加入到搜索排序模型中适瓦,如圖10的前6個(gè)特征竿开,EmbClickSim, EmbSkipSim等。這些數(shù)據(jù)都是用的用戶最近兩周的行為玻熙,表示用戶的短期興趣否彩。
具體如何計(jì)算,我們以 H_c 為例進(jìn)行介紹嗦随,其他5個(gè)類別的計(jì)算方法相同列荔。對(duì)于每個(gè)類別,根據(jù)城市再一次進(jìn)行劃分枚尼,比如H_c中的房源來(lái)自于New York和Los Angeles兩個(gè)城市贴浙,將H_c劃分為H_c(NY)和H_c(LA)。將 H_c(NY) 中所有房源的embedding求平均署恍,作為centroid embedding崎溃,然后計(jì)算當(dāng)前候選房源與centroid embedding的余弦相似度。類似的盯质,計(jì)算候選房源與 H_c(LA) 的centroid embedding的余弦相似度袁串。最后,取兩個(gè)相似度的最大值作為EmbClickSim呼巷。如果 H_c 中的房源來(lái)自于兩個(gè)以上城市囱修,也是相同的計(jì)算方法。
下圖表示了各個(gè)特征的重要性和覆蓋率王悍,可以看到破镰,UserTypeListingTypeSim, EmbClickSim和EmbSkipSim的覆蓋度較高。第3列顯示了特征的重要程度,分母表示一共有104個(gè)特征啤咽,分子表示該特征的重要程度排名晋辆。
對(duì)User type和List type embedding的利用就是查詢現(xiàn)在的用戶的類別和Listing的類別,求出二者的相似性作為特征宇整。
引入 embedding features后瓶佳,線上NDCU提升2.27%,booking DCU增長(zhǎng)2.58%
總而言之鳞青,
對(duì)Listing Embedding的使用:通過(guò)獲取并實(shí)時(shí)更新用戶歷史兩周的點(diǎn)擊等信息霸饲,構(gòu)造了不同的集合,再對(duì)需要排序的Listing臂拓,計(jì)算到各個(gè)集合中Listing的相似度厚脉,作為特征加入模型中。
對(duì)User/Listing Type Embedding的使用:獲取當(dāng)前用戶的類型和要排序的Listing的類型胶惰,計(jì)算相似度傻工,作為特征加入模型中
在實(shí)際應(yīng)用時(shí),都將embedding或相似度加載到后端中孵滞,便于快速計(jì)算中捆,維度設(shè)置成32也是性能和成本trade-off的結(jié)果。
參考文獻(xiàn):
https://astro.temple.edu/~tua95067/kdd2018.pdf
https://zhuanlan.zhihu.com/p/57234648
https://www.zhihu.com/question/302288216/answer/530729525