Embedding 在Airbnb房源排序中的應(yīng)用 (KDD2018 best paper)

Airbnb 的這篇論文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》拿了KDD 2018 的best paper绰姻,初次看到這篇文章還是覺得很吃驚的酿傍,這么簡單地一篇文章也能拿best paper。但細(xì)看之后覺得還是有不少工程上可以借鑒學(xué)習(xí)的地方玫氢。在介紹這篇文章之后先討論一下如何用Word2vec在推薦中做Item Embeddings。

Word2vec 用于Item Embeddings

Word2vec 用于做詞向量相信大家都比較熟悉了遮精,研究生階段我利用Word2vec的變形在雙語詞嵌入上做了一些嘗試熬北。工作之后才開始接觸推薦系統(tǒng),知道了有人利用Word2vec來做 Item Embeddings馆揉,放到item向量學(xué)習(xí)當(dāng)然也可以說Node2vec或者 Graph Embeddings。開始我是有點(diǎn)質(zhì)疑這樣做的有效性抖拦,Word2vec 能用無監(jiān)督的方式得到詞向量升酣,主要在于語言是有"結(jié)構(gòu)性"的,是有“規(guī)律可循”的态罪。例如“吃飯“總是在一起出現(xiàn)拗踢,或者說”吃面“,”吃肉“向臀。就是因?yàn)橛羞@樣的規(guī)律巢墅,所以才能用word2vec訓(xùn)練語言模型下(也可以參考詞向量的分布式假設(shè))。但是在推薦中有這樣的規(guī)律嗎券膀?從統(tǒng)計(jì)的角度上說君纫,看了某個(gè)item1會經(jīng)常去看另外某個(gè)item2。答案當(dāng)然是存在芹彬,這是item-based CF的基本思路蓄髓。所以Word2vec做ICF類召回還是很有效的。

推薦系統(tǒng)中舒帮,Word2vec以及它變種方法用于召回越來越常見了会喝,很多人也夸張的說:萬物皆可 Embedding陡叠,基本思路都是利用用戶的點(diǎn)擊歷史看作一個(gè)"句子",但是慢慢地在我心中有個(gè)疑問肢执,為什么在做推薦的時(shí)候沒有人想到使用負(fù)樣本呢枉阵?因?yàn)橛脀ord2vec 學(xué)習(xí)item 向量時(shí),利用上下文預(yù)測中心的item预茄,并且選取一些負(fù)樣本訓(xùn)練兴溜,模型其實(shí)認(rèn)為點(diǎn)了item1就不會點(diǎn)它的負(fù)樣本item1_neg了。(當(dāng)然這里也必須選取一些負(fù)樣本耻陕,如果沒有負(fù)樣本這里最終優(yōu)化到每個(gè)item embedding都相等且norm=1拙徽,就能使得word2vec的交叉熵loss為0了。)既然在推薦系統(tǒng)的中有負(fù)樣本诗宣,為啥不能利用到word2vec 中訓(xùn)練呢膘怕?在nlp中由于是無監(jiān)督學(xué)習(xí),所以只能隨機(jī)的選取一些其它詞來作為負(fù)樣本召庞。推薦系統(tǒng)與自然語言存在的差異是淳蔼,我們能搜集到負(fù)樣本,也應(yīng)該加以利用裁眯。一方面隨機(jī)選取負(fù)樣本有概率落在正樣本上,另一方面讳癌,這樣的負(fù)樣本不是更加置信嗎穿稳,也更加具有”區(qū)分度“。我解釋一下這里的“區(qū)分度”晌坤,如果用戶喜歡看了一個(gè)”Dota游戲“的視頻逢艘,這個(gè)時(shí)候負(fù)采樣一個(gè)”娛樂“視頻是完全沒有問題的吧,但是這個(gè)視頻上下文中還有一個(gè)”CS游戲“的視頻我也沒看骤菠,(這在推薦系統(tǒng)中常見它改,因?yàn)橥扑]系統(tǒng)會通過用的興趣”游戲“召回這些視頻)這樣如果我選”CS游戲“的視頻作為負(fù)樣本是不是比”娛樂“的更好呢,因?yàn)槲揖褪遣幌矚gCS而喜歡Dota商乎,這樣訓(xùn)練的Embeddings更加具有區(qū)分度央拖。

上述這個(gè)問題一直是我的疑問,當(dāng)然還沒有時(shí)間去驗(yàn)證鹉戚,結(jié)果看到這篇文章鲜戒,完全解決了我之前的疑惑。這篇文章從這些方面說明了很多問題抹凳,并且結(jié)合了很多在Airbnb場景下的工程問題遏餐,仍然值得仔細(xì)研究。

Airbnb 中的 Embedding

Listing Embeddings

首先指明一下這里的Listing 就是推薦系統(tǒng)中的item赢底。

Airbnb與其他得到embedding 的方式類似失都,利用用的點(diǎn)擊歷史柏蘑,然后上下文預(yù)測的方式訓(xùn)練listing embedding。

公式如下:

利用Skip-Gram + 負(fù)采樣的方式訓(xùn)練上述公式粹庞,\text{v}_l 是listing 的表示向量咳焚,\text{v}_c'是網(wǎng)絡(luò)參數(shù),D_n是負(fù)采樣的樣本集合信粮。

當(dāng)然Airbnb不僅僅是這樣做黔攒,因?yàn)橛行┓孔硬粌H是用戶點(diǎn)擊過,而且是用戶booked的强缘,這里只有一個(gè)listing督惰。也就是說在airbnb的場景中,用戶看了很多房源之后最后booked了一個(gè)房源旅掂。既然是這樣赏胚,airbnb希望充分利用起這樣的監(jiān)督信息。如Figure1商虐,中心的listing不僅去預(yù)測它的上下文還去預(yù)測一個(gè)booked listing觉阅。這是一個(gè)global context,并且在這個(gè)序列中一直是不變的秘车。所以它的優(yōu)化目標(biāo)添加了一項(xiàng):

值得注意的是這里使用的參數(shù)v_{l_b}'與上述的v_c'不一樣典勇,這其實(shí)可以看作是兩個(gè)不同的task,一個(gè)只是在學(xué)習(xí)中心listing與周圍listing的關(guān)系叮趴,而另一個(gè)task想學(xué)習(xí)的是這一串序列所有的listing與最后的booked linsting有另外一種關(guān)系割笙,很顯然這是不一樣的。另外v_{l_b}這里的參數(shù)量還是挺大的眯亦,是看了l然后最后選了b的所有集合大小伤溉。

這樣當(dāng)然還不夠,為了學(xué)習(xí)更強(qiáng)的差異性妻率,也就是用戶會看某個(gè)房源乱顾,但不會看相同市場的其它房源,注意之前負(fù)采樣是所有里面隨機(jī)宫静,而這里是選用相同的市場的其它的房源走净。當(dāng)然這兩種關(guān)系仍然是不同的,所以添加一項(xiàng)負(fù)采樣孤里,并且參數(shù)都不一樣温技,如下:

最后總結(jié)這個(gè)優(yōu)化目標(biāo):

  • v_l 是中心房源的向量,v'都表示網(wǎng)絡(luò)參數(shù)
  • D_p 是房源對(l,c)集合,l扭粱,c在都在一個(gè)窗口內(nèi)舵鳞。
  • D_n 是房源對(l,c)的負(fù)采樣集合。
  • l_b 是用戶看過這一系列房源最終預(yù)定的房源琢蛤。一個(gè)序列只有一個(gè)蜓堕。
  • D_{m_n}是與l同一個(gè)市場的負(fù)采樣集合抛虏。

v_{m_n}'是參數(shù)量大小就是每個(gè)市場下房源的集合,如果每個(gè)房源只屬于一個(gè)市場套才,那么它就和房源字典V大小相同迂猴。

基于embedding 的相似房源推薦

有了每個(gè)房源的embedding 表示之后,之后可以將它利用在i2i的召回上背伴,簡單上來說就是通過用戶的點(diǎn)擊歷史來推薦與這些房源相似的房源沸毁,這個(gè)相似度是通過向量的距離來計(jì)算的。

值得一提的是傻寂,Airbnb有兩點(diǎn)比較特別

  • 1.分市場找到最相似的房源
  • 2.不僅利用了點(diǎn)擊歷史H_c息尺,而且利用未點(diǎn)擊的記錄 H_s

所以它定義了兩個(gè)相似:

由于Airbnb的場景是推薦房源疾掰,所以限制推薦候選房源所屬地非常重要搂誉。第二點(diǎn)計(jì)算跳過的房源相似分,這樣相當(dāng)于一種負(fù)反饋的機(jī)制静檬,也就說對于那些用戶跳過的房源炭懊,只要候選房源與他們相似,就不容易被推薦拂檩。

房源冷啟動問題

冷啟動一直是推薦系統(tǒng)很重要問題侮腹,這里給了一種冷啟動的方法,對于新的listing embedding稻励,因?yàn)闆]有用戶行為數(shù)據(jù)父阻,它利用3個(gè)相同類別,相似價(jià)格的listing embedding求平均得到钉迷。

user-type 和listing-type embedding

僅僅有兩個(gè)房源之間的相似性還不夠,Airbnb希望能直接學(xué)習(xí)user embedding和listing embedding钠署,然后計(jì)算它們的相似性來直接影響排序模型糠聪。

首先他們將用戶和listing都分別聚類,具有相似特征的user會聚到同一個(gè)user-type谐鼎,而具有相似特征listing聚到相同的listing-type舰蟆。這里的相似特征指的是基礎(chǔ)屬性,例如用戶最近booked3個(gè)房子狸棍,用戶年齡等等身害。最終表示成這樣的一個(gè)id:SF_lg1_dt1_f p1_pp1_nb1_ppn2_ppn3_c2_nr3_l5s3_g5s3,每兩個(gè)下劃線中間表示一個(gè)基礎(chǔ)特征草戈,所有基礎(chǔ)特征相同的user都映射到相同的id塌鸯。listing的映射也是同理。這樣做的目的主要是因?yàn)槟承﹗ser listing的稀疏性唐片,很多用戶和listing的行為數(shù)較少丙猬,比如一個(gè)user只有3次點(diǎn)擊歷史涨颜,這樣的user直接放進(jìn)模型中肯定學(xué)的不好,但是又不能忽視這樣的user茧球,因?yàn)檫@直接決定了embedding 的覆蓋量庭瑰。所以Airbnb想出這種方式來提高覆蓋量,listing 的做法也是類似的道理抢埋。

由于Airbnb的場景是為了用戶預(yù)訂房源弹灭,所以在學(xué)習(xí)user embedding的時(shí)候只利用用戶的booked listing歷史。它的優(yōu)化目標(biāo)如下:

其中v_{u_t}表示user-type的embedding揪垄,v_c'是網(wǎng)絡(luò)參數(shù)穷吮,D_{book}是用戶的booked listing歷史集合,D_{neg}是負(fù)采樣的集合福侈。

而對于list-type的embedding通過下面的目標(biāo)訓(xùn)練:

值得注意的時(shí)候這里使用的是相同的網(wǎng)絡(luò)參數(shù)v_c'酒来,所以通過這種方式能將user-type和listing-type的向量學(xué)到同一個(gè)空間內(nèi)。這部分內(nèi)容可以參考paragraph2vec中的PV-DBOW模型肪凛,與之目標(biāo)相似堰汉。

這里還有一個(gè)負(fù)反饋的方式就是利用了用戶rejection的 listing,那這寫listing作為負(fù)樣本伟墙。改造之后的目標(biāo)是:

至此翘鸭,Airbnb這篇論文的幾種embedding技術(shù)介紹完了,總的來說就是通過skipGram+負(fù)采樣的訓(xùn)練方式戳葵,然后在考慮兩點(diǎn)在實(shí)際的工程中變形:1.如何構(gòu)造點(diǎn)擊序列就乓,2.如何負(fù)采樣。Airbnb的經(jīng)驗(yàn)告訴我們負(fù)采樣的時(shí)候充分利用一些監(jiān)督信息是很有幫助的拱烁。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末生蚁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戏自,更是在濱河造成了極大的恐慌邦投,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡缘回,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門念脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弯淘,你說我怎么就攤上這事绿店。” “怎么了庐橙?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵惯吕,是天一觀的道長惕它。 經(jīng)常有香客問我,道長废登,這世上最難降的妖魔是什么淹魄? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堡距,結(jié)果婚禮上甲锡,老公的妹妹穿的比我還像新娘。我一直安慰自己羽戒,他們只是感情好缤沦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著易稠,像睡著了一般缸废。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驶社,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天企量,我揣著相機(jī)與錄音,去河邊找鬼亡电。 笑死届巩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的份乒。 我是一名探鬼主播恕汇,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼或辖!你這毒婦竟也來了瘾英?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颂暇,失蹤者是張志新(化名)和其女友劉穎缺谴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟀架,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓣赂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年榆骚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了片拍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妓肢,死狀恐怖捌省,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碉钠,我是刑警寧澤纲缓,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布卷拘,位于F島的核電站,受9級特大地震影響祝高,放射性物質(zhì)發(fā)生泄漏栗弟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一工闺、第九天 我趴在偏房一處隱蔽的房頂上張望乍赫。 院中可真熱鬧,春花似錦陆蟆、人聲如沸雷厂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽改鲫。三九已至,卻和暖如春林束,著一層夾襖步出監(jiān)牢的瞬間像棘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工诊县, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讲弄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓依痊,卻偏偏與公主長得像避除,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子胸嘁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355